<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jackson Goodman(he/him)</title>
    <description>The latest articles on DEV Community by Jackson Goodman(he/him) (@jacksonrgoodman).</description>
    <link>https://dev.to/jacksonrgoodman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F643863%2F24d30991-1b83-4983-ad74-73793df0808a.jpeg</url>
      <title>DEV Community: Jackson Goodman(he/him)</title>
      <link>https://dev.to/jacksonrgoodman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jacksonrgoodman"/>
    <language>en</language>
    <item>
      <title>When Random Numbers Are Not Random </title>
      <dc:creator>Jackson Goodman(he/him)</dc:creator>
      <pubDate>Mon, 16 Aug 2021 22:25:56 +0000</pubDate>
      <link>https://dev.to/jacksonrgoodman/when-random-numbers-are-not-random-20no</link>
      <guid>https://dev.to/jacksonrgoodman/when-random-numbers-are-not-random-20no</guid>
      <description>&lt;p&gt;"And then we can have it spit out something random!"&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p9BfZh8x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/goj2j9j56c6vk01cw880.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p9BfZh8x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/goj2j9j56c6vk01cw880.png" alt="What is RNG"&gt;&lt;/a&gt;I think every brainstorming session I've had has thrown that idea out. Both in the company of my code collaborators or the solitude of a personal project, the utility of random number is super handy. Random numbers are essential in forms of cryptography and eliminating as much bias as possible.&lt;/p&gt;

&lt;p&gt;But how do we know a random number is random? Aren't machines programmed to do specific instructions, so isn't that mean that no number is random? If computers only follow instructions, can they really guess?&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4xQ2l_7s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hn1xxgtz1qnvo0o1l2r3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4xQ2l_7s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hn1xxgtz1qnvo0o1l2r3.png" alt="RNG Computer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=Ac4Z1VMsE3E&amp;amp;ab_channel=ArtoftheProblem"&gt;This video&lt;/a&gt; goes into the main ideas of how computers choose randomness.&lt;/p&gt;

&lt;p&gt;Computers use a trick when they are told to select a random number. They grow randomness a &lt;em&gt;"&lt;strong&gt;seed&lt;/strong&gt;"&lt;/em&gt;- a number taken from an unpredictable source.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pN5MlZ0B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mf6hqbjdb20rqjv8pduj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pN5MlZ0B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mf6hqbjdb20rqjv8pduj.png" alt="RNG Basics"&gt;&lt;/a&gt;&lt;br&gt;
A common place to generate a seed from is using time or CPU clocks.&lt;/p&gt;

&lt;p&gt;That &lt;em&gt;&lt;strong&gt;seed&lt;/strong&gt;&lt;/em&gt; then needs to grow- and computers grow the seed by running it through an algorithm.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Ac4Z1VMsE3E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here's an example method called &lt;strong&gt;"middle squares"&lt;/strong&gt;, credited to &lt;a href="https://mathshistory.st-andrews.ac.uk/Biographies/Von_Neumann/"&gt;John Von Neumann&lt;/a&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Seed Is Established&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;seed = 173&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seed Is Multiplied By Itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Calculation:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;seed*seed = result&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;173*173 = 29929&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output The Middle Of The Result
&lt;em&gt;Example:&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;output = 992&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiply The Result By The Result
&lt;em&gt;Repeated Calculation:&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;result*result = newResult&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;29929*29929 = 895745041&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output The Middle Of The New Result
&lt;em&gt;Example:&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;output = 992745&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repeat Each Calculation With Each New Result
&lt;em&gt;Example:&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;output = 992745847...&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;This is or a variation on these principles dictate how most random numbers are generated. But is this cryptographically sound?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YPcS5XmB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6zv3ah1emexdn8ynpaq9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YPcS5XmB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6zv3ah1emexdn8ynpaq9.png" alt="Cryptographically Secure RNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently I was at a talk featuring &lt;a href="https://thefirstprototype.com/"&gt;The First Prototype&lt;/a&gt;'s founder, &lt;a href="https://www.linkedin.com/in/saamer/"&gt;Saamer Mansoor&lt;/a&gt;, who lead such an enthusiastic and interesting lecture on the subject of randomness and finding cryptographically secure RNG.&lt;/p&gt;

&lt;p&gt;Trends in the forefront of the wider world focus in on data leaks, institutional skepticism, and ransomware.&lt;/p&gt;

