<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Treadwell</title><link>https://treadwell.net/</link><description>Recent content on Treadwell</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 08 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://treadwell.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Weekly Update 67</title><link>https://treadwell.net/blog/weekly-update-67/</link><pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-67/</guid><description>&lt;p&gt;So it&amp;rsquo;s been&amp;hellip; almost a year. Sorry.&lt;/p&gt;
&lt;p&gt;I know &amp;ldquo;weekly&amp;rdquo; is doing a lot of heavy lifting in the title here, but sometimes life gets in the way and this blog ends up sitting quietly while everything else keeps moving. That&amp;rsquo;s been the case for the last while. I kept meaning to write, but the longer it went, the harder it felt to pick up the thread again.&lt;/p&gt;
&lt;p&gt;The good news is the site is rebuilt now, and this time it&amp;rsquo;s using &lt;a href="https://gohugo.io/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/gohugo.io.ico" alt="" width="16" height="16" loading="lazy"&gt;Hugo&lt;/a&gt;. I wanted something simpler to manage. I&amp;rsquo;d been feeling the weight of my old setup and I wanted a stack that was easier to maintain, easier to reason about, and less of a chore to keep running.&lt;/p&gt;</description></item><item><title>Communication in a Team</title><link>https://treadwell.net/blog/communication-in-a-team/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/communication-in-a-team/</guid><description>&lt;p&gt;I spoke with a friend recently who was a little frustrated after a one-on-one with his manager. The feedback he got was essentially that he needed to communicate more. That&amp;rsquo;s it. No specifics, no examples, just communicate more.&lt;/p&gt;
&lt;p&gt;He came to me confused, and honestly, I get it. That&amp;rsquo;s a vague ask. If you&amp;rsquo;ve never been told &lt;em&gt;how&lt;/em&gt; to communicate in a professional setting, the note lands flat. You&amp;rsquo;re left guessing what &amp;ldquo;more&amp;rdquo; even means.&lt;/p&gt;</description></item><item><title>Maui, Hawaii</title><link>https://treadwell.net/blog/maui-hawaii/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/maui-hawaii/</guid><description>&lt;p&gt;This was one of the best places I&amp;rsquo;ve ever visited. Not only was it beautiful, but it was very relaxing. I was there with my wife for our honeymoon in July 2024.&lt;/p&gt;
&lt;h2 id="where-we-stayed"&gt;Where we stayed&lt;/h2&gt;
&lt;p&gt;We booked an &lt;a href="https://www.airbnb.com/rooms/25688687" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.airbnb.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Airbnb condo in Maalaea&lt;/a&gt; hosted by Viktoria. Solid place. The AC in the bedroom was out when we arrived, but they had it fixed by the second day with no fuss. No other issues at all.&lt;/p&gt;</description></item><item><title>Weekly Update 66</title><link>https://treadwell.net/blog/weekly-update-66/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-66/</guid><description>&lt;p&gt;Been a month. Honestly that&amp;rsquo;s fine.&lt;/p&gt;
&lt;h2 id="ghostjam-games"&gt;GhostJam Games&lt;/h2&gt;
&lt;p&gt;So.. we&amp;rsquo;ve announced our release, been localizing the game, fighting with cert to publish on Steam, among other things.&lt;/p&gt;
&lt;p&gt;The game is in a really good place. Some bugs keep popping up as they do, but we&amp;rsquo;re closing them quick.&lt;/p&gt;
&lt;p&gt;I hired a new engineer to come in and help us firefight, we had some things we didn&amp;rsquo;t have the time for so needed to get some help. He&amp;rsquo;s kicking ass.&lt;/p&gt;</description></item><item><title>Steam Leaderboard Grouping</title><link>https://treadwell.net/blog/steam-leaderboard-grouping/</link><pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/steam-leaderboard-grouping/</guid><description>&lt;p&gt;So in &lt;a href="https://store.steampowered.com/app/3558400/Backseat_Drivers/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Backseat Drivers&lt;/a&gt; we wanted to group players together (since the game is coop) on the leaderboard. Well this isn&amp;rsquo;t something that&amp;rsquo;s supported out of the box by Valve so I had to do some hacky stuff.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://files.treadwell.net/2025/09/322dec54.png" alt="Screenshot 2025-09-06 023609.png"&gt;&lt;/p&gt;
&lt;h2 id="how"&gt;How?&lt;/h2&gt;
&lt;p&gt;So in the Steam API &lt;a href="https://partner.steamgames.com/doc/api/ISteamUserStats#UploadLeaderboardScore" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/partner.steamgames.com.ico" alt="" width="16" height="16" loading="lazy"&gt;UploadLeaderboardScore&lt;/a&gt; it accepts a pScoreDetails (const int32*). Do you see where I&amp;rsquo;m going with this yet?&lt;/p&gt;
&lt;p&gt;I take each player&amp;rsquo;s SteamID, split it into two int32 values (low/high), and store them in sequence:
&lt;code&gt;[0] = P1.low, [1] = P1.high, [2] = P2.low, [3] = P2.high&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Weekly Update 65</title><link>https://treadwell.net/blog/weekly-update-65/</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-65/</guid><description>&lt;p&gt;Oh boy. A week behind again. Sorry. Been super busy.&lt;/p&gt;
&lt;p&gt;Honestly we&amp;rsquo;ve been just hard at work on Backseat Drivers. We&amp;rsquo;re pushing super hard on releasing before Q4.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll have more to write about next week.&lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 64</title><link>https://treadwell.net/blog/weekly-update-64/</link><pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-64/</guid><description>&lt;p&gt;Once again I&amp;rsquo;m late as usual - sorry I&amp;rsquo;m super busy.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re prepping for the release of Backseat Drivers - no public date yet, but full steam ahead. &lt;a href="https://treadwell.net/blog/weekly-update-63/"&gt;Last week&lt;/a&gt; I spoke about some bizdev stuff and &lt;a href="https://ghostjam.com/news/ghostjam-games-partners-with-foulball-hangover/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ghostjam.com.ico" alt="" width="16" height="16" loading="lazy"&gt;I can finally talk about it&lt;/a&gt;.
We established a partnership with &lt;a href="https://foulballhangover.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/foulballhangover.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Foulball Hangover&lt;/a&gt; - the creators of &lt;a href="https://store.steampowered.com/app/1106840/Hydroneer/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Hydroneer&lt;/a&gt;. GhostJam received a development loan to fund our final stretch of development. More details of this on the GhostJam &lt;a href="https://ghostjam.com/news/ghostjam-games-partners-with-foulball-hangover/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ghostjam.com.ico" alt="" width="16" height="16" loading="lazy"&gt;post&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Weekly Update 63</title><link>https://treadwell.net/blog/weekly-update-63/</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-63/</guid><description>&lt;p&gt;Almost 2 weeks. Sorry.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been uber busy with GhostJam stuff. I finally rebuilt our entire CI (&lt;a href="https://www.jenkins.io/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.jenkins.io.ico" alt="" width="16" height="16" loading="lazy"&gt;jenkins&lt;/a&gt;) pipeline to actually use the &lt;a href="https://www.jenkins.io/doc/pipeline/steps/workflow-cps/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.jenkins.io.ico" alt="" width="16" height="16" loading="lazy"&gt;Groovy pipeline script&lt;/a&gt; instead of being batch files.&lt;/p&gt;
&lt;p&gt;I made some bizdev decisions for &lt;a href="https://ghostjam.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ghostjam.com.ico" alt="" width="16" height="16" loading="lazy"&gt;GhostJam&lt;/a&gt; that are very good. Just waiting for the right time to announce it, but it&amp;rsquo;s soon.&lt;/p&gt;
&lt;p&gt;I began working on localization of &lt;a href="https://store.steampowered.com/app/3558400/Backseat_Drivers/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Backseat Drivers&lt;/a&gt; and it&amp;rsquo;s honestly very close to being complete. Well in the sense that it&amp;rsquo;s an initial pass on translations.&lt;/p&gt;</description></item><item><title>Weekly Update 62</title><link>https://treadwell.net/blog/weekly-update-62/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-62/</guid><description>&lt;p&gt;So the last almost 2 weeks I&amp;rsquo;ve been doing mostly bizdev for GhostJam and I&amp;rsquo;ve been working on some other things for GhostJam.&lt;/p&gt;
&lt;p&gt;Nothing honestly to write about just yet, but exciting things are coming.&lt;/p&gt;
&lt;p&gt;Last weekend the family and I went to a cave place thingy to explore the wilderness and a few caves. The kids had a blast playing in the creek. The weekend before that we went to the lake to swim with my mother - it was a nice time.&lt;/p&gt;</description></item><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>Weekly Update 61</title><link>https://treadwell.net/blog/weekly-update-61/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-61/</guid><description>&lt;p&gt;Back again.&lt;/p&gt;
&lt;p&gt;Over the past week I&amp;rsquo;ve been working on the new &lt;a href="https://ghostjam.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ghostjam.com.ico" alt="" width="16" height="16" loading="lazy"&gt;GhostJam&lt;/a&gt; website and even updating this site a bit more on the backend. There&amp;rsquo;s still work to do on this site as I built it in a day, but whatever.&lt;/p&gt;
&lt;p&gt;I did some bizdev stuff last week for GhostJam that I can&amp;rsquo;t talk about just yet, but it&amp;rsquo;s pretty exciting. If this thing ends up coming to fruition then I&amp;rsquo;ll be very excited and can share the details then.&lt;/p&gt;</description></item><item><title>Weekly Update 60 - I'm alive</title><link>https://treadwell.net/blog/weekly-update-60/</link><pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-60/</guid><description>&lt;p&gt;Oh boy. It&amp;rsquo;s been years&amp;hellip; almost 3. So much stuff has changed since I last posted.&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t exactly a weekly update - we all know that I&amp;rsquo;ve been terrible at that in the past. At this point I should just rename this series to &amp;ldquo;annual update.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="is-this-on-can-you-hear-me"&gt;Is this on? Can you hear me?&lt;/h2&gt;
&lt;p&gt;Phew. It is. Good.&lt;/p&gt;
&lt;p&gt;I got married! I have 2 kids. I&amp;rsquo;ve worked at numerous companies since. I&amp;rsquo;ve also started my own company. We&amp;rsquo;re making some cool shit.&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>Unreal Dump</title><link>https://treadwell.net/blog/unreal-dump/</link><pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/unreal-dump/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://docs.unrealengine.com/5.1/en-US/API/Runtime/Core/Misc/TEnumRange/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.unrealengine.com.ico" alt="" width="16" height="16" loading="lazy"&gt;TEnumRange&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;see &lt;code&gt;\Runtime\Core\Public\Misc\EnumRange.h&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for (const EMyEnum Val : TEnumRange&amp;lt;EMyEnum&amp;gt;())&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Required to use &lt;code&gt;ENUM_RANGE_BY_COUNT&lt;/code&gt;, &lt;code&gt;ENUM_RANGE_BY_FIRST_AND_LAST&lt;/code&gt;, or &lt;code&gt;ENUM_RANGE_BY_VALUES&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;BlueprintAuthorityOnly, tbh some of &lt;a href="https://docs.unrealengine.com/5.1/en-US/ProgrammingAndScripting/GameplayArchitecture/Functions/Specifiers/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.unrealengine.com.ico" alt="" width="16" height="16" loading="lazy"&gt;these&lt;/a&gt; TIL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = &amp;quot;MyCategory&amp;quot;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;EditCondition, VisibleCondition, and EditConditionHides&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;UPROPERTY(..., meta = (EditCondition=&amp;quot;bToggled&amp;quot;))&lt;/code&gt; or &lt;code&gt;UPROPERTY(..., meta = (EditCondition=&amp;quot;MyEnum == MyEnum::None&amp;quot;))&lt;/code&gt; etc&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FSimpleMulticastDelegate and FSimpleDelegate&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These are delegates that you can bind only in C++ and don&amp;rsquo;t support any args. If using these you don&amp;rsquo;t have to do the macro to define them as they&amp;rsquo;re already defined so it helps clean up your classes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TArrayView&lt;/p&gt;</description></item><item><title>Weekly Update 59</title><link>https://treadwell.net/blog/weekly-update-59/</link><pubDate>Sun, 17 Jul 2022 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-59/</guid><description>&lt;p&gt;2 months. Yeah, it&amp;rsquo;s been a while. I spoke to an acquaintance yesterday and she brought up that I haven&amp;rsquo;t posted in 2 months so here&amp;rsquo;s a post just for you. 😀&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;What have I been up to? Well honestly so damn much. NMRiH2 is taking up most of my time.&lt;/p&gt;
&lt;p&gt;My company. So I mentioned that I formed the LLC and began working on a project. Well, I filed for the trademark and my attorney recommended that I release a game sooner than later so I&amp;rsquo;m doing just that. I&amp;rsquo;ve started a TPS survival project (similar to my old FPSGame project) and it&amp;rsquo;s going to be free. I&amp;rsquo;m focusing on gameplay rather than art so it&amp;rsquo;s going to be gray boxed with the epic mannequin for a release. The release date is TBD, but likely in 2 months. I plan to launch the company website around that time also - which will feature a blog etc to keep up to date. Trademark stuff is super stressful since you pay a load of money and then have to wait a minimum of 6 months to know if you got the trademark.&lt;/p&gt;</description></item><item><title>Weekly Update 58</title><link>https://treadwell.net/blog/weekly-update-58/</link><pubDate>Fri, 06 May 2022 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-58/</guid><description>&lt;p&gt;f. It&amp;rsquo;s been over a month since I started the weekly updates again. So much for the name huh?&lt;/p&gt;
&lt;p&gt;Give me a break, I&amp;rsquo;ve been really busy.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been not only busy with NMRiH2, but my own project. You know, the project that I worked on before getting hired by Lever Games - the project that I kept refactoring the inventory? Yeah, that one. I&amp;rsquo;ve been making really good progress every weekend. The inventory is just about complete.&lt;/p&gt;</description></item><item><title>Weekly Update 57</title><link>https://treadwell.net/blog/weekly-update-57/</link><pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-57/</guid><description>&lt;p&gt;Here we are almost 4 months into 2022 and I haven&amp;rsquo;t written a weekly update - how dare I?&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;ve been super busy with work&amp;hellip; and I haven&amp;rsquo;t wanted to write for a while. We&amp;rsquo;re closing in on our release date in October so we&amp;rsquo;re all working hard to complete stuff for the release.&lt;/p&gt;
&lt;p&gt;I recently revived my old project (the one that I spoke about the inventory). Since working on NMRiH2 I&amp;rsquo;ve learned some new techniques so I decided to revive the project and apply the new techniques. The last time I worked on this project I was unemployed so we&amp;rsquo;ll see how far it goes this time - hell I might hire someone to help out.&lt;/p&gt;</description></item><item><title>I Built a NAS</title><link>https://treadwell.net/blog/i-built-a-nas/</link><pubDate>Wed, 09 Feb 2022 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/i-built-a-nas/</guid><description>&lt;p&gt;So uh - yeah I built a nas.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src="https://files.trdwll.net/2022/01/nas3.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I ended up deciding to build a NAS as OVH pissed me off with the throttling me when uploading. I&amp;rsquo;ve also wanted to build a NAS for a while.&lt;/p&gt;
&lt;p&gt;Really the biggest thing that pushed me to pull the trigger was when I came across an amazing deal on eBay. For $430 I got the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.supermicro.com/en/products/motherboard/X11SSH-TF" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.supermicro.com.ico" alt="" width="16" height="16" loading="lazy"&gt;SuperMicro X11SSH-TF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Micron 64GB DDR4 ECC Ram&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ark.intel.com/content/www/us/en/ark/products/88173/intel-xeon-processor-e31245-v5-8m-cache-3-50-ghz.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ark.intel.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Intel® Xeon® Processor E3-1245 v5&lt;/a&gt; &lt;a href="https://ark.intel.com/content/www/us/en/ark/products/88169/intel-xeon-processor-e31240l-v5-8m-cache-2-10-ghz.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ark.intel.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Intel® Xeon® Processor E3-1240L v5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Samsung 960 Pro 512GB M.2&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.supermicro.com/en/products/accessories/addon/AOC-SLG3-2E4.php" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.supermicro.com.ico" alt="" width="16" height="16" loading="lazy"&gt;SuperMicro AOC-SLG3-2E4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;4x Samsung 850 Pro 256GB&lt;/li&gt;
&lt;li&gt;Some other misc stuff like cables, additional pci m.2 card, and m.2 enclosures for the AOC card.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rest of the components are as follows:&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>Colocating My Server</title><link>https://treadwell.net/blog/colocating-my-server/</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/colocating-my-server/</guid><description>&lt;p&gt;Colocating a server is something that I&amp;rsquo;ve wanted to do for a long time and I just never have until now. Over the years I&amp;rsquo;ve had numerous machines that I could&amp;rsquo;ve easily colocated (several 1U machines), but it has been too expensive. &lt;a href="https://joesdatacenter.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/joesdatacenter.com.ico" alt="" width="16" height="16" loading="lazy"&gt;JoesDatacenter&lt;/a&gt; has been around for a long time - even before I started my home lab, but it was a matter of shipping the server(s) or driving to Kansas City, MO. Driving is exactly what we did. Oh yeah, I decided to take my mom with me as a 3-day vacation - since she needed time away from our city also. During the trip, I was able to stop and meet one of our staff and I even gave him 4 of my old monitors (the 6 1080p monitors) as I wasn&amp;rsquo;t using them. The round trip cost me ~$700 and 3 days. I could&amp;rsquo;ve shipped the server for much cheaper, but I&amp;rsquo;d rather take it to the data center and have a mini-vacation - plus our staff member wouldn&amp;rsquo;t have got free monitors so I&amp;rsquo;m fine with the cost. I even stopped to visit with my brother and give him my old pc case (W200) and 2 monitors.&lt;/p&gt;</description></item><item><title>Weekly Update 56</title><link>https://treadwell.net/blog/weekly-update-56/</link><pubDate>Fri, 12 Nov 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-56/</guid><description>&lt;p&gt;So uh hello. It&amp;rsquo;s been a while since I&amp;rsquo;ve written a post. I&amp;rsquo;ll start off with my new case&amp;hellip; yes I made a mistake. I bought a new case the Enthoo Pro 2 and also built a small &lt;a href="https://pcpartpicker.com/user/trdwll/saved/r47fyc" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/pcpartpicker.com.ico" alt="" width="16" height="16" loading="lazy"&gt;ITX system&lt;/a&gt; as a secondary workstation.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://files.trdwll.net/2021/11/pc.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The case is awesome and I wish I would&amp;rsquo;ve got this instead of the W200 (it&amp;rsquo;s just way too big of a case).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been working long hours putting together NMRiH2 stuff and have started on dedicated server support - I think this was announced? We announced our release date which is awesome! I&amp;rsquo;m so excited.&lt;/p&gt;</description></item><item><title>Weekly Update 55 - New Monitors</title><link>https://treadwell.net/blog/weekly-update-55-new-monitors/</link><pubDate>Fri, 15 Oct 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-55-new-monitors/</guid><description>&lt;p&gt;Update: March 22, 2022: Yeah no fucking clue what happened to that inventory. I don&amp;rsquo;t have it anymore&amp;hellip;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been a busy few weeks for me. I&amp;rsquo;ve finally completed phase 5 on NMRiH2 and began working on phase 6.&lt;/p&gt;
&lt;p&gt;I bought new monitors this week, so instead of using &lt;a href="https://www.newegg.com/asus-vc239h-23-full-hd/p/N82E16824236583" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.newegg.com.ico" alt="" width="16" height="16" loading="lazy"&gt;6 24&amp;quot; 1080p 60Hz monitors&lt;/a&gt;, I&amp;rsquo;m now using &lt;a href="https://www.newegg.com/p/N82E16824012015?Item=N82E16824012015" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.newegg.com.ico" alt="" width="16" height="16" loading="lazy"&gt;4 27&amp;quot; 1440p 144Hz monitors&lt;/a&gt;. The change is awesome and I wish I would&amp;rsquo;ve upgraded a long time ago. I also bought new studio monitors (&lt;a href="https://www.amazon.com/gp/product/B08TY94WRX" 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;Mackie CR3-XBT&lt;/a&gt;) with a sub (&lt;a href="https://www.amazon.com/gp/product/B083N6Q72Z" 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;Mackie CR8S-XBT&lt;/a&gt;). *Before you flip shit, I don&amp;rsquo;t use bottled water anymore; I bought a water cooler and only use that bottle to fill it.*I ordered 2 16oz water bottles from Nalgene also - they should be in soon.&lt;/p&gt;</description></item><item><title>Weekly Update 54</title><link>https://treadwell.net/blog/weekly-update-54/</link><pubDate>Fri, 24 Sep 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-54/</guid><description>&lt;p&gt;I worked hard on NMRiH2 over the past 2 weeks trying to finish up Phase 5. I&amp;rsquo;ve merged most of the functionality into main this week so that&amp;rsquo;s awesome. I&amp;rsquo;m planning on having Phase 5 entirely completed and 1 pass polished by next Friday.&lt;/p&gt;
&lt;p&gt;The initial design for my small hobby project is taking shape more. If the project actually becomes more than a document then I&amp;rsquo;ll end up open-sourcing bits of it.&lt;/p&gt;</description></item><item><title>Weekly Update 53</title><link>https://treadwell.net/blog/weekly-update-53/</link><pubDate>Sun, 12 Sep 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-53/</guid><description>&lt;p&gt;This week I was very busy on NMRiH2 so I didn&amp;rsquo;t think about writing a post. I&amp;rsquo;ve mostly completed phase 5 so now I just have to go do a polish pass and it&amp;rsquo;s finished. I&amp;rsquo;m not entirely sure what I&amp;rsquo;m going to be working on next, but I have been given some ideas as to what it&amp;rsquo;ll be.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still designing the smaller tycoon game so I&amp;rsquo;m getting pretty excited about that. Yes I know I&amp;rsquo;ve jumped to a few projects over the past couple of years, but tbh the ones that I&amp;rsquo;ve dropped have been way too big for me to do alone. Let&amp;rsquo;s be honest here also, it&amp;rsquo;s not like that time was really wasted as I learned stuff. 🤷‍♂️&lt;/p&gt;</description></item><item><title>Weekly Update 52 - New Standing Desk</title><link>https://treadwell.net/blog/weekly-update-52-new-standing-desk/</link><pubDate>Fri, 03 Sep 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-52-new-standing-desk/</guid><description>&lt;p&gt;Welp, I&amp;rsquo;ve written 52 of these posts now so that&amp;rsquo;s a year&amp;rsquo;s worth! I wish I would&amp;rsquo;ve stuck with it each week, but honestly, most of them would&amp;rsquo;ve been the same shit every week. Thanks for taking the time to read my blog.&lt;/p&gt;
&lt;p&gt;This week I finished up phase 4 and started on phase 5. (I was stuck on a replication issue with GetOwner, but I ended up coming up with a different design for this system) Phase 5 is coming along well but will take I&amp;rsquo;m estimating a month.&lt;/p&gt;</description></item><item><title>Weekly Update 51 - Work and Steam/EOSBridge</title><link>https://treadwell.net/blog/weekly-update-51-work-and-steameosbridge/</link><pubDate>Fri, 27 Aug 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-51-work-and-steameosbridge/</guid><description>&lt;p&gt;Well, it&amp;rsquo;s certainly been over a week since the last update - sorry about that. I&amp;rsquo;ve been really busy working on NMRiH2 and I&amp;rsquo;m making good progress.  I&amp;rsquo;m very close to entering phase 5 which I estimate will take a month to finish. Phase 4 has taken longer than I had expected, but I&amp;rsquo;m very close.&lt;/p&gt;
&lt;p&gt;I decided this week that I wouldn&amp;rsquo;t be working on SteamBridge or UDatabase for the time being as I don&amp;rsquo;t have the time. I also announced in my discord that I wasn&amp;rsquo;t going to be making EOSBridge as Epic is making its own plugin to implement EOS.&lt;/p&gt;</description></item><item><title>Weekly Update 50 - More Work and Building a New Desk</title><link>https://treadwell.net/blog/weekly-update-50-more-work-and-building-a-new-desk/</link><pubDate>Fri, 06 Aug 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-50-more-work-and-building-a-new-desk/</guid><description>&lt;p&gt;I&amp;rsquo;ve continued working on a major feature in &lt;a href="https://store.steampowered.com/app/292000/No_More_Room_In_Hell_2/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;NMRiH2&lt;/a&gt; and it&amp;rsquo;s coming together quite well. I&amp;rsquo;m very excited to be working with this team. I&amp;rsquo;m now on phase 4 of this feature.&lt;/p&gt;
&lt;p&gt;I decided to also build a new desk so more on that soon. I bought some tools that I should&amp;rsquo;ve had for a long time - such as a drill, stud finder, and a laser level. I also bought 1000ft of cat6 even though at the time of writing this I just needed ~1ft of cable for a quick run. Oh well, it was only $130 for 1000ft.&lt;/p&gt;</description></item><item><title>Weekly Update 49 - New World, NMRiH2, and Future Company Systems</title><link>https://treadwell.net/blog/weekly-update-49/</link><pubDate>Fri, 30 Jul 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-49/</guid><description>&lt;p&gt;The new job is going very well. I&amp;rsquo;m still working on a major feature that&amp;rsquo;s being implemented in 5 phases. I&amp;rsquo;m currently on phase 2 - about to move into phase 3. 😀&lt;/p&gt;
&lt;p&gt;We use &lt;a href="https://mattermost.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/mattermost.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Mattermost&lt;/a&gt; for our dev chat so I decided to use that for my company also. I went ahead and configured Mattermost for my company so when I&amp;rsquo;m ready to use it I can.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m currently taking a look at &lt;a href="https://js.wiki/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/js.wiki.ico" alt="" width="16" height="16" loading="lazy"&gt;Wiki JS&lt;/a&gt; to be the internal wiki software for my company in the future. Originally I wanted to use GitHub wiki, but I don&amp;rsquo;t want to pay for a Pro account for the organization. I plan to use the new &lt;a href="https://github.com/features/issues" 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;GitHub Issues&lt;/a&gt; for the project management/bug tracking when it releases, but I might find something like Redmine to run.&lt;/p&gt;</description></item><item><title>Weekly Update 48 - New Exciting Job</title><link>https://treadwell.net/blog/weekly-update-48-new-exciting-job/</link><pubDate>Fri, 23 Jul 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-48-new-exciting-job/</guid><description>&lt;p&gt;Hey pal!&lt;/p&gt;
&lt;p&gt;I started a new job working on &lt;a href="https://store.steampowered.com/app/292000/No_More_Room_In_Hell_2/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;No More Room in Hell 2&lt;/a&gt; this Monday. I can&amp;rsquo;t exactly talk about what I&amp;rsquo;m working on just yet, but when the game releases I&amp;rsquo;ll be able to - it&amp;rsquo;s some very exciting systems that I&amp;rsquo;m sure will bring a ton of fun to the game. I&amp;rsquo;m very excited to be working with industry veterans so I can learn more stuff.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t worked on my game this week as I have a new job, but I plan to pick up development again very soon.&lt;/p&gt;</description></item><item><title>Weekly Update 47 - Refactor and Day Night Cycle</title><link>https://treadwell.net/blog/weekly-update-47/</link><pubDate>Fri, 16 Jul 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-47/</guid><description>&lt;p&gt;Welp, it&amp;rsquo;s been 2 weeks since a &amp;ldquo;weekly update&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been working on my game a ton more. I&amp;rsquo;ve almost finished the first pass of refactoring the weapon system. I plan to do a write-up about weapon systems and inventory systems in UE4/5 eventually when I have the free time.&lt;/p&gt;
&lt;p&gt;I did a major refactor to the character class and separated it into multiple classes so my AI can use some of the cool features. I ripped out my day-night cycle system in favor of the Ultra Dynamic Sky plugin. I also finally fixed lootable actors (chests) as they&amp;rsquo;ve been broken for quite some time due to the major refactor of the inventory.&lt;/p&gt;</description></item><item><title>Weekly Update 46 - American Truck Simulator</title><link>https://treadwell.net/blog/weekly-update-46-american-truck-simulator/</link><pubDate>Fri, 02 Jul 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-46-american-truck-simulator/</guid><description>&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;This week I&amp;rsquo;ve been working on the game again. I ripped out the old weapon system (wasn&amp;rsquo;t designed that well) and implemented the first new iteration. I haven&amp;rsquo;t spoken about the inventory system in some time so I figured why not bring it up again. I just have like 5 things to finish for the inventory such as item stacking or key binds (such as split a stack or move all items of a type). I&amp;rsquo;ve also been researching save systems so I can store game data in the database. I&amp;rsquo;m not entirely sure how I&amp;rsquo;m going to do it, but it&amp;rsquo;s going to be in JSON.&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>Things I Want to Do Before I Turn 30</title><link>https://treadwell.net/blog/things-i-want-to-do-before-i-turn-30/</link><pubDate>Fri, 11 Jun 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/things-i-want-to-do-before-i-turn-30/</guid><description>&lt;p&gt;&lt;a href="https://treadwell.net/blog/things-i-want-do-i-turn-25/"&gt;Previously&lt;/a&gt; I wrote about the same thing, but before 25. I only accomplished one of the things that I wanted to do so I think it&amp;rsquo;s time to change that.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I turn 26 next week. 🙁&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PADI certified - I&amp;rsquo;ve always wanted to scuba dive.&lt;/li&gt;
&lt;li&gt;Own a good amount of land and some rental properties.&lt;/li&gt;
&lt;li&gt;Have a successful company ($1mm/y+) that employs &amp;gt;= 10 people. - I&amp;rsquo;d be ok with a successful company though.&lt;/li&gt;
&lt;li&gt;Start a company to help indie game devs build games. - This backpacks on 3. as I would need money to make this happen.&lt;/li&gt;
&lt;li&gt;Travel more, maybe to other states or countries. - I really don&amp;rsquo;t get out much, in fact, I&amp;rsquo;m considered anti-social by family, and friends - but I&amp;rsquo;m not&amp;hellip; I just don&amp;rsquo;t care about going places much.&lt;/li&gt;
&lt;li&gt;Allocate more time for family and friends. - I don&amp;rsquo;t spend as much time as I should with them and I know I&amp;rsquo;ll regret it when I&amp;rsquo;m older and they&amp;rsquo;re dead. 😢&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Weekly Update 45 - Company Website</title><link>https://treadwell.net/blog/weekly-update-45-company-website/</link><pubDate>Fri, 11 Jun 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-45-company-website/</guid><description>&lt;p&gt;For the past week and a half, I&amp;rsquo;ve been working on building the foundation of what&amp;rsquo;s going to be the website for my future company. I&amp;rsquo;m planning to form this new company in the coming months and in turn, I&amp;rsquo;ll be deploying the website at that time. The website will function as a hub for all of the company projects which separates the projects by subdomain. This design will not only eliminate the need to register and pay for more domains, but it allows all projects to be under one roof to be able to maintain them easier. This concept is called &lt;a href="https://en.wikipedia.org/wiki/Multitenancy" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/en.wikipedia.org.ico" alt="" width="16" height="16" loading="lazy"&gt;multi-tenancy&lt;/a&gt;. Literally, each project will have its own set of pages such as a blog. I took inspiration from the way that &lt;a href="https://facepunch.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/facepunch.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Facepunch&lt;/a&gt; has its site &lt;a href="https://garry.tv/facepunch-api" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/garry.tv.ico" alt="" width="16" height="16" loading="lazy"&gt;set up&lt;/a&gt; along with &lt;a href="https://bethesda.net" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/bethesda.net.ico" alt="" width="16" height="16" loading="lazy"&gt;Bethesda&lt;/a&gt; and many others. The site won&amp;rsquo;t be finished for some time and it&amp;rsquo;s not like I&amp;rsquo;ll be pushing it live before the company formation.&lt;/p&gt;</description></item><item><title>Weekly Update 44 - Fishing and Refactoring</title><link>https://treadwell.net/blog/weekly-update-44-fishing-and-refactoring/</link><pubDate>Fri, 21 May 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-44-fishing-and-refactoring/</guid><description>&lt;p&gt;Last weekend is the first time I went fishing for several years. I didn&amp;rsquo;t catch anything, but my mom went with me and she caught a bluegill. 😀 I&amp;rsquo;m going fishing again this weekend so maybe I&amp;rsquo;ll catch something.&lt;/p&gt;
&lt;p&gt;This week I worked on cleaning up some systems in my game. I started on implementing lootable actors (aka chests) and it&amp;rsquo;s in and working. Once I finish up some smaller things then I&amp;rsquo;m going to start doing weekly goals, because right now I just work on anything and don&amp;rsquo;t exactly get much done.&lt;/p&gt;</description></item><item><title>Weekly Update 43 - Internet Outage</title><link>https://treadwell.net/blog/weekly-update-43-internet-outage/</link><pubDate>Fri, 14 May 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-43-internet-outage/</guid><description>&lt;p&gt;The week started off with no power for ~24 hours and no internet for ~48 hours. When the internet was restored Tuesday I just watched YouTube. I pretty much only watched YouTube all week.&lt;/p&gt;
&lt;p&gt;I did work on a contract this week, it was something that took ~2 hours and I&amp;rsquo;ll be open-sourcing it soon as it&amp;rsquo;s not a major plugin under NDA.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Some Simple Optimizations in Unreal Engine</title><link>https://treadwell.net/blog/some-simple-optimizations-unreal-engine/</link><pubDate>Wed, 12 May 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/some-simple-optimizations-unreal-engine/</guid><description>&lt;p&gt;When it boils down to it you should profile things before optimizing however, these things can be added without the need to profile.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TArray.Reserve(size)
&lt;ul&gt;
&lt;li&gt;This will reserve memory for the array in advance. Do this before modifying an array to prevent allocations in a loop etc.
When adding elements to a container in a loop, performances can be impacted because of multiple heap allocations to resize the container.&lt;/li&gt;
&lt;li&gt;Also, do this on temporary allocations. (if you allocate an array in a method and then return that array later or need to do something specific to the results)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;// Adds N copies of a character to the end of an array.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;void AppendCharacterCopies(char CharToCopy, int32 N, TArray&amp;lt;char&amp;gt;&amp;amp; Result)
&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 (N &amp;gt; 0)
&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; Result.Reserve(Result.Num() + N);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for (int32 Index=0; Index &amp;lt; N; Index++)
&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; Result.Add(CharToCopy);
&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&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;void AppendCharacterCopies(char CharToCopy, int32 N)
&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 (N &amp;gt; 0)
&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; TArray&amp;lt;char&amp;gt; Result;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Result.Reserve(N);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for (int32 Index = 0; Index &amp;lt; N; Index++)
&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; Result.Add(CharToCopy);
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // do something with Result
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;TArray.Emplace(type)&lt;/p&gt;</description></item><item><title>Weekly Update 42 - Reviving an Old Hobby and Skill System</title><link>https://treadwell.net/blog/weekly-update-42/</link><pubDate>Fri, 07 May 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-42/</guid><description>&lt;p&gt;Over the last week, I&amp;rsquo;ve been working on adding the skill/talent system to my game. For the most part, it&amp;rsquo;s finished - I just have to finish up the early UI for it. After I finish up the skills I&amp;rsquo;ll likely be working on either more AI or I may work on the &lt;a href="https://trdwll.com/experiments/udatabase/"&gt;database&lt;/a&gt; plugin as I&amp;rsquo;ll start needing that soon. I don&amp;rsquo;t know, we&amp;rsquo;ll see what I end up working on next week. 🙂&lt;/p&gt;</description></item><item><title>Weekly Update 41 - Importing Blog Posts</title><link>https://treadwell.net/blog/weekly-update-41-importing-blog-posts/</link><pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-41-importing-blog-posts/</guid><description>&lt;p&gt;The last couple of weeks have been busy for me. I&amp;rsquo;ve been working on my project and I can say I&amp;rsquo;ve been making some good progress.&lt;/p&gt;
&lt;p&gt;I found my old WordPress blog so I brought over some posts from 2016-2017. I had some others but decided against bringing them over. I&amp;rsquo;m also pretty sure I had a blog full of posts before 2016 as I had the first Hello World in 2015. Oh well. 🤷‍♂️&lt;/p&gt;</description></item><item><title>Steam Party and UE4</title><link>https://treadwell.net/blog/steam-party-and-ue4/</link><pubDate>Sun, 25 Apr 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/steam-party-and-ue4/</guid><description>&lt;p&gt;In my &lt;a href="https://discord.com/invite/uNZ3FQ7" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/discord.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Discord&lt;/a&gt; someone was asking about Steam parties so I thought that it was a good topic to write a guide on so here we are. Quite frankly this is something that someone should&amp;rsquo;ve made a guide on a long time ago.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Steam plugin (&lt;a href="https://www.unrealengine.com/marketplace/en-US/product/steambridge" 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;SteamBridge&lt;/a&gt;, UWorks, SteamCore, etc)&lt;/li&gt;
&lt;li&gt;Some C++ or BP knowledge&lt;/li&gt;
&lt;li&gt;A brain and patience 😀&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In this guide, I&amp;rsquo;m using my SteamBridge plugin, but you&amp;rsquo;re more than welcome to use any other Steam plugin that you already have. &lt;em&gt;(The Steam API is the same across the board, but each plugin may implement it differently.)&lt;/em&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>Weekly Update 40</title><link>https://treadwell.net/blog/weekly-update-40/</link><pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-40/</guid><description>&lt;p&gt;This week I worked on porting my inventory system to use another method for storage and replication. I&amp;rsquo;ve started writing a guide on building an inventory system so that should be out in a couple of weeks. I&amp;rsquo;ve been working on my inventory for so long now and I&amp;rsquo;ve got it to the point that I&amp;rsquo;m very happy with it. Unfortunately, it&amp;rsquo;s taken me a couple of months to get it just right.&lt;/p&gt;</description></item><item><title>Weekly Update 39</title><link>https://treadwell.net/blog/weekly-update-39/</link><pubDate>Fri, 02 Apr 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-39/</guid><description>&lt;p&gt;I worked on my project this week and even started a new web project. More on the web project soon - just know it&amp;rsquo;s a useful web project.&lt;/p&gt;
&lt;p&gt;I refactored and optimized my inventory system this week. Before it was using FString for ItemIDs and now it&amp;rsquo;s using uint16/int32 (for BP). I&amp;rsquo;ve also shrunk my structs that I replicate so I&amp;rsquo;m now replicating fewer data. I&amp;rsquo;m looking into better more optimized methods of replicating arrays so when I figure that out I&amp;rsquo;ll write about that next week.&lt;/p&gt;</description></item><item><title>Weekly Update 38</title><link>https://treadwell.net/blog/weekly-update-38/</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-38/</guid><description>&lt;p&gt;Saturday was my last day on the VAIL VR team. This decision wasn&amp;rsquo;t made lightly and it wasn&amp;rsquo;t on bad terms. Albert and the VAIL team are amazing people, I wish VAIL and the team luck.&lt;/p&gt;
&lt;p&gt;I also left the HodlGod team yesterday. Again not on bad terms, my contract was just up and I didn&amp;rsquo;t want to go to full time. 🙂&lt;/p&gt;
&lt;p&gt;Now am unemployed. lmao&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been working on my side project quite a bit and as I&amp;rsquo;ve said last week I&amp;rsquo;m finishing up the inventory system.&lt;/p&gt;</description></item><item><title>Weekly Update 37</title><link>https://treadwell.net/blog/weekly-update-37/</link><pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-37/</guid><description>&lt;p&gt;Well hey! It&amp;rsquo;s been a couple of weeks since my last weekly update and this post will be pretty juicy.&lt;/p&gt;
&lt;p&gt;I got hired to work on porting stuff to C++ for the game &lt;a href="https://www.hodlgod.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.hodlgod.com.ico" alt="" width="16" height="16" loading="lazy"&gt;HodlGod&lt;/a&gt;. After my trial period of 2 weeks, I may be hired full-time as the Senior Programmer. If I&amp;rsquo;m brought on full-time I&amp;rsquo;ll be leaving VAIL 🙁, but I&amp;rsquo;ll stick around as a consultant. Some news on &lt;a href="https://store.steampowered.com/app/801550/VAIL_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;VAIL&lt;/a&gt; is the &lt;a href="https://www.startengine.com/aexlab" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.startengine.com.ico" alt="" width="16" height="16" loading="lazy"&gt;StartEngine&lt;/a&gt; investment page has hit $700k. That&amp;rsquo;s so crazy! 😀&lt;/p&gt;</description></item><item><title>Weekly Update 36</title><link>https://treadwell.net/blog/weekly-update-36/</link><pubDate>Fri, 26 Feb 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-36/</guid><description>&lt;p&gt;So this is delayed by a week since I was hit by a major ice/snow storm which caused a power and internet outage at my house/office.&lt;/p&gt;
&lt;p&gt;The storm really sucked. I had to go to a neighbors house and stay for a week while the power company resolved the outages around the county. Really all I did last week was watch movies and hang out with my neighbors. (in this case it was my dad lol)&lt;/p&gt;</description></item><item><title>Weekly Update 35</title><link>https://treadwell.net/blog/weekly-update-35/</link><pubDate>Fri, 12 Feb 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-35/</guid><description>&lt;p&gt;This week I started work on the weapon system for my side project and it&amp;rsquo;s coming along quite nicely. I played some Call of Duty: Cold War this week also as I have in the previous few weeks. I finished writing a guide for Steam also, but I&amp;rsquo;m waiting to publish it when I finish the async portion of SteamBridge as the guide doesn&amp;rsquo;t work 100%.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>How To Change UE4 Class Templates</title><link>https://treadwell.net/blog/how-change-ue4-class-templates/</link><pubDate>Wed, 10 Feb 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-change-ue4-class-templates/</guid><description>&lt;p&gt;So have you created a C++ class in UE4 and it creates the class like this? Do you just hate the extra comments or spacing that the template has? Same. 🙁&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;// Fill out your copyright notice in the Description page of Project Settings.
&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;#pragma once
&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;#include &amp;#34;CoreMinimal.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#include &amp;#34;GameFramework/Actor.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#include &amp;#34;MyActor.generated.h&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;UCLASS()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class THINGGAME_API AMyActor : public AActor
&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; GENERATED_BODY()
&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;public:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Sets default values for this actor&amp;#39;s properties
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; AMyActor();
&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;protected:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Called when the game starts or when spawned
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; virtual void BeginPlay() override;
&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;public:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Called every frame
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; virtual void Tick(float DeltaTime) override;
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Well don&amp;rsquo;t worry, you&amp;rsquo;re in the right place to get it looking better.&lt;/p&gt;</description></item><item><title>Weekly Update 34</title><link>https://treadwell.net/blog/weekly-update-34/</link><pubDate>Fri, 05 Feb 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-34/</guid><description>&lt;p&gt;This week went by pretty quickly. I really only worked on my own side project and played Call of Duty; Cold War. Yesterday Treyarch released a new zombies map and I must say it&amp;rsquo;s amazing. Hopefully they release more maps in the coming months.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 33</title><link>https://treadwell.net/blog/weekly-update-33/</link><pubDate>Fri, 29 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-33/</guid><description>&lt;p&gt;I worked on SteamBridge some this week. This work won&amp;rsquo;t be pushed into a release for a while so don&amp;rsquo;t get excited. 🙂 SteamBridge is also up to ~18.5k acquires. If only I charged $4.99. 😅&lt;/p&gt;
&lt;p&gt;I started working on the async portion of SteamBridge and since I don&amp;rsquo;t fully understand it&amp;rsquo;s going to take some time to get working.&lt;/p&gt;
&lt;p&gt;My friends Brandon and Dar grouped up with me on Saturday and played some Cold War zombies until my pc froze at round 87 and ended it for us. 😭&lt;/p&gt;</description></item><item><title>Weekly Update 32</title><link>https://treadwell.net/blog/weekly-update-32/</link><pubDate>Fri, 22 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-32/</guid><description>&lt;p&gt;So this week I worked on Linux support for &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted&lt;/a&gt; and was unsuccessful at finding a working solution. The issue is the server is wanting to call methods in &lt;code&gt;steamclient.so&lt;/code&gt; and we don&amp;rsquo;t want it to. I added some ifdefs to some of the code to exclude it from the server and that didn&amp;rsquo;t solve the issue. The task has now been pushed to someone else that is better suited to solving this as I&amp;rsquo;m not as familiar with the codebase anymore.&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>Weekly Update 31</title><link>https://treadwell.net/blog/weekly-update-31/</link><pubDate>Fri, 15 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-31/</guid><description>&lt;p&gt;This week I worked the final hours on &lt;a href="https://store.steampowered.com/app/1202410/Midjungard/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Midjungard&lt;/a&gt;. I also started working on &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted&lt;/a&gt; again after a month-ish. On Shifted I started working on Linux support again. Apparently, in the past month, it broke again. 🤷&lt;/p&gt;
&lt;p&gt;I moved all of my media on the site to my google cloud storage bucket and now everything is being served from &lt;code&gt;files.trdwll.net&lt;/code&gt; instead of &lt;code&gt;trdwll.com/media/&lt;/code&gt;. This will allow faster speeds when downloading any media and it&amp;rsquo;s cached very strictly.&lt;/p&gt;</description></item><item><title>Changes to My Workstation</title><link>https://treadwell.net/blog/changes-my-workstation/</link><pubDate>Wed, 13 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/changes-my-workstation/</guid><description>&lt;p&gt;Currently, in my office, I have 3 desktop machines. 1 &lt;a href="https://treadwell.net/blog/new-house-new-office-and-new-workstation/"&gt;main workstation&lt;/a&gt; (the pc that I&amp;rsquo;m writing this from), 1 &lt;a href="https://treadwell.net/blog/new-server-new-network/"&gt;server&lt;/a&gt;, and 1 old workstation (that I talk about some &lt;a href="https://treadwell.net/blog/new-house-new-office-and-new-workstation/"&gt;here&lt;/a&gt;). A couple of months ago I saw a &lt;a href="https://www.thermaltakeusa.com/core-w200.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.thermaltakeusa.com.ico" alt="" width="16" height="16" loading="lazy"&gt;case&lt;/a&gt; on &lt;a href="https://www.amazon.com/gp/product/B01EGBZA1C/" 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;Amazon&lt;/a&gt; for $500 and &amp;hellip; I finally decided to buy it. 😭 The decision to get this case wasn&amp;rsquo;t exactly necessary (no shit), but I really wanted to put 2 machines in 1 case&amp;hellip; I just wish it was cheaper.&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>New Years Resolutions 2021</title><link>https://treadwell.net/blog/new-years-resolutions-2021/</link><pubDate>Sat, 09 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/new-years-resolutions-2021/</guid><description>&lt;p&gt;I wrote one of these last year so I figured why not go ahead and write another one for 2021 to see if I actually follow through with them.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stop using Facebook so much&lt;/li&gt;
&lt;li&gt;Scuba Diving&lt;/li&gt;
&lt;li&gt;Better Diet&lt;/li&gt;
&lt;li&gt;Get better at my profession&lt;/li&gt;
&lt;li&gt;Release a game&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="facebook"&gt;Facebook&lt;/h3&gt;
&lt;p&gt;Since the election in the US, I&amp;rsquo;ve stopped using Facebook. I check it once every few days to reply to a few people. I keep getting emails about friend suggestions. I think Facebook checks your last activity date and then starts to spam you with shit to try to get you back on the site. (not working on me 😀)&lt;/p&gt;</description></item><item><title>Weekly Update 30</title><link>https://treadwell.net/blog/weekly-update-30/</link><pubDate>Fri, 08 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-30/</guid><description>&lt;p&gt;First post of the year! Happy New Year everyone, I hope the holidays were good for you.&lt;/p&gt;
&lt;p&gt;This week I worked more on &lt;a href="https://store.steampowered.com/app/1202410/Midjungard/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Midjungard&lt;/a&gt;. In my &lt;a href="https://treadwell.net/blog/weekly-update-29/"&gt;weekly update 29&lt;/a&gt;, I said I was pretty much finished - that turned out to be false. We ran into some issues when deploying on Linux. It had to do with Apex and from what we understand is you need a gpu for Apex on Linux. They disabled Apex and there&amp;rsquo;s still some issues with running the server. The libraries aren&amp;rsquo;t being linked for some reason. It turns out that it was my fault - I was uploading to /root/, chowning the files to my tmpuser, and then running the server. The binary references to /root/. This doesn&amp;rsquo;t work since my tmpuser isn&amp;rsquo;t root. To fix this I had to upload to /home/tmpuser/ instead. 🤦 I feel so dumb. I also had to make sure my engine install and project weren&amp;rsquo;t on the same partition. &lt;em&gt;(damn windows)&lt;/em&gt;✊&lt;/p&gt;</description></item><item><title>2020</title><link>https://treadwell.net/blog/2020/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/2020/</guid><description>&lt;p&gt;So 2020 has sure had its ups and downs as does every year, but 2020 is quite a special year for many reasons.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="2020"&gt;2020&lt;/h3&gt;
&lt;p&gt;The year started off well for me, I started work on &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted&lt;/a&gt; and I even decided to get my drivers permit. In March I went back to work at the golf course which the guys there actually are the reason for getting my permit. Yeah, I could&amp;rsquo;ve done it and should&amp;rsquo;ve done it several years ago, but I&amp;rsquo;ve never really seen the point to get it.&lt;/p&gt;</description></item><item><title>Weekly Update 29</title><link>https://treadwell.net/blog/weekly-update-29/</link><pubDate>Fri, 25 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-29/</guid><description>&lt;p&gt;First off, Happy Christmas or Happy whatever you celebrate, if you do. I hope you have a great day today.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This week went by quite fast. I worked on Midjungard a little bit this week and played games. (I mainly had to wait for the lead to test some things before I could continue work.) Last Friday I bought the new Call of Duty (Cold War) and it&amp;rsquo;s really fun. I didn&amp;rsquo;t really enjoy Call of Duty Modern Warfare, but then again I&amp;rsquo;m a huge fan of Treyarch.&lt;/p&gt;</description></item><item><title>Weekly Update 28</title><link>https://treadwell.net/blog/weekly-update-28/</link><pubDate>Fri, 18 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-28/</guid><description>&lt;p&gt;This week was another week of work on SteamBridge and being lazy. Maybe next week I&amp;rsquo;ll have some tasks on Shifted.&lt;/p&gt;
&lt;p&gt;I did manage to add 8 classes in SteamBridge since last week and the plugin is almost finished. I just need to lay down the foundation for async methods so I can then add the methods that I&amp;rsquo;ve skipped. Once that&amp;rsquo;s finished I&amp;rsquo;ll move on to the Web portion of the plugin and once I&amp;rsquo;m finished with SteamBridge I can move onto EOSBridge.&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>Weekly Update 27</title><link>https://treadwell.net/blog/weekly-update-27/</link><pubDate>Fri, 11 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-27/</guid><description>&lt;p&gt;This week went by really fast - then again my sleep schedule is really screwed up right now. I&amp;rsquo;m on NZ hours. 😞I really just relaxed this week and played games. A couple of friends and I played and beat Dying Light with all DLC in about 30 hours across 3 days.&lt;/p&gt;
&lt;p&gt;I worked on &lt;a href="https://github.com/trdwll/steambridge" 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;SteamBridge&lt;/a&gt; a little bit and finished up Linux support (dedicated server) for Shifted.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 26</title><link>https://treadwell.net/blog/weekly-update-26/</link><pubDate>Fri, 04 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-26/</guid><description>&lt;p&gt;This week I really only worked on &lt;a href="https://github.com/trdwll/steambridge" 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;SteamBridge&lt;/a&gt; and &lt;a href="https://github.com/trdwll/VSDiscordRP" 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;VSDiscordRP&lt;/a&gt;. I&amp;rsquo;ve played Jurassic World: Evolution and some Tom Clancy&amp;rsquo;s Ghost Recon Breakpoint also. Both are great games btw.&lt;/p&gt;
&lt;p&gt;It also snowed for the first time this year a few days ago. We didn&amp;rsquo;t get much and it didn&amp;rsquo;t even cover the roads, but we have snow. 😀 Next week I plan to work more on SteamBridge and get it more ready for production. I did start thinking about doing async stuff so if I end up doing that then it&amp;rsquo;s going to require a refactor of a good amount of stuff. Hopefully, it won&amp;rsquo;t be that bad, but we&amp;rsquo;ll see. The &lt;a href="https://github.com/Facepunch/Facepunch.Steamworks" 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;Facepunch.Steamworks&lt;/a&gt; is fully async so it would be nice to do it for UE4 also.&lt;/p&gt;</description></item><item><title>UE4 and Steam Rich Presence</title><link>https://treadwell.net/blog/ue4-and-steam-rich-presence/</link><pubDate>Tue, 01 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/ue4-and-steam-rich-presence/</guid><description>&lt;p&gt;&lt;strong&gt;NOTE: If you&amp;rsquo;re wanting a Steam wrapper for UE4 then check out &lt;a href="https://github.com/trdwll/SteamBridge/" 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;SteamBridge&lt;/a&gt;. If you use SteamBridge it already has the code below so you won&amp;rsquo;t need to do any code portion of this guide.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;So you&amp;rsquo;re wanting some cool Rich Presence for your game right?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/steamworks_docs/english/party_rp.jpg" alt=""&gt; &lt;img src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/steamworks_docs/english/rp_group_images.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Cool so here&amp;rsquo;s a quick guide on doing this in C++ in UE4. (don&amp;rsquo;t worry, the methods are exposed to BP)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to your projects Build.cs and add Steamworks. &lt;code&gt;PrivateDependencyModuleNames.AddRange(new string[] { &amp;quot;Steamworks&amp;quot; });&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Regenerate your project and open your solution. Add the following code to whatever class you want. I chose to do this in the GameInstance as it exists for the lifetime of the game.&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;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintCallable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;GameInstance&amp;#34;&lt;/span&gt;&lt;span class="p"&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;void&lt;/span&gt; &lt;span class="n"&gt;SetSteamRichPresence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&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="n"&gt;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintCallable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;GameInstance&amp;#34;&lt;/span&gt;&lt;span class="p"&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;void&lt;/span&gt; &lt;span class="n"&gt;ClearSteamRichPresence&lt;/span&gt;&lt;span class="p"&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="n"&gt;At&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;writing&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;sdk&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;released&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;UE4&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="mf"&gt;147.&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;doesn&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t matter, but just a note.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#include &amp;#34;ThirdParty/Steamworks/Steamv147/sdk/public/steam/steam_api.h&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="n"&gt;void&lt;/span&gt; &lt;span class="n"&gt;UCGameInstance&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;SetSteamRichPresence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;SteamFriends&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SetRichPresence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TCHAR_TO_UTF8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;TCHAR_TO_UTF8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;void&lt;/span&gt; &lt;span class="n"&gt;UCGameInstance&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ClearSteamRichPresence&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;SteamFriends&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ClearRichPresence&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;Before you can go off and do what I did above you should know that you have to make a json file with the strings that can be set. Yeah, the messages have to be uploaded to Steam. 🙁&lt;/p&gt;</description></item><item><title>Weekly Update 25</title><link>https://treadwell.net/blog/weekly-update-25/</link><pubDate>Fri, 27 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-25/</guid><description>&lt;p&gt;So this week I worked on setting up Linux dedicated server for Shifted. We had this working for a while, but as development progressed it eventually broke. I kept running into some issues with compiling (had to do with plugins and some other small things). I plan on writing a guide on doing Linux dedicated server eventually since my &lt;a href="https://treadwell.net/blog/setting-ue4-project-dedicated-server/"&gt;post&lt;/a&gt; about dedicated server was targeted for Windows.&lt;/p&gt;
&lt;p&gt;I started writing the foundation for a few more guides that will be releasing early next year. I&amp;rsquo;m really excited about these next set of guides.  I plan to work more on SteamBridge next week since I haven&amp;rsquo;t messed with it in about a week.&lt;/p&gt;</description></item><item><title>Using Other Types in UE4 BP</title><link>https://treadwell.net/blog/using-other-types-ue4-bp/</link><pubDate>Tue, 24 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-other-types-ue4-bp/</guid><description>&lt;p&gt;While building out SteamBridge I needed a way to access &lt;code&gt;SteamID&lt;/code&gt; in BP which happens to be a &lt;code&gt;uint64&lt;/code&gt; so I&amp;rsquo;m not able to directly. Here&amp;rsquo;s the solution I came up with and I must say it&amp;rsquo;s not the most ideal solution as I mainly needed &lt;code&gt;typedef&lt;/code&gt;s, but this works.&lt;/p&gt;
&lt;p&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-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&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;struct&lt;/span&gt; &lt;span class="n"&gt;FUint64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;uint64&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&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="n"&gt;operator&lt;/span&gt; &lt;span class="n"&gt;uint64&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&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="n"&gt;FUint64&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&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;FUint64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uint64&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&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;struct&lt;/span&gt; &lt;span class="n"&gt;FMyCoolUint64Type&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;FUint64&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;FUint64&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;FUint64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To avoid writing the same &lt;code&gt;FUint64&lt;/code&gt; struct for all of the types that just need to be a &lt;code&gt;uint64&lt;/code&gt; you can just derive your struct from it and add a &lt;code&gt;using FUint64::FUint64;&lt;/code&gt; so we use it&amp;rsquo;s constructors.&lt;/p&gt;</description></item><item><title>Weekly Update 24</title><link>https://treadwell.net/blog/weekly-update-24/</link><pubDate>Fri, 20 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-24/</guid><description>&lt;p&gt;This week wasn&amp;rsquo;t busy at all. I worked on SteamBridge a little bit and I fixed Jenkins building a dedicated server for Shifted which took so damn long (in turn I updated my &lt;a href="https://treadwell.net/blog/jenkins-and-ue4/"&gt;Jenkins and UE4&lt;/a&gt; post with an example for dedicated server building). Work on the GameMode in Shifted was moved to another programmer on the team so I&amp;rsquo;m not entirely sure what I&amp;rsquo;m going to be working on next just yet.&lt;/p&gt;</description></item><item><title>UE4 and Vivox</title><link>https://treadwell.net/blog/ue4-and-vivox/</link><pubDate>Wed, 18 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/ue4-and-vivox/</guid><description>&lt;p&gt;So you want a cross-platform and scalable voice chat? Great, let&amp;rsquo;s begin.&lt;/p&gt;
&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://developer.vivox.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/developer.vivox.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Vivox developer account&lt;/a&gt; (you need a v5 account so ask for a v5 account via email)&lt;/li&gt;
&lt;li&gt;A Vivox app&lt;/li&gt;
&lt;li&gt;A C++ UE4 project (or ability to add C++)&lt;/li&gt;
&lt;li&gt;Patience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NOTE: Make sure you check this or like I said above email the support for a v5 account.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://files.trdwll.net/2020/11/08/screenshot_2020-11-08_040526.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4 id="beginplay"&gt;BeginPlay()&lt;/h4&gt;
&lt;p&gt;Cool once you have your app and credentials then proceed to step 1.&lt;/p&gt;</description></item><item><title>Useful Snippets for UE4 using VAX</title><link>https://treadwell.net/blog/useful-snippets-ue4-vax/</link><pubDate>Mon, 16 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/useful-snippets-ue4-vax/</guid><description>&lt;p&gt;These require Visual Assist, but you might be able to set this up using the default stuff with Visual Studio.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Extensions -&amp;gt; VAssistX -&amp;gt; Code Generation and Refactoring -&amp;gt; Edit Refactoring Snippets&amp;hellip;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type: By Title&lt;/strong&gt; then click the&lt;img src="https://files.trdwll.net/2020/11/15/addsnippetvax.png" alt=""&gt;button.&lt;/li&gt;
&lt;li&gt;Add the following options. Repeat the process for each of these.
&lt;img src="https://files.trdwll.net/2020/11/15/ufcall.png" alt=""&gt;&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;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UFUNCTION&lt;/span&gt; &lt;span class="n"&gt;Callable&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ufcall&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintCallable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UFUNCTION&lt;/span&gt; &lt;span class="n"&gt;Const&lt;/span&gt; &lt;span class="n"&gt;Callable&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ufcon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintCallable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UFUNCTION&lt;/span&gt; &lt;span class="n"&gt;Get&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ufget&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UPROPERTY&lt;/span&gt; &lt;span class="n"&gt;BlueprintAssignable&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;upass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintAssignable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$SymbolName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UPROPERTY&lt;/span&gt; &lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;upread&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintReadOnly&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$SymbolName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UPROPERTY&lt;/span&gt; &lt;span class="n"&gt;EditAnywhere&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;upedit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintReadWrite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EditAnywhere&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$SymbolName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UPROPERTY&lt;/span&gt; &lt;span class="n"&gt;EditDefaultsOnly&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;updef&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EditDefaultsOnly&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$PROJECT_NAME$|$ClassName$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$SymbolName$&amp;#34;&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UPROPERTY&lt;/span&gt; &lt;span class="n"&gt;Replicated&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uprep&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Replicated&lt;/span&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UENUM&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uenum&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UENUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="n"&gt;E&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SymbolName&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uint8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;None&lt;/span&gt; &lt;span class="n"&gt;UMETA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;None&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;USTRUCT&lt;/span&gt; &lt;span class="n"&gt;Macro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shortcut&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ustruct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&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;struct&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;SymbolName&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="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;F&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SymbolName&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;To use these you just type the shortcut in the editor and it should popup.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Weekly Update 23</title><link>https://treadwell.net/blog/weekly-update-23/</link><pubDate>Fri, 13 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-23/</guid><description>&lt;p&gt;This week I finished up the major refactor of the GameMode and GameState. &lt;em&gt;Quick note, I used &lt;a href="https://docs.unrealengine.com/en-US/Resources/SampleGames/ShooterGame/index.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.unrealengine.com.ico" alt="" width="16" height="16" loading="lazy"&gt;ShooterGame&lt;/a&gt; as a reference and it&amp;rsquo;s working quite well for us.&lt;/em&gt; I&amp;rsquo;ll eventually do a post on something similar, but unfortunately, I can&amp;rsquo;t just copy and paste the code from &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I somewhat handed off GM work to coworkers so I haven&amp;rsquo;t touched anymore of it since. Instead, I&amp;rsquo;ve been working on getting dedicated servers working with Steam.&lt;/p&gt;</description></item><item><title>Adding Text Chat to UE4 in C++</title><link>https://treadwell.net/blog/adding-text-chat-ue4/</link><pubDate>Tue, 10 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/adding-text-chat-ue4/</guid><description>&lt;p&gt;Note, this is a C++ based example. However, it&amp;rsquo;s easily converted to BP.&lt;/p&gt;
&lt;p&gt;If you want to just check out the code or skip the guide then you can download the project &lt;a href="https://files.trdwll.net/2020/09/22/textchat.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are a few things wrong with this setup such as no deletion of messages so you&amp;rsquo;ll keep a copy of them until you exit the game so you&amp;rsquo;re probably going to want to set up a timer to destroy them after x time.&lt;/p&gt;</description></item><item><title>Weekly Update 22</title><link>https://treadwell.net/blog/weekly-update-22/</link><pubDate>Fri, 06 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-22/</guid><description>&lt;p&gt;So it&amp;rsquo;s been a long time since I wrote a weekly update. I apologize for that, but I&amp;rsquo;ve had some shit going on ok.&lt;/p&gt;
&lt;p&gt;So what have I been busy with? Fuck dude chill out for a second. Let&amp;rsquo;s take a quick breath and relax.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;For the past couple of weeks, I&amp;rsquo;ve been hard at work on Shifted. You know the game that I talk about every single time I write one of these? Cool so starting last week I completely ripped out, redesigned, and rewrote the entire GameMode system. The system we had before well&amp;hellip; we&amp;rsquo;ll just say it wasn&amp;rsquo;t ideal. Anyway so now that this major task is out of the way we&amp;rsquo;re able to manage the codebase and implement new gamemodes more easily. Another big thing for this is it&amp;rsquo;s all entirely in C++. Sure we lose the prototyping of gamemodes in BP, but at the end of the day, we can always create a gamemode in BP to prototype with.&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>Weekly Update 21</title><link>https://treadwell.net/blog/weekly-update-21/</link><pubDate>Fri, 09 Oct 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-21/</guid><description>&lt;p&gt;It&amp;rsquo;s been a few weeks since my last weekly update and it&amp;rsquo;s for a good reason. The past few weeks I&amp;rsquo;ve been very busy working on Shifted. We&amp;rsquo;re currently preparing the game to show to various investors so everything needs to be perfect. My work should continue to be crazy for the next few weeks and then it &lt;em&gt;should&lt;/em&gt; slow down some. Hopefully, we&amp;rsquo;ll have something to share with the public very soon.&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>Feedback via Discord in UE4</title><link>https://treadwell.net/blog/feedback-discord-ue4/</link><pubDate>Sat, 26 Sep 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/feedback-discord-ue4/</guid><description>&lt;p&gt;&lt;img src="https://files.trdwll.net/2020/09/26/image.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;You can just download the class here if you&amp;rsquo;re lazy. &lt;a href="https://files.trdwll.net/2020/09/26/mbpfl.h"&gt;mbpfl.h&lt;/a&gt; and &lt;a href="https://files.trdwll.net/2020/09/26/mbpfl.cpp"&gt;mbpfl.cpp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a BlueprintFunctionLibrary class in C++ and add these includes and defines.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;C&amp;#43;&amp;#43;&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-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#if PLATFORM_WINDOWS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;Windows/WindowsPlatformMisc.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_LINUX
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;Linux/LinuxPlatformMisc.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_MAC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;Mac/MacPlatformMisc.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif
&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="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;GameFramework/GameUserSettings.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&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="cp"&gt;#define BUG_REPORT_WEBHOOK_URL &amp;#34;YOURWEBHOOKURLHERE&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define MYGAME_VERSION &amp;#34;v1.0-pre-alpha&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define DEFAULT_ICON_URL &amp;#34;https:&lt;/span&gt;&lt;span class="c1"&gt;//www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png&amp;#34;
&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;ol start="2"&gt;
&lt;li&gt;Add the following enums and structs to the header.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;C&amp;#43;&amp;#43;&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-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;UENUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EBugReportCategory&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uint8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;Map&lt;/span&gt;&lt;span class="p"&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;Weapon&lt;/span&gt;&lt;span class="p"&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;Other&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;UENUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EBugReportPriority&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;uint8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;Crash&lt;/span&gt;&lt;span class="p"&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;High&lt;/span&gt;&lt;span class="p"&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;Med&lt;/span&gt;&lt;span class="p"&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;Low&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FDiscordMessageField&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;binline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FDiscordMessageEmbedAuthor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;icon_url&lt;/span&gt;&lt;span class="p"&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="n"&gt;FDiscordMessageEmbedAuthor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://trdwll.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;icon_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DEFAULT_ICON_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FDiscordMessageEmbedFooter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;icon_url&lt;/span&gt;&lt;span class="p"&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="n"&gt;FDiscordMessageEmbedFooter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;icon_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DEFAULT_ICON_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FDiscordMessageEmbed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;uint32&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;TArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FDiscordMessageField&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FDiscordMessageEmbedAuthor&lt;/span&gt; &lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FDiscordMessageEmbedFooter&lt;/span&gt; &lt;span class="n"&gt;footer&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&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="n"&gt;FDiscordMessageEmbed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;720640&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FDateTime&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;ToIso8601&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&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="n"&gt;uint32&lt;/span&gt; &lt;span class="nf"&gt;GetColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EBugReportPriority&lt;/span&gt; &lt;span class="n"&gt;Priority&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Priority&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;EBugReportPriority&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nl"&gt;Crash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;16711680&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;EBugReportPriority&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nl"&gt;High&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;12389388&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;EBugReportPriority&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nl"&gt;Med&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;16742912&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;default&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="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;EBugReportPriority&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nl"&gt;Low&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;720640&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FDiscordMessage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;avatar_url&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&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;TArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FDiscordMessageEmbed&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;embeds&lt;/span&gt;&lt;span class="p"&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="n"&gt;FDiscordMessage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;avatar_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DEFAULT_ICON_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="n"&gt;USTRUCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;FBugReportUserData&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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;GENERATED_BODY&lt;/span&gt;&lt;span class="p"&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="n"&gt;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintReadWrite&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;Author&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintReadWrite&lt;/span&gt;&lt;span class="p"&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;FVector&lt;/span&gt; &lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintReadWrite&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;MapName&lt;/span&gt;&lt;span class="p"&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;UPROPERTY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintReadWrite&lt;/span&gt;&lt;span class="p"&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;FString&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Add the following to your header file.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;C&amp;#43;&amp;#43;&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-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Thanks to Rama for this method
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// GetEnumValueAsString&amp;lt;EEnumType&amp;gt;(&amp;#34;EEnumType&amp;#34;, Value);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typename&lt;/span&gt; &lt;span class="n"&gt;TEnum&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;GetEnumValueAsString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TEnum&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;UEnum&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;enumPtr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FindObject&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UEnum&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ANY_PACKAGE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;enumPtr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;FString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Invalid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;enumPtr&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;GetNameByValue&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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="n"&gt;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintCallable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Discord&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;SubmitBugReport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EBugReportCategory&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EBugReportPriority&lt;/span&gt; &lt;span class="n"&gt;Priority&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FBugReportUserData&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;AuthorData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;ReportID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;bIncludeSpecs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&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="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Gets the number of RAM on the system
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&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;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FORCEINLINE&lt;/span&gt; &lt;span class="n"&gt;int32&lt;/span&gt; &lt;span class="n"&gt;GetTotalRAM&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;FPlatformMemoryConstants&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;MemoryConstants&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FPlatformMemory&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetConstants&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MemoryConstants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TotalPhysicalGB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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="n"&gt;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;GetGameResolution&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;FString&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%dx%d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;UGameUserSettings&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetGameUserSettings&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;GetScreenResolution&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UGameUserSettings&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetGameUserSettings&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;GetScreenResolution&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&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="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Gets the CPU Brand Name information.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&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;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;GetCPUBrandName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#if PLATFORM_WINDOWS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FWindowsPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetCPUBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_LINUX
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FLinuxPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetCPUBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_MAC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FMacPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetCPUBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Gets the CPU Vendor Name information.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&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;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;GetCPUVendorName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#if PLATFORM_WINDOWS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FWindowsPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetCPUVendor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_LINUX
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FLinuxPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetCPUVendor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_MAC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FMacPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetCPUVendor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Gets the GPU Brand Name information.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&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;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;GetGPUBrandName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#if PLATFORM_WINDOWS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FWindowsPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetPrimaryGPUBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_LINUX
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FLinuxPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetPrimaryGPUBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#elif PLATFORM_MAC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FMacPlatformMisc&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetPrimaryGPUBrand&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&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="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Gets the GPU Driver information.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&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;UFUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlueprintPure&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;FORCEINLINE&lt;/span&gt; &lt;span class="n"&gt;FString&lt;/span&gt; &lt;span class="n"&gt;GetGPUDriverInfo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;GRHIAdapterUserDriverVersion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&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;</description></item><item><title>Using Google Cloud Storage for Screenshots</title><link>https://treadwell.net/blog/using-google-cloud-storage-screenshots/</link><pubDate>Tue, 22 Sep 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-google-cloud-storage-screenshots/</guid><description>&lt;p&gt;For a while, I used &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; for hosting my screenshots, and while I didn&amp;rsquo;t have any issues with it until recently. It never really occurred to me that I should host my &lt;a href="https://treadwell.net/blog/building-image-hosting-website/"&gt;own&lt;/a&gt;. A few days ago I started having 404 and 500 errors with vgy.me so I said that&amp;rsquo;s enough and I began research on the top cloud providers (Google, AWS, and Azure). I settled on Google Cloud Platform hence this post.&lt;/p&gt;</description></item><item><title>New House, New Office, and New Workstation</title><link>https://treadwell.net/blog/new-house-new-office-and-new-workstation/</link><pubDate>Tue, 15 Sep 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/new-house-new-office-and-new-workstation/</guid><description>&lt;p&gt;&lt;strong&gt;The delay in this post is because I wanted to finish decorating etc before posting. - I hope you understand. 😉&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id="new-house"&gt;New House&lt;/h2&gt;
&lt;p&gt;So last month on July 4th, 2020 I moved into a new house. The reason behind this is that our landlords had decided to sell the house that we lived in since I was a kid. (~14 years we lived there) No worries, we moved out before the place sold so we wouldn&amp;rsquo;t have to worry about it later. In fact, our new house is quite nice.&lt;/p&gt;</description></item><item><title>Weekly Update 20</title><link>https://treadwell.net/blog/weekly-update-20/</link><pubDate>Sat, 12 Sep 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-20/</guid><description>&lt;p&gt;So I missed the weekly update by a day&amp;hellip; So?&lt;/p&gt;
&lt;p&gt;This week I worked on Shifted and did mainly steam and vivox things. Other than that I didn&amp;rsquo;t really do anything else.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 19</title><link>https://treadwell.net/blog/weekly-update-19/</link><pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-19/</guid><description>&lt;p&gt;Welp time to get back into the groove of writing these things. &lt;em&gt;(I hope)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So this week I&amp;rsquo;ve been very busy doing stuff with Steam and doing a major refactor to the project. I even got around to setting up the VR machine (my old desktop) so I can properly test &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted&lt;/a&gt; now. I believe we&amp;rsquo;re going to have some exciting news in the coming weeks, but not 100% sure just yet. I&amp;rsquo;m really excited to get this game out the door and into the hands of players.&lt;/p&gt;</description></item><item><title>I Quit My Day Job and Now I'm a Fulltime Gamedev</title><link>https://treadwell.net/blog/i-quit-my-day-job-and-now-im-fulltime-gamedev/</link><pubDate>Sun, 23 Aug 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/i-quit-my-day-job-and-now-im-fulltime-gamedev/</guid><description>&lt;p&gt;Over the past few months, I&amp;rsquo;ve started hating the golf course job more and more - to the point that I would call off and not care about the repercussions. I&amp;rsquo;m happy to say that I left that job as of Sunday, August 23, 2020. The job was amazing in the beginning, but as time passed I slowly started to dislike it. This job laid off staff during the winter (since you can&amp;rsquo;t exactly mow grass in the cold (you actually can lol)). I&amp;rsquo;ve always known that I didn&amp;rsquo;t want to have a long career in golf course maintenance so here I am. My body can&amp;rsquo;t take 90*F+ with humidity or standing/walking for hours any longer. My feet are always killing me and coming home with migraines from the heat isn&amp;rsquo;t fun either. The job is great, but not for everyone and my time was always limited from day one.&lt;/p&gt;</description></item><item><title>Weekly Update 18</title><link>https://treadwell.net/blog/weekly-update-18/</link><pubDate>Fri, 14 Aug 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-18/</guid><description>&lt;p&gt;I&amp;rsquo;ve been failing to write one of these for a while so I figured I&amp;rsquo;d go ahead and write one this week.&lt;/p&gt;
&lt;p&gt;For the past few weeks I&amp;rsquo;ve been working on &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted VR&lt;/a&gt; more and I&amp;rsquo;m really happy with the work. I can&amp;rsquo;t go into exact details on stuff that I&amp;rsquo;ve been working on other than I reimplemented Vivox in C++, implemented Steam Parties, and a Dynamic Spawning System.&lt;/p&gt;
&lt;p&gt;I have some really exciting news coming very soon so get ready for that.&lt;/p&gt;</description></item><item><title>Weekly Update 17</title><link>https://treadwell.net/blog/weekly-update-17/</link><pubDate>Fri, 24 Jul 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-17/</guid><description>&lt;p&gt;Well it&amp;rsquo;s been a while since I&amp;rsquo;ve done one of these so I think it&amp;rsquo;s time to start again.&lt;/p&gt;
&lt;p&gt;This week I&amp;rsquo;ve been implementing &lt;a href="https://vivox.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/vivox.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Vivox&lt;/a&gt; again in &lt;a href="https://store.steampowered.com/app/801550/Shifted_VR/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/store.steampowered.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shifted&lt;/a&gt;. This time I&amp;rsquo;ve been putting it into C++ and I also used the actual SDK instead of a third party plugin from before. I&amp;rsquo;ve made some great progress on this recently and I&amp;rsquo;m about finished with it. I&amp;rsquo;ll be moving onto some other tasks after this one so maybe next week I&amp;rsquo;ll be writing about them some.&lt;/p&gt;</description></item><item><title>Why I use Hungarian Notation with C++</title><link>https://treadwell.net/blog/why-i-use-hungarian-notation-cpp/</link><pubDate>Wed, 15 Jul 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/why-i-use-hungarian-notation-cpp/</guid><description>&lt;p&gt;So &lt;a href="https://en.wikipedia.org/wiki/Hungarian_notation#Examples" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/en.wikipedia.org.ico" alt="" width="16" height="16" loading="lazy"&gt;Hungarian Notation&lt;/a&gt; is an old(er) formatting for code. I don&amp;rsquo;t fully use it, but I mainly use m_ for members so I know if they&amp;rsquo;re a member of said class and s_ so I know the member is static.&lt;/p&gt;
&lt;p&gt;A lot of people disagree with this formatting, but I use it just for cleanliness. Honestly, I don&amp;rsquo;t really have another reason for this, it&amp;rsquo;s just what I like. I like being able to read code and know where a member is from.&lt;/p&gt;</description></item><item><title>Why I've been AFK</title><link>https://treadwell.net/blog/why-ive-been-afk/</link><pubDate>Wed, 01 Jul 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/why-ive-been-afk/</guid><description>&lt;p&gt;So the past few weekly updates I&amp;rsquo;ve posted that I haven&amp;rsquo;t done anything and that&amp;rsquo;s 100% true. In fact, I skipped last week&amp;rsquo;s weekly update since I didn&amp;rsquo;t do anything last week either and I felt it was pointless to post that the same thing again.&lt;/p&gt;
&lt;p&gt;Over the past month, I&amp;rsquo;ve been so lazy that I haven&amp;rsquo;t even written any code. I opened Beanstalk, read through some code, and closed Visual Studio. I lost all motivation last month and I&amp;rsquo;m planning on working on an existing contract starting Monday (July 6, 2020) which will be a good amount of C++ that I&amp;rsquo;ll get to write. I&amp;rsquo;m going to write up a weekly update this week, but it might not be on Friday.&lt;/p&gt;</description></item><item><title>Weekly Update 16</title><link>https://treadwell.net/blog/weekly-update-16/</link><pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-16/</guid><description>&lt;p&gt;And another week full of nothing interesting. I plan on working on my engine &lt;a href="https://trdwll.com/experiments/beanstalk-engine/"&gt;Beanstalk Engine&lt;/a&gt; this weekend, but I am moving very soon so I need to start packing stuff again.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 15</title><link>https://treadwell.net/blog/weekly-update-15/</link><pubDate>Fri, 12 Jun 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-15/</guid><description>&lt;p&gt;And another week full of nothing interesting.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 14</title><link>https://treadwell.net/blog/weekly-update-14/</link><pubDate>Fri, 05 Jun 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-14/</guid><description>&lt;p&gt;Another week with nothing done. I&amp;rsquo;ve been very busy this week at my day job to the point where I zone out when I get home. I&amp;rsquo;ve been training 2 new guys also so that&amp;rsquo;s kinda cool I guess.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 13</title><link>https://treadwell.net/blog/weekly-update-13/</link><pubDate>Fri, 29 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-13/</guid><description>&lt;p&gt;This week at my day job we did sod work (yesterday). Other than that I really didn&amp;rsquo;t do anything else. I did work on some stuff that I&amp;rsquo;ll be writing about soon so&amp;hellip;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Weekly Update 12</title><link>https://treadwell.net/blog/weekly-update-12/</link><pubDate>Fri, 22 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-12/</guid><description>&lt;p&gt;Another week full of nothing. It&amp;rsquo;s been raining a ton here so my day job has been nothing other than tree work.&lt;/p&gt;
&lt;p&gt;I did start on some small systems that I&amp;rsquo;m going to write up guides on doing them so prepare for that if you will.&lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Open Source All of the Things</title><link>https://treadwell.net/blog/open-source-all-things/</link><pubDate>Tue, 19 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/open-source-all-things/</guid><description>&lt;p&gt;After reading Tom Preston-Werner&amp;rsquo;s post (&lt;a href="https://tom.preston-werner.com/2011/11/22/open-source-everything.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/tom.preston-werner.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Open Source (Almost) Everything&lt;/a&gt;) it got me thinking that I should write about this topic also.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a huge fan of open-source software. I know I haven&amp;rsquo;t released a ton of software or even contributed to much, but it was a &lt;a href="https://treadwell.net/blog/new-years-resolutions-2020/"&gt;new years resolution&lt;/a&gt; this year to do both of those things. I agree with open-sourcing most of your software as a company, but not your bread and butter.&lt;/p&gt;</description></item><item><title>Weekly Update 11</title><link>https://treadwell.net/blog/weekly-update-11/</link><pubDate>Fri, 15 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-11/</guid><description>&lt;p&gt;Well, this week was very uneventful - at home etc at least. I was very busy this week at my day job so there&amp;rsquo;s that. I did play Sea of Thieves quite a bit this week and I can say that it&amp;rsquo;s very fun still.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Overcoming Imposter Syndrome</title><link>https://treadwell.net/blog/overcoming-imposter-syndrome/</link><pubDate>Wed, 13 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/overcoming-imposter-syndrome/</guid><description>&lt;p&gt;I&amp;rsquo;ve been writing code for 10 years - I started in 2009/2010. The first language that I picked up with Visual Basic and then about 2 weeks later I switched to C# as I liked the syntax of C# more. I then eventually moved into PHP, C++, and other languages. Over these years I&amp;rsquo;ve worked on a ton of software - most private, but I&amp;rsquo;ve still grown my skills over time.&lt;/p&gt;</description></item><item><title>Weekly Update 10</title><link>https://treadwell.net/blog/weekly-update-10/</link><pubDate>Fri, 08 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-10/</guid><description>&lt;p&gt;Not much happened this week. I worked on VaRest by ufna a small amount (2 PRs) and that&amp;rsquo;s about it. I&amp;rsquo;ve played Sea of Thieves for a few hours this week also.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&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>Weekly Update 9</title><link>https://treadwell.net/blog/weekly-update-9/</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-9/</guid><description>&lt;p&gt;Over the weekend I worked on HordeMode some and I&amp;rsquo;m actually quite proud of the work that I did. It wasn&amp;rsquo;t much, but I hadn&amp;rsquo;t touched that project in quite some time so I&amp;rsquo;m proud that I finally did.&lt;/p&gt;
&lt;p&gt;I plan to work on HordeMode more this weekend if &lt;a href="https://www.satisfactorygame.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.satisfactorygame.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Satisfactory&lt;/a&gt; doesn&amp;rsquo;t pull me in more. Oh yeah, I bought Satisfactory Sunday and I&amp;rsquo;ve been playing it non-stop.&lt;/p&gt;
&lt;p&gt;I know I haven&amp;rsquo;t really written much stuff recently and I do apologize for that, but my day job has been exhausting. All I do when I get home is just watch videos. I do plan on writing up some good posts in the near future so stay tuned. 😁&lt;/p&gt;</description></item><item><title>Weekly Update 8</title><link>https://treadwell.net/blog/weekly-update-8/</link><pubDate>Fri, 24 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-8/</guid><description>&lt;p&gt;Over the weekend I decided to open source an inventory system that I was working on a while back. It&amp;rsquo;s available &lt;a href="https://trdwll.com/experiments/inventory-plugin/"&gt;here&lt;/a&gt;. Instead of telling you what I did every single day of the week at my day job which tbh is getting annoying to try and remember what I did - I&amp;rsquo;m going to just write larger events that go on at my day job.&lt;/p&gt;
&lt;p&gt;This week we mainly worked on cutting and laying sod on a new teebox.&lt;/p&gt;</description></item><item><title>A Firearm Hobby</title><link>https://treadwell.net/blog/firearm-hobby/</link><pubDate>Mon, 20 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/firearm-hobby/</guid><description>&lt;p&gt;Since I was a child I&amp;rsquo;ve been around firearms and I&amp;rsquo;ve always been taught the right ways of handling firearms. Not only that, but I&amp;rsquo;ve been taught the responsibility of using and owning them.&lt;/p&gt;
&lt;p&gt;A couple of years ago my dad gifted me his first AR-15 for Christmas and that really sparked my interest in firearms more. Last year I decided I wanted to conceal carry for various reasons, but the main reason was that all of these shootings happening and I wanted to be protected. I ended up purchasing a brand new &lt;a href="https://us.glock.com/en/pistols/g43" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/us.glock.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Glock 43&lt;/a&gt; which is 6+1 and for anyone that&amp;rsquo;s been shooting you know 6+1 isn&amp;rsquo;t much, so I went a bought 2 &lt;a href="https://tarantacticalinnovations.com/base-pad-for-glock-43-9mm-oem-magazines/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/tarantacticalinnovations.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Taran Tactical +3 base pads&lt;/a&gt; for my mags. This gives me 9+1 and 9 extra in my second mag. Then I ended up purchasing both my Remington 700 and Savage .22 the same day and I love them all.&lt;/p&gt;</description></item><item><title>Weekly Update 7</title><link>https://treadwell.net/blog/weekly-update-7/</link><pubDate>Fri, 17 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-7/</guid><description>&lt;p&gt;Monday and Tuesday I picked up sticks (there was a high wind storm over the weekend) at my day job and Wednesday I pumped out bunkers (again holding water due to the storm) and then started raking the bunkers. Thursday I finished raking the bunkers with an hour of overtime and today I mowed collars again. I then worked on cleaning up 8 fairway (has mud on it due to water running over it during construction/heavy rains since).&lt;/p&gt;</description></item><item><title>Building an Image Hosting Website</title><link>https://treadwell.net/blog/building-image-hosting-website/</link><pubDate>Wed, 15 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/building-image-hosting-website/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I developed and operated an image hosting website called &lt;a href="https://trdwll.com/experiments/imglnx/"&gt;imglnx.com&lt;/a&gt; (image links/lynx) for just over a year (Dec 5, 2016-Mar 3, 2018).  The domain changed ownership to a trusted friend on Nov 20, 2018, and I have no idea if that friend will recreate imglnx.&lt;/p&gt;
&lt;p&gt;I created imglnx (&lt;a href="https://web.archive.org/web/20180104183842/https://www.imglnx.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/web.archive.org.ico" alt="" width="16" height="16" loading="lazy"&gt;archive&lt;/a&gt;) for a very simple reason, to create an image host that focused on free, fast, secure, and simple image hosting with a focus on privacy. Not only did I operate imglnx, but I also operated my own DNS servers. The entire service was based outside of the USA (excluding the domain - was registered at Namecheap).&lt;/p&gt;</description></item><item><title>Weekly Update 6</title><link>https://treadwell.net/blog/weekly-update-6/</link><pubDate>Fri, 10 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-6/</guid><description>&lt;p&gt;This week wasn&amp;rsquo;t that eventful. I ran a weedeater all week at my day job, but today I learned something new. I got to run a collar mower for the first time and it was pretty easy. I&amp;rsquo;m glad that I&amp;rsquo;m learning new things at my day job.&lt;/p&gt;
&lt;p&gt;Over last weekend I pushed some updates to HordeMode which was very exciting. I plan to work on it more this weekend, but we&amp;rsquo;ll see.&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>Logging in UE4</title><link>https://treadwell.net/blog/logging-ue4/</link><pubDate>Sun, 05 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/logging-ue4/</guid><description>&lt;p&gt;Macros that I use for logging/printing.&lt;/p&gt;
&lt;p&gt;Use them via &lt;code&gt;PRINT(&amp;quot;MyStringToPrint&amp;quot;);&lt;/code&gt; or &lt;code&gt;LOG(&amp;quot;MyStringToLog&amp;quot;);&lt;/code&gt; or &lt;code&gt;LOG(&amp;quot;MyStringToLog %f&amp;quot;, 3.0f);&lt;/code&gt; etc.&lt;/p&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;C&amp;#43;&amp;#43;&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-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#if 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;Engine/Engine.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;DrawDebugHelpers.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&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="cp"&gt;#define GETSTR(text, ...) *FString::Printf(TEXT(text), ##__VA_ARGS__)
&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="cp"&gt;#define PRINT(color, text, ...) if (GEngine) GEngine-&amp;gt;AddOnScreenDebugMessage(-1, 10.f, color, CUR_CLASS_LINE + &amp;#34;: &amp;#34; + GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_S(text, ...) if (GEngine) GEngine-&amp;gt;AddOnScreenDebugMessage(-1, 10.f, FColor::Yellow, CUR_CLASS_LINE + &amp;#34;: [SUCCESS] &amp;#34; + GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_E(text, ...) if (GEngine) GEngine-&amp;gt;AddOnScreenDebugMessage(-1, 10.f, FColor::Red, CUR_CLASS_LINE + &amp;#34;: [ERROR] &amp;#34; + GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_W(text, ...) if (GEngine) GEngine-&amp;gt;AddOnScreenDebugMessage(-1, 10.f, FColor::Orange, CUR_CLASS_LINE + &amp;#34;: [WARNING] &amp;#34; + GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG(text, ...) UE_LOG(LogTemp, Log, TEXT(&amp;#34;%s: %s&amp;#34;), *CUR_CLASS, GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_S(text, ...) UE_LOG(LogTemp, Log, TEXT(&amp;#34;%s: [SUCCESS] %s&amp;#34;), *CUR_CLASS, GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_W(text, ...) UE_LOG(LogTemp, Warning, TEXT(&amp;#34;%s: [WARNING] %s&amp;#34;), *CUR_CLASS, GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_E(text, ...) UE_LOG(LogTemp, Error, TEXT(&amp;#34;%s: [ERROR] %s&amp;#34;), *CUR_CLASS, GETSTR(text, ##__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_D(text, ...) UE_LOG(LogTemp, Display, TEXT(&amp;#34;%s: [WARNING] %s&amp;#34;), *CUR_CLASS, GETSTR(text, ##__VA_ARGS__))
&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="cp"&gt;#define PRINT_LOG(color, text, ...) PRINT(color, text, ##__VA_ARGS__); LOG(text, ##__VA_ARGS__);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_LOG_S(text, ...) PRINT_S(text, ##__VA_ARGS__); LOG_S(text, ##__VA_ARGS__);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_LOG_W(text, ...) PRINT_W(text, ##__VA_ARGS__); LOG_W(text, ##__VA_ARGS__);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_LOG_E(text, ...) PRINT_E(text, ##__VA_ARGS__); LOG_E(text, ##__VA_ARGS__);
&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="cm"&gt;/** Current Class Name + Function Name where this is called! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define CUR_CLASS_FUNC (FString(__FUNCTION__))
&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="cm"&gt;/** Current Class where this is called! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define CUR_CLASS (FString(__FUNCTION__).Left(FString(__FUNCTION__).Find(TEXT(&amp;#34;:&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="cm"&gt;/** Current Function Name where this is called! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define CUR_FUNC (FString(__FUNCTION__).Right(FString(__FUNCTION__).Len() - FString(__FUNCTION__).Find(TEXT(&amp;#34;::&amp;#34;)) - 2 ))
&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="cm"&gt;/** Current Line Number in the code where this is called! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define CUR_LINE (FString::FromInt(__LINE__))
&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="cm"&gt;/** Current Class and Line Number where this is called! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define CUR_CLASS_LINE (CUR_CLASS + &amp;#34;(&amp;#34; + CUR_LINE + &amp;#34;)&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="cm"&gt;/** Current Function Signature where this is called! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define CUR_FUNCSIG (FString(__FUNCSIG__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT(color, text)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_S(text)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_E(text)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG(text, ...)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_S(text, ...)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_W(text, ...)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_E(text, ...)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define LOG_D(text, ...)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_LOG_S(text)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_LOG_W(text)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define PRINT_LOG_E(text)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#endif&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Weekly Update 5</title><link>https://treadwell.net/blog/weekly-update-5/</link><pubDate>Fri, 03 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-5/</guid><description>&lt;p&gt;Oh jeez. This week at my day job I worked on drainage. We put in 4 4&amp;quot; corrugated pipe in 4 rows (separated by probably 15&amp;rsquo;). The process went like this. The ditches had fallen in some so we had to get in them (they were very soupy) and dig out the excess material on the bottom to make them flat with a small grade so the water would flow freely. We then put in pea gravel as a base, the pipe, more pea gravel, and then finally dirt.&lt;/p&gt;</description></item><item><title>Using const in C++</title><link>https://treadwell.net/blog/using-const-cpp/</link><pubDate>Thu, 02 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-const-cpp/</guid><description>&lt;p&gt;So what is const? Const means constant&amp;hellip; Why should you use const? You should use const when you don&amp;rsquo;t need to edit the value etc.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m by no means an expert, but if I made a typo feel free to reach out.&lt;/p&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;C&amp;#43;&amp;#43;&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-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;public&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="n"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&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="c1"&gt;// const on the end means you &amp;#34;promise&amp;#34; that the method won&amp;#39;t edit any values in the class Example (can get around this by marking a variable mutable)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;GetA&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;m_A&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&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="c1"&gt;// If you&amp;#39;re going to return a pointer you can add const before and after the * just like below (ugly)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="nf"&gt;GetB&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;m_B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&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="k"&gt;private&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="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;m_A&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;m_B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// const before a * means you can&amp;#39;t modify the contents of the pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// const after a * means you can&amp;#39;t modify the pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// const before and after adds both above
&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="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;VALUE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1337&lt;/span&gt;&lt;span class="p"&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="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&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="c1"&gt;// You can also do int const* instead of const int* which means the same thing as they&amp;#39;re before the *
&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="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;A: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;B: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;C: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;D: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&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;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// We can set the value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// *b = 10; // We can&amp;#39;t set the value of b since const is before the *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// We can set the pointer
&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;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// We can set the value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// c = &amp;amp;a; // We can&amp;#39;t set the pointer to something else
&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="c1"&gt;// We can&amp;#39;t do anything to d as we specify const before and after the * (there are ways around stuff like this though)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// *d = 80;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// d = &amp;amp;CONST_VALUE;
&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="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;A: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;B: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;C: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;D: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&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;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&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="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&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;img src="https://files.trdwll.net/2020/03/20/image-20200320225804-1.png" alt=""&gt;&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>Weekly Update 4</title><link>https://treadwell.net/blog/weekly-update-4/</link><pubDate>Fri, 27 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-4/</guid><description>&lt;p&gt;This week went by fast. I didn&amp;rsquo;t really do much this week. I wrote some code for Shifted, I worked on this website, and I wasn&amp;rsquo;t crazy busy at my day job this week. Maybe next week will be more eventful.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>How I Got Into Programming</title><link>https://treadwell.net/blog/how-i-got-programming/</link><pubDate>Wed, 25 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-i-got-programming/</guid><description>&lt;p&gt;I began writing code back in early 2010. I got into programming so I could make mods for a game that you may have heard of Call of Duty: Modern Warfare 2. Sure mods ruined that game and several others, but it not only helped teach me code - it also gave me an outlet as a teenager. Instead of being out doing mischievous things I would stay inside and write code. This code from back then wasn&amp;rsquo;t good at all, but it was fun.&lt;/p&gt;</description></item><item><title>Why I Switched from CentOS to FreeBSD</title><link>https://treadwell.net/blog/why-i-switched-centos-freebsd/</link><pubDate>Sat, 21 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/why-i-switched-centos-freebsd/</guid><description>&lt;p&gt;Simply put&amp;hellip; software versions. I got tired of messing with compiling Python from source and all of that shit. I feel like FreeBSD is also faster when doing updates etc.&lt;/p&gt;
&lt;p&gt;I used CentOS as my main OS for servers for several years and it pains me to say, but I love FreeBSD and I wish I made the switch a while back. I don&amp;rsquo;t hate CentOS, but it&amp;rsquo;s not going to be the OS that I choose when deploying stuff (unless I don&amp;rsquo;t have a choice or I can&amp;rsquo;t choose FreeBSD).&lt;/p&gt;</description></item><item><title>Weekly Update 3</title><link>https://treadwell.net/blog/weekly-update-3/</link><pubDate>Fri, 20 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-3/</guid><description>&lt;p&gt;This week was crazy busy at my day job. We did aerification on Monday and the rest of the week was work revolving around that as it had rained etc.&lt;/p&gt;
&lt;p&gt;Yesterday I test drove a truck that I&amp;rsquo;m currently looking at and I love it. We also cut down a couple of trees at work yesterday so that was fun. This week I haven&amp;rsquo;t worked on Shifted or really anything else other than my day job stuff. Getting back into the groove of my day job is exhausting, but rewarding. Finally today, it was raining this morning so we didn&amp;rsquo;t do much today at work. I mainly sanded rust off of some machinery to prep it for primer and paint.&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>Base64 in UE4</title><link>https://treadwell.net/blog/base64-ue4/</link><pubDate>Sun, 15 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/base64-ue4/</guid><description>&lt;p&gt;While I was looking for projects to contribute to on GitHub I remembered &lt;a href="https://github.com/ufna/VaRest" 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;VaRest&lt;/a&gt; was on GitHub. I headed over to VaRest&amp;rsquo;s repo and was looking at issues. I found the &lt;a href="https://github.com/ufna/VaRest/issues/92" 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;issue&lt;/a&gt; and so I went on my way of finding a &lt;a href="https://github.com/ufna/VaRest/commit/abd16db578c2efb62b4439e05742f4878f25e3e9" 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;solution&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;My solution for encoding was to convert the input string to utf8 and then encode. My solution for decoding was practically the same, I convert the string to a tchar from utf8, decode, and then output the result. Pretty easy right? Yeah no this solution took me about an hour and I had to get some assistance from an acquaintance, because the encoding was adding extra chars on the end and some other random issues.&lt;/p&gt;</description></item><item><title>Weekly Update 2</title><link>https://treadwell.net/blog/weekly-update-2/</link><pubDate>Fri, 13 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-2/</guid><description>&lt;p&gt;So this week again wasn&amp;rsquo;t really productive. Starting on Monday I attended my aunt&amp;rsquo;s funeral. Tuesday was a great day - I started back at my day job. The rest of the week was just day job stuff while I get back into the routine. Wednesday I received my Oculus Rift so that&amp;rsquo;s very exciting - I&amp;rsquo;m very excited to work more on Shifted (a VR game that I&amp;rsquo;m contracting on).&lt;/p&gt;</description></item><item><title>My Favorite TV Shows</title><link>https://treadwell.net/blog/my-favorite-tv-shows/</link><pubDate>Tue, 10 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/my-favorite-tv-shows/</guid><description>&lt;p&gt;I wrote a post like this several years ago on my old blog and unfortunately, I don&amp;rsquo;t have a copy of it and it would probably be outdated by now anyway.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Here are my favorite shows in alphabetical order.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chernobyl&lt;/li&gt;
&lt;li&gt;Chicago Fire&lt;/li&gt;
&lt;li&gt;Chicago Med&lt;/li&gt;
&lt;li&gt;Chicago PD&lt;/li&gt;
&lt;li&gt;Designated Survivor&lt;/li&gt;
&lt;li&gt;Justified&lt;/li&gt;
&lt;li&gt;LivePD &amp;amp; Cops&lt;/li&gt;
&lt;li&gt;Mr. Robot&lt;/li&gt;
&lt;li&gt;Rescue Me&lt;/li&gt;
&lt;li&gt;SEAL Team (CBS)&lt;/li&gt;
&lt;li&gt;Silicon Valley&lt;/li&gt;
&lt;li&gt;Sons of Anarchy&lt;/li&gt;
&lt;li&gt;Suits&lt;/li&gt;
&lt;li&gt;Yellowstone&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;m sure there are a ton that I&amp;rsquo;m forgetting, but whatever.&lt;/p&gt;</description></item><item><title>Weekly Update 1</title><link>https://treadwell.net/blog/weekly-update-1/</link><pubDate>Fri, 06 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/weekly-update-1/</guid><description>&lt;p&gt;Since one of my &lt;a href="https://treadwell.net/blog/new-years-resolutions-2020/"&gt;new year&amp;rsquo;s resolutions&lt;/a&gt; was to blog more (which I have already beat lol) I figured why not write an update post every week on what I did that week. I got the idea from &lt;a href="https://troyhunt.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/troyhunt.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Troy Hunt&lt;/a&gt; except I&amp;rsquo;m not doing a video. Yes, I&amp;rsquo;m aware the week starts on Sundays, but I&amp;rsquo;m writing these posts every Friday so deal with it.&lt;/p&gt;
&lt;p&gt;So what did I do this week? Well, I wasn&amp;rsquo;t crazy productive this week, but here we go.&lt;/p&gt;</description></item><item><title>Using Interfaces in UE4</title><link>https://treadwell.net/blog/using-interfaces-ue4/</link><pubDate>Thu, 05 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-interfaces-ue4/</guid><description>&lt;p&gt;Interfaces are an amazing thing that&amp;rsquo;s in programming. An interface describes the behavior or capabilities of a C++ class without committing to a particular implementation of that class. Meaning any class that extends an interface has to implement the methods of that interface. You can also add more than 1 interface to a class and an abstract class you can&amp;rsquo;t. More on this later. The simplest way to explain what an interface is would be it&amp;rsquo;s a class with no implementation.&lt;/p&gt;</description></item><item><title>UE4 and GameLift</title><link>https://treadwell.net/blog/ue4-and-gamelift/</link><pubDate>Wed, 04 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/ue4-and-gamelift/</guid><description>&lt;p&gt;I recently got hired by a company that had me implement GameLift into their UE4 project. Since there&amp;rsquo;s not much useful information out there on this in my opinion I figured I&amp;rsquo;d write up a guide on using it.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="prerequisites-for-either-platform"&gt;Prerequisites for either platform&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://treadwell.net/blog/setting-ue4-project-dedicated-server/"&gt;Dedicated Server support in your UE4 project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="building-the-gameliftserversdk-for-windows"&gt;Building the GameLiftServerSDK for Windows&lt;/h3&gt;
&lt;h4 id="prerequisites"&gt;Prerequisites&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://visualstudio.microsoft.com/downloads/" 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;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cmake.org/download/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/cmake.org.ico" alt="" width="16" height="16" loading="lazy"&gt;cmake&lt;/a&gt; (When installing make sure to enable the add to PATH setting)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Growing Your Skills as a Software Engineer</title><link>https://treadwell.net/blog/growing-your-skills-software-engineer/</link><pubDate>Sun, 01 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/growing-your-skills-software-engineer/</guid><description>&lt;p&gt;Over the past ~6 years I&amp;rsquo;ve been friends with a great programmer - someone that has taught me stuff over the years and I still learn stuff from him. I&amp;rsquo;ve grown to ask him for help when I&amp;rsquo;m stuck rather than dig deep on an issue and this is certainly a &lt;strong&gt;BAD&lt;/strong&gt; thing to do. I&amp;rsquo;ve recently realized that I do it too often and while I still do my own research it&amp;rsquo;s still bad. If I ever want to grow my skills I need to figure things out on my own - I&amp;rsquo;m basically spoiled. I&amp;rsquo;m certainly a better programmer than when I first started, but I can&amp;rsquo;t stop thinking that maybe if I didn&amp;rsquo;t ask for help as often my skills would be better.&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>Installing a UE4 Plugin Into Your Project</title><link>https://treadwell.net/blog/installing-ue4-plugin-your-project/</link><pubDate>Thu, 13 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/installing-ue4-plugin-your-project/</guid><description>&lt;p&gt;This is a very easy thing to do so don&amp;rsquo;t worry.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If the plugin is downloaded from the Marketplace then go into your Engine install directory (mine is &lt;strong&gt;C:\Program Files\Epic Games\UE_4.24\Engine\Plugins\Marketplace&lt;/strong&gt;). If it&amp;rsquo;s download elsewhere then just go to step 2.&lt;/li&gt;
&lt;li&gt;Copy the plugin folder that you&amp;rsquo;re wanting to add to your project into your project/Plugins directory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s literally all that you need to do. Just open your project and done.&lt;/p&gt;</description></item><item><title>Securing Your Game Studio Brand</title><link>https://treadwell.net/blog/securing-your-game-studio-brand/</link><pubDate>Mon, 10 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/securing-your-game-studio-brand/</guid><description>&lt;p&gt;So you want to use a team name or whatever and verify that it&amp;rsquo;s not taken? Great, then continue reading.&lt;/p&gt;
&lt;p&gt;Before we get started I have to say that I&amp;rsquo;m not an attorney and that you should speak with yours or even if you don&amp;rsquo;t have one go speak with one anyway. They do consultations for free! &lt;em&gt;mind = blown&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This guide is structured for US teams/businesses but can be applied to anywhere by using the trademark/business search for said country.&lt;/strong&gt;&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>Packaging Your UE4 Plugin</title><link>https://treadwell.net/blog/packaging-your-ue4-plugin/</link><pubDate>Tue, 04 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/packaging-your-ue4-plugin/</guid><description>&lt;p&gt;I got asked yesterday how to package UE4 plugins for distribution. It&amp;rsquo;s honestly very simple to do.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Edit -&amp;gt; Plugins&lt;/strong&gt; and scroll down to Project/Other.
&lt;img src="https://files.trdwll.net/2020/02/04/image-20200204042325-1.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;On the plugin that you want to package select &lt;em&gt;Package&lt;/em&gt;.
&lt;img src="https://files.trdwll.net/2020/02/04/image-20200204042452-2.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Then just choose a folder to package to. If you get any compile/build errors then fix them and press Package again.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Easy as 1, 2, 3. 😁&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE: I posted about &lt;a href="https://treadwell.net/blog/jenkins-and-ue4/"&gt;Jenkins and UE4&lt;/a&gt; and I have a command at the bottom for building plugins.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Days Gone</title><link>https://treadwell.net/blog/days-gone/</link><pubDate>Mon, 03 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/days-gone/</guid><description>&lt;p&gt;So I just completed the story and all I can say is wow. Overall the game is great.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="loading-times"&gt;Loading Times&lt;/h3&gt;
&lt;p&gt;Holy shit the loading times are bad. I assume it&amp;rsquo;s not the game, but the PS4 Pro.
 &lt;/p&gt;
&lt;p&gt;I mean yeah, ~48 seconds isn&amp;rsquo;t that bad - especially when compared to GTAV. I&amp;rsquo;m mostly being a baby. 😄 The main menu is well designed though, I really do like it.&lt;/p&gt;
&lt;h3 id="level-design"&gt;Level Design&lt;/h3&gt;
&lt;p&gt;Ohhhhhhhhhhh wow. Bend did an amazing job on the level. I mean seriously, they made a truly beautiful game. Here are some screenshots, but I&amp;rsquo;m sure you get what I&amp;rsquo;m talking about. (click on them to get the full resolution images)&lt;/p&gt;</description></item><item><title>Adding a Day/Night Cycle in UE4 in C++</title><link>https://treadwell.net/blog/daynight-cycle-ue4/</link><pubDate>Mon, 27 Jan 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/daynight-cycle-ue4/</guid><description>&lt;p&gt;&lt;strong&gt;UPDATE: This method shouldn&amp;rsquo;t be used anymore. Epic released an atmosphere plugin that replaces the skybox that was used in this guide. To get it working with that it just requires some small changes and I&amp;rsquo;ll eventually update the post.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This code was apart of an old project of mine that never went anywhere so I figured I&amp;rsquo;d add it to an example project and release for free. Everyone could use a day/night cycle that&amp;rsquo;s networked right?&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>Setting up a UE4 Project for Dedicated Server</title><link>https://treadwell.net/blog/setting-ue4-project-dedicated-server/</link><pubDate>Mon, 20 Jan 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/setting-ue4-project-dedicated-server/</guid><description>&lt;p&gt;Ready to build your game&amp;rsquo;s dedicated server? Whoa there buddy. We have some work to do before you can.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before you start down the road of following this guide make sure you have ~130GB free storage for the engine.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download &lt;a href="https://github.com/epicgames/unrealengine" 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;UnrealEngine&lt;/a&gt; from GitHub. If you don&amp;rsquo;t have access to this then go and follow this &lt;a href="https://www.unrealengine.com/en-US/ue4-on-github" 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;guide&lt;/a&gt;.
You can either download the zip (&lt;a href="https://github.com/EpicGames/UnrealEngine/archive/release.zip" 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;release&lt;/a&gt;) or do a &lt;em&gt;git clone&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Go into the directory where you downloaded the engine and run &lt;strong&gt;Setup.bat&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;GenerateProjectFiles.bat&lt;/strong&gt; and then open &lt;strong&gt;UE4.sln&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Development Editor&lt;/strong&gt;, &lt;strong&gt;Win64&lt;/strong&gt;, and &lt;strong&gt;UE4&lt;/strong&gt; then press Local Windows Debugger (or Debug -&amp;gt; Start Debugging or Build -&amp;gt; Build Solution). This will take a while (~40 minutes) so just let it do its thing.
&lt;img src="https://files.trdwll.net/2020/01/20/wtnthn.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;After it&amp;rsquo;s completed the project selector will show up (if you had no errors) and then you can just close the editor and Visual Studio.&lt;/li&gt;
&lt;li&gt;Go to your project and right click your uproject (Switch Unreal Engine version) then select the Source build.
&lt;img src="https://files.trdwll.net/2020/01/20/tgr3hh.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Create a Server and Client target.cs file.
&lt;img src="https://files.trdwll.net/2020/01/20/mzrluk.png" alt=""&gt;
The &lt;strong&gt;Client.Target.cs&lt;/strong&gt; file will look similar to: (download example &lt;a href="https://files.trdwll.net/2020/01/21/exampleprojectclienttarget.cs"&gt;ExampleProjectClient.Target.cs&lt;/a&gt;)&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;using UnrealBuildTool;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;using System.Collections.Generic;
&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;public class ExampleProjectClientTarget : TargetRules
&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; public ExampleProjectClientTarget(TargetInfo Target) : base(Target)
&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; Type = TargetType.Client;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DefaultBuildSettings = BuildSettingsVersion.V2;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ExtraModuleNames.Add(&amp;#34;ExampleProject&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;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;strong&gt;Server.Target.cs&lt;/strong&gt; file will look similar to: (download example &lt;a href="https://files.trdwll.net/2020/01/21/exampleprojectservertarget.cs"&gt;ExampleProjectServer.Target.cs&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Using Unreal Frontend to Package Your Project</title><link>https://treadwell.net/blog/using-unreal-frontend-package-your-project/</link><pubDate>Fri, 17 Jan 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-unreal-frontend-package-your-project/</guid><description>&lt;p&gt;So you&amp;rsquo;re wanting to use UF to package your projects like a pro? You&amp;rsquo;re in the right place then. 😃&lt;/p&gt;
&lt;p&gt;UF makes it easier to build for different platforms with different settings (such as Development or Shipping) with just the click of a button.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to your engine install folder and find &lt;strong&gt;UnrealFrontend.exe&lt;/strong&gt;. (Mine is &lt;strong&gt;C:\Program Files\Epic Games\UE_4.24\Engine\Binaries\Win64&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Create a shortcut and put on your desktop or wherever.&lt;/li&gt;
&lt;li&gt;Open UnrealFrontend and click the bottom right + sign under &lt;em&gt;Custom Launch Profiles&lt;/em&gt;.
&lt;img src="https://files.trdwll.net/2020/01/20/xhkyx0_fYJqAVa.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Customize settings for your game. These are some settings that I use when packaging.
&lt;img src="https://files.trdwll.net/2020/01/20/ixl0si.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Click the back button at the top.&lt;/li&gt;
&lt;li&gt;Press the build button.
&lt;img src="https://files.trdwll.net/2020/01/20/nn6zem.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;The default directory will be &lt;strong&gt;Project/Saved/StagedBuilds&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Cross-Compiling for Linux on Windows for UE4</title><link>https://treadwell.net/blog/cross-compiling-for-linux/</link><pubDate>Wed, 15 Jan 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/cross-compiling-for-linux/</guid><description>&lt;p&gt;There&amp;rsquo;s really not much information on this so I figured I&amp;rsquo;d write about it to help other people and help myself if I forget how. lol&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This guide is written for 4.24, but should work for other versions. Or at the very least will be very similar for other versions.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install the &lt;a href="https://docs.unrealengine.com/en-US/Platforms/Linux/GettingStarted/index.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.unrealengine.com.ico" alt="" width="16" height="16" loading="lazy"&gt;clang toolchain&lt;/a&gt;.
&lt;img src="https://files.trdwll.net/2020/01/20/yf4mvb.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Add the settings to your &lt;strong&gt;DefaultEngine.ini&lt;/strong&gt;.&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-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[/Script/LinuxTargetPlatform.LinuxTargetSettings]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TargetArchitecture=X86_64UnknownLinuxGnu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There are 3 options for this. X86_64UnknownLinuxGnu, ArmUnknownLinuxGnueabihf, or AArch64UnknownLinuxGnueabi
3. Go into the launcher and download the Linux platform. (if you have source build then ignore this step)
&lt;img src="https://files.trdwll.net/2020/01/20/oii7jo.png" alt=""&gt;
Click the down arrow on the right then make sure Linux is selected.
&lt;img src="https://files.trdwll.net/2020/01/20/5rabcv.png" alt=""&gt;
4. Package your project however you do whether it be via Editor (&lt;strong&gt;File -&amp;gt; Package Project&lt;/strong&gt;) or &lt;a href="https://treadwell.net/blog/using-unreal-frontend-package-your-project/"&gt;Unreal Frontend&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>New Years Resolutions 2020</title><link>https://treadwell.net/blog/new-years-resolutions-2020/</link><pubDate>Thu, 09 Jan 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/new-years-resolutions-2020/</guid><description>&lt;p&gt;So every year people decide what they&amp;rsquo;re going to try and do in the new year and usually it&amp;rsquo;s stuff like go to the gym more or eat healthier. While those are mine every year also we all don&amp;rsquo;t stick to it and fall back into old habits.&lt;/p&gt;
&lt;p&gt;This year I have some NYR that I really hope I can make some of them happen.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Release a video game&lt;/li&gt;
&lt;li&gt;Maybe join the military&lt;/li&gt;
&lt;li&gt;Lose some weight, ~30lbs&lt;/li&gt;
&lt;li&gt;Contribute to more Open Source Software&lt;/li&gt;
&lt;li&gt;Release more software&lt;/li&gt;
&lt;li&gt;Become more successful than previous years&lt;/li&gt;
&lt;li&gt;Blog more than I ever have&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of these are very doable, however, I&amp;rsquo;m the one that&amp;rsquo;s in the way of not succeeding. I really do hope that 2020 is my year to finally succeed in things that are important to me. Now let&amp;rsquo;s talk about each resolution.&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>Why I Hate Blueprint in UE4</title><link>https://treadwell.net/blog/why-i-hate-blueprint-unreal-engine-4/</link><pubDate>Mon, 04 Feb 2019 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/why-i-hate-blueprint-unreal-engine-4/</guid><description>&lt;p&gt;Hate isn&amp;rsquo;t the best word to describe my feelings towards Blueprint (&amp;ldquo;BP&amp;rdquo;). Let&amp;rsquo;s go ahead and change that to strongly dislike or just dislike.&lt;/p&gt;
&lt;p&gt;So I dislike using BP for a few reasons and the main one is performance. Yes, I&amp;rsquo;m aware you can use nativization to speed it up, but C++ would still be faster in the long run. I&amp;rsquo;m a programmer, I don&amp;rsquo;t feel like a programmer when I write BP and I find networking easier in C++. I also find C++ much cleaner and easier to understand &lt;em&gt;(even if the code isn&amp;rsquo;t documented)&lt;/em&gt;. I guess that&amp;rsquo;s like most programmers, we find code easy to understand. /shrug&lt;/p&gt;</description></item><item><title>Datacenter Dream</title><link>https://treadwell.net/blog/datacenter-dream/</link><pubDate>Wed, 06 Sep 2017 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/datacenter-dream/</guid><description>&lt;p&gt;For the past few years, I&amp;rsquo;ve had the dream or rather idea to build and run a datacenter.&lt;/p&gt;
&lt;p&gt;I know, this isn&amp;rsquo;t logical when there are tons of providers out there that offer relatively affordable solutions. So why would I want to open one? Honestly, I have no clue. lmao&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I believe you could open a datacenter with only a few hundred thousand dollars. For example, land in my area is rather cheap - while you couldn&amp;rsquo;t probably buy good commercial land with $300k you could buy a house and use it as an office. Then you&amp;rsquo;d need to get some internet from different providers (in my area good luck) and some servers.&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><item><title>Hello world!</title><link>https://treadwell.net/blog/hello-world/</link><pubDate>Thu, 25 Jun 2015 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/hello-world/</guid><description>&lt;p&gt;Welp, finally decided to get around to installing WordPress. I’m not really the blogging type nor do I ‘love’ WordPress. Anyways, I’ll be dumping whatever I feel like here so feel free to read and comment on it.&lt;/p&gt;</description></item><item><title>About</title><link>https://treadwell.net/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://treadwell.net/about/</guid><description>&lt;figure class="about-avatar"&gt;&lt;img src="https://treadwell.net/img/russ.png"
 alt="Russ Treadwell" width="452" height="500"&gt;
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;m Russ Treadwell, a self-taught programmer and the studio head at GhostJam
Games. Over the past decade I&amp;rsquo;ve specialized in Unreal Engine, multiplayer
architecture, and high-performance back-end infrastructure - shipping everything
from rapid gameplay prototypes to deep engine customizations.&lt;/p&gt;
&lt;p&gt;At GhostJam Games I direct business development and high-level technical strategy
while staying hands-on with code architecture and implementation. You can spot my
fingerprints on titles like &lt;strong&gt;No More Room in Hell 2&lt;/strong&gt; and &lt;strong&gt;VAIL VR&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Now</title><link>https://treadwell.net/now/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://treadwell.net/now/</guid><description>&lt;p&gt;&lt;em&gt;Last updated: July 2026.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing weekly notes on engineering and small-company life.&lt;/li&gt;
&lt;li&gt;Reading more, scrolling less. Still working on it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This page is in the spirit of &lt;a href="https://nownownow.com/about" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/nownownow.com.ico" alt="" width="16" height="16" loading="lazy"&gt;nownownow.com&lt;/a&gt; -
a snapshot of the present, not the past.&lt;/p&gt;</description></item><item><title>Search</title><link>https://treadwell.net/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://treadwell.net/search/</guid><description/></item></channel></rss>