&lt;p&gt;Luckily there are thousands of &lt;a href="https://webhome.phy.duke.edu/~rgb/General/dieharder.php"&gt;Developers&lt;/a&gt;, &lt;a href="https://www.nist.gov/cyberframework"&gt;Scientific Laboratories&lt;/a&gt;, &lt;a href="https://www.intelligencecareers.gov/nsa/nsacareerdevelopment.html"&gt;Security Agencies&lt;/a&gt;, and &lt;a href="https://en.wikipedia.org/wiki/Cryptography_standards"&gt;NGOs&lt;/a&gt; working tirelessly to develop safe and sustainable means of encryption, together.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tP-Ipsat90c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;There are good things about unsecure RNG. A friend of mine once shared how a company under a ransomware attack were able to generate a key to unlock their hijacked data- the hackers had generated a random number to create the key, but because it was based off of a CPU clock, the company was able to recreate the seed and regain control of their data.&lt;/p&gt;

&lt;p&gt;Most of this is not super important or pertinent to junior developers, but it's always good to cover what's going on in the world.&lt;/p&gt;

&lt;p&gt;As junior developers, it's always good to go over your numbers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://linktr.ee/jacksonrgoodman"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vLbwHDDE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.shields.io/badge/LINKTR.EE/%2520-darkgreen%3F%26style%3Dfor-the-badge%26logo%3Dlinktree%26logoColor%3Dwhite" alt="LinkTree"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/jacksonrgoodman/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C9mRWMIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.shields.io/badge/Linked%2520In-0e76a8%3Fstyle%3Dfor-the-badge%26labelColor%3D0e76a8%26logo%3Dlinkedin%26logoColor%3Dwhite" alt="LinkedIn"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/jacksonrgoodman"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ll0Uyaho--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.shields.io/badge/Github-000000%3Fstyle%3Dfor-the-badge%26labelColor%3D000000%26logo%3Dgithub%26logoColor%3Dwhite" alt="Github"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GkQ4rX7x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c19aawnx52r4qq8l1wlb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GkQ4rX7x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c19aawnx52r4qq8l1wlb.png" alt="Code Quest"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>recap</category>
      <category>computerscience</category>
      <category>codenewbie</category>
      <category>concepts</category>
    </item>
    <item>
      <title>A VisStudio C# CLI-RPG Code-Along Playlist</title>
      <dc:creator>Jackson Goodman(he/him)</dc:creator>
      <pubDate>Mon, 09 Aug 2021 16:51:13 +0000</pubDate>
      <link>https://dev.to/jacksonrgoodman/a-visstudio-c-cli-rpg-code-along-playlist-1pfn</link>
      <guid>https://dev.to/jacksonrgoodman/a-visstudio-c-cli-rpg-code-along-playlist-1pfn</guid>
      <description>&lt;p&gt;Hey y'all👋😄&lt;br&gt;
If any junior C# developer's have down time between podcast stuff or the job search, &lt;a href="https://youtube.com/playlist?list=PL04Naussmr9dWEMfIDE9trydZQda897bc"&gt;here's a really cool video series&lt;/a&gt; walkthrough of a simple C# CLI App called &lt;code&gt;Ender's Quest&lt;/code&gt; ⚔️.&lt;/p&gt;

&lt;p&gt;During the middle part of my .NET back-end code bootcamp, I I practiced on the weekends by following &lt;a href="https://youtube.com/playlist?list=PL04Naussmr9dWEMfIDE9trydZQda897bc"&gt;this video&lt;/a&gt; for as long as I could/as long as it interested me.&lt;br&gt;
It was an excuse to turn my brain off and code along with a project for as long as I wanted (3 or 4 hours, once or twice a week, on the weekend).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D30V2UoB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07cfpz6c9xx53sh2p4ra.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D30V2UoB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07cfpz6c9xx53sh2p4ra.PNG" alt="Ender's Quest"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;code&gt;Enders Quest&lt;/code&gt;&lt;/em&gt; is a really cool text-based, turn-based RPG. It's especially interesting if you are a gamer or familiar with games like Dungeons and Dragons, Final Fantasy, etc. It's also a very scalable project- gameplay methods can be as complicated as &lt;a href="https://dmdavid.com/tag/for-10-years-dd-suffered-from-an-unplayable-initiative-system-blame-the-games-wargaming-roots/"&gt;AD&amp;amp;D&lt;/a&gt; or as simple as the logic in &lt;a href="https://www.archimedes-lab.org/game_nim/play_nim_game.html"&gt;NIM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The scope the playlist below covers a lot of really cool ideas, especially combined with the technology we've already learned, and might be nice review- I think that it's a good way to practice some C# while maybe disassociating with Bootcamp afterglow.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;code&gt;TL;DR:&lt;/code&gt;&lt;/em&gt; This is a really good Visual Studio C# practice series!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtube.com/playlist?list=PL04Naussmr9dWEMfIDE9trydZQda897bc"&gt;https://youtube.com/playlist?list=PL04Naussmr9dWEMfIDE9trydZQda897bc&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>gamedev</category>
      <category>practice</category>
      <category>fun</category>
    </item>
  </channel>
</rss>
