<?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: Austin Repp</title>
    <description>The latest articles on DEV Community by Austin Repp (@arepp23).</description>
    <link>https://dev.to/arepp23</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%2F460208%2Fa2a39fd2-aee5-4c1f-9a1c-f21040c215cd.jpg</url>
      <title>DEV Community: Austin Repp</title>
      <link>https://dev.to/arepp23</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arepp23"/>
    <language>en</language>
    <item>
      <title>How to write to a CSV file in C</title>
      <dc:creator>Austin Repp</dc:creator>
      <pubDate>Tue, 17 Nov 2020 03:33:26 +0000</pubDate>
      <link>https://dev.to/arepp23/how-to-write-to-a-csv-file-in-c-1l5b</link>
      <guid>https://dev.to/arepp23/how-to-write-to-a-csv-file-in-c-1l5b</guid>
      <description>&lt;h2&gt;
  
  
  Writing to a CSV using C code
&lt;/h2&gt;

&lt;p&gt;A basic CSV file relies on a comma-separated data format, which makes it straightforward to write to this file type from a c program.&lt;/p&gt;

&lt;p&gt;First you will want to create a file pointer, which will be used to access and write to a file. Then we call &lt;code&gt;fopen&lt;/code&gt; on this file pointer, passing in the name of the file we want to write to. In this scenario, I don't yet have a file called "MyFile.csv". A file with that name will automatically be created.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FILE *fpt;

fpt = fopen("MyFile.csv", "w+");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next I will show how to use &lt;code&gt;fprintf&lt;/code&gt; to write data to the file pointer. The line below shows how a row of column headers can first be written to the file. Notice how the values are comma-separated, and there is a "\n" at the end, indicating that it should go to the next row.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fprintf(fpt,"ID, Name, Email, Phone Number\n");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the header row is written, we can loop through our data, and write each index (in this case a person) to a row in the CSV file. The following would be placed in a loop, with each index being a different person.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fprintf(fpt,"%d, %s, %s, %s\n", id, name, email, phone);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After writing each row, we can close the file pointer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fclose(fpt);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! Your file will now contain however many rows of data have been written to it.&lt;/p&gt;

</description>
      <category>cpp</category>
    </item>
    <item>
      <title>Micro-influencer marketing on YouTube</title>
      <dc:creator>Austin Repp</dc:creator>
      <pubDate>Tue, 08 Sep 2020 15:16:57 +0000</pubDate>
      <link>https://dev.to/arepp23/micro-influencer-marketing-on-youtube-47gp</link>
      <guid>https://dev.to/arepp23/micro-influencer-marketing-on-youtube-47gp</guid>
      <description>&lt;p&gt;For the last few months, I’ve been reaching out to “micro influencers” on YouTube, with the hope of driving targeted traffic to my product, &lt;a href="http://discordbotstudio.org"&gt;http://discordbotstudio.org&lt;/a&gt;. I’m classifying micro influencers as having between 1,000 – 10,000 subscribers on YouTube. The benefit of reaching channels of this size is that they have dedicated audiences based on a certain niche (in my case this is Discord Bots and the creation thereof).&lt;/p&gt;

&lt;h1&gt;
  
  
  Background Info
&lt;/h1&gt;

&lt;p&gt;Discord Bot Studio (DBS) is a visual programming tool I released on Steam on May 12th, 2020 (2 months prior to writing this). It’s a utility that lets users create Discord bots without needing to write any code, a task that usually requires programming knowledge. Up to this point I have sold about 1,000 copies of DBS, all through Steam. My only marketing efforts to this point have been SEO, through the landing page I’ve had setup for almost a year, and through Steam itself, where DBS is sold. I also grew a decently sized mailing list from the landing page, but I saw very poor conversion from that list. I’m content with the traffic I’m getting through SEO alone, but I recognize that I need to explore other marketing channels to continue to grow.&lt;/p&gt;

&lt;h1&gt;
  
  
  Strategy
&lt;/h1&gt;

&lt;p&gt;The basic strategy I followed was searching YouTube for channels that pertained to Discord bots, and the creation of Discord bots. I preferred channels that had some upload regularity, and consistent view counts. I would send these channels an email if I could find their address, and offer them a free copy of Discord Bot Studio in exchange for them hopefully creating a video about it. Most of the responses I got were positive, and many were open to at least trying out the product.&lt;/p&gt;

&lt;h1&gt;
  
  
  Stats
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;📫 &lt;strong&gt;Emails Sent&lt;/strong&gt;: ~55&lt;/li&gt;
&lt;li&gt;💌 &lt;strong&gt;Response Rate&lt;/strong&gt;: ~60%&lt;/li&gt;
&lt;li&gt;🎥 &lt;strong&gt;Videos Created&lt;/strong&gt;: 4 at the time of writing this&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Video Views&lt;/strong&gt;: ~4,000&lt;/li&gt;
&lt;li&gt;💰 &lt;strong&gt;My Costs Incurred&lt;/strong&gt;: $0.00&lt;/li&gt;
&lt;li&gt;💵 &lt;strong&gt;Sales Generated&lt;/strong&gt;: Unknown. DBS is sold on Steam. Unfortunately Steam analytics and conversion tracking is super limited. They say this is because most purchases are made in the Steam desktop client, even if traffic originally arrives at the web page for the product. Anecdotally, I have spoken to a few customers who’ve told me they found DBS through the videos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Was it worth it?
&lt;/h1&gt;

&lt;p&gt;It’s hard to tell at this point whether my efforts have, and will pay off. My hope is that these videos provide nearly evergreen marketing, since they will forever be on YouTube accruing views. I am happy with the amount of sales I’m currently making through organic traffic coming from Google and Steam. That being said, the traffic from those channels has leveled off, and I’m open to experimenting with new strategies to look for more growth opportunity. I think I will stop reaching out to YouTube influencers for the time being, and focus my marketing efforts elsewhere to find a strategy that sticks.&lt;/p&gt;

&lt;h1&gt;
  
  
  Next Steps
&lt;/h1&gt;

&lt;p&gt;Being a low cost, one-time purchase product, it’s hard to imagine a scenario where any sort of paid advertising is going to work for DBS. With that in mind, I will continue to experiment with free, and low cost marketing channels which I haven’t tried yet. I believe the biggest potential opportunity is content marketing. Creating content obviously takes a lot of time, but it’s generally free, and therefore low risk for my young business.&lt;/p&gt;

</description>
      <category>saas</category>
    </item>
    <item>
      <title>How to set up a free custom domain on Github Pages</title>
      <dc:creator>Austin Repp</dc:creator>
      <pubDate>Tue, 08 Sep 2020 04:43:06 +0000</pubDate>
      <link>https://dev.to/arepp23/how-to-set-up-a-free-custom-domain-on-github-pages-34pf</link>
      <guid>https://dev.to/arepp23/how-to-set-up-a-free-custom-domain-on-github-pages-34pf</guid>
      <description>&lt;p&gt;For this tutorial I will be assuming you have already setup a site on Github Pages that's being run on the standard &lt;strong&gt;&lt;em&gt;USERNAME.github.io&lt;/em&gt;&lt;/strong&gt; domain. If you haven't done so, a quick Google search will yield lots of articles explaining the process. I'm using Bluehost as my domain provider, but the steps should be similar for any major domain provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup in Github repository
&lt;/h2&gt;

&lt;p&gt;In your Github repo for the site, navigate to the "Settings" tab. Scroll down and you will find an area for Github Pages setup. In the Custom Domain section, enter the domain name you want to use and click save.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zqbxMzDQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/UEKZ7VS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zqbxMzDQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/UEKZ7VS.png" alt="Github Domain"&gt;&lt;/a&gt;&lt;br&gt;
If you're using a static site generator, you may already have a file in your repo called CNAME. If you don't, you can create one. Inside this file, place the domain name. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d3qwp4qP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/NQKTehC.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d3qwp4qP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/NQKTehC.png" alt="CNAME"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Host record setup
&lt;/h2&gt;

&lt;p&gt;Now open the domain provider that you are using, and navigate to the DNS section for the domain you are interested in using. &lt;/p&gt;

&lt;p&gt;First you will need to add four A host records. The host record for each of these is "@". The image below shows what it looks like on Bluehost. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0x1kQBA0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/3B5bev3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0x1kQBA0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/3B5bev3.png" alt="A host"&gt;&lt;/a&gt;&lt;br&gt;
The four IP addresses (at the time of writing this) for each record to be added are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;185.199.108.153&lt;/li&gt;
&lt;li&gt;185.199.109.153&lt;/li&gt;
&lt;li&gt;185.199.110.153&lt;/li&gt;
&lt;li&gt;185.199.111.153&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next, we need to add a CNAME record for the www site record. This will be in the format &lt;strong&gt;&lt;em&gt;USERNAME.github.io&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Td_TFGMN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/P3zGhXl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Td_TFGMN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/P3zGhXl.png" alt="CNAME"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it! The records will probably take some time to update, so be patient. After they update you should see your site live on the domain you've provided. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why I'm moving from Wordpress to Hugo</title>
      <dc:creator>Austin Repp</dc:creator>
      <pubDate>Wed, 02 Sep 2020 14:42:17 +0000</pubDate>
      <link>https://dev.to/arepp23/why-i-m-moving-from-wordpress-to-hugo-5860</link>
      <guid>https://dev.to/arepp23/why-i-m-moving-from-wordpress-to-hugo-5860</guid>
      <description>&lt;h1&gt;
  
  
  Why move from Wordpress to Hugo?
&lt;/h1&gt;

&lt;p&gt;I created a Wordpress site on Bluehost for my personal/blog site because I thought it would be the easiest way to publish blogs without having to worry about hosting or creating my own site. Even as a developer, I have no interest in spending too much time reinventing the wheel to create a simple blog. After writing just one entry there, I wasn't happy with the solution. The Wordpress editor is slow, and in my opinion it's too clunky for building a simple blogging site. I found myself fighting the tooling, and still ending up with a boring looking site. &lt;/p&gt;

&lt;p&gt;This prompted me to look into static site generators. After some searching on &lt;a href="https://indiehackers.com/"&gt;IndieHackers&lt;/a&gt; I was sold on making the move to Hugo. Hugo is super easy to setup, and has great customizable themes out-of-the box. &lt;/p&gt;

&lt;h3&gt;
  
  
  What is Hugo?
&lt;/h3&gt;

&lt;p&gt;Hugo is an open source static site generator. Static sites are great for things like blogs and portfolios (like this site), since there is no server-side work that needs to be done for the site to work. The pages are pre-built and served without change from a server, unlike a traditional website. This makes static sites inherently quick. Additionally, static sites are a breeze to host. I'll discuss how I'm using Github Pages to host this site farther down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Hugo
&lt;/h2&gt;

&lt;p&gt;After browsing the available themes, I settled on &lt;a href="https://themes.gohugo.io/ghostwriter/"&gt;Ghostwriter&lt;/a&gt;. It had the general look I was going for, and was easy to customize to my liking. After making a few tweaks, this is the result I had for the main post content section:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Utnm1uCd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/4QMOKdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Utnm1uCd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/4QMOKdr.png" alt="Hugo post content"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting on Github Pages
&lt;/h2&gt;

&lt;p&gt;I decided to host the site on Github Pages for the following reasons.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It's free.&lt;/li&gt;
&lt;li&gt;Setup is quick and easy. Just setup your repo to be a Github pages site and you're ready to go. &lt;/li&gt;
&lt;li&gt;Making updates is seamless. New changes are pushed to the repo and automatically reflected on the site.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;I'm still working to modify the theme to my liking, but so far I'm happy with the results and ease-of-use. Being able to edit the css directly is much more intuitive than trying to customize a Wordpress theme. Writing articles is simple, as they're just markdown files. I will continue to explore the available options, but Hugo is looking like a good bet for now.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>writing</category>
    </item>
    <item>
      <title>Safe eval() alternative in Javascript</title>
      <dc:creator>Austin Repp</dc:creator>
      <pubDate>Mon, 31 Aug 2020 14:35:07 +0000</pubDate>
      <link>https://dev.to/arepp23/safe-eval-alternative-in-javascript-22l9</link>
      <guid>https://dev.to/arepp23/safe-eval-alternative-in-javascript-22l9</guid>
      <description>&lt;p&gt;A problem I encountered while creating &lt;a href="https://discordbotstudio.org"&gt;Discord Bot Studio&lt;/a&gt;, was allowing users to enter variables which could be evaluated at runtime. Discord Bot Studio is a visual programming tool, so I felt it was important to offer a familiar variable syntax. Ideally, I wanted a user to be able to type a variable using the following notation, and have it be replaced with that variable's value at runtime: &lt;/p&gt;

&lt;p&gt;An example would be if I have an object as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;variableObject&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;variableName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;fieldName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Austin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The user should be able to retrieve that value "Austin" with the following syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;variableObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;variableName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Rmember, this is a visual programming tool, so there could be any number of variables in an input string, or there could be none at all. The input is being evaluated at runtime, as it can be dynamic.&lt;/p&gt;

&lt;p&gt;The seemingly obvious solution is to use Javascript's eval()&lt;br&gt;
function, to evaluate the variables at runtime. Since DBS creates bots which will eventually be taking untrusted user input, this is not safe to do. Rather than trying to clean any incoming input, I settled on another solution which still allows variables with the dot (.) syntax to be evaluated.&lt;/p&gt;
&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;First I match variables in the input string using regex by looking for the ${} notation I mentioned above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;varRegex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="sr"&gt;{&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;.*&lt;/span&gt;&lt;span class="se"&gt;?)&lt;/span&gt;&lt;span class="sr"&gt;}/g&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I trim the excess ${} from the match, and pass the resultant string to the following function, along with the object containing any variables that may be referenced by the user.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// desc = variableObject.variableName.fieldName&lt;/span&gt;
&lt;span class="cm"&gt;/* obj = userVariables {
    variableObject {
        variableName: {
            fieldName: "Austin"
        }
    }
}
*/&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getDescendantProp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shift&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="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Here obj is the object containing any variables the user input should have access to. Desc is the trimmed match string. Continuing the example from above, desc would equal &lt;strong&gt;&lt;em&gt;variableObject.variableName.fieldName&lt;/em&gt;&lt;/strong&gt;. The string is split into an array on the periods.  &lt;strong&gt;&lt;em&gt;variableObject.variableName.fieldName&lt;/em&gt;&lt;/strong&gt; would be split into &lt;br&gt;
&lt;strong&gt;&lt;em&gt;[variableObject, variableName, fieldName]&lt;/em&gt;&lt;/strong&gt;. These array values are then shifted out in order, and used as keys to access the variable-containing object. This function will return just the string "Austin" using the example object from above. &lt;/p&gt;

&lt;p&gt;By doing this, I can limit the variables that are available to the user, and also give them access to those variables using normal Javascript syntax. This can be extended if you would like to support &lt;strong&gt;&lt;em&gt;variableObject[variableName]&lt;/em&gt;&lt;/strong&gt; as well. This is not a true alternative to &lt;strong&gt;&lt;em&gt;eval()&lt;/em&gt;&lt;/strong&gt; for all scenarios, but it works well for indexing into objects at runtime. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>28 free resources for web developers</title>
      <dc:creator>Austin Repp</dc:creator>
      <pubDate>Sun, 30 Aug 2020 18:37:14 +0000</pubDate>
      <link>https://dev.to/arepp23/28-free-resources-for-web-developers-49a3</link>
      <guid>https://dev.to/arepp23/28-free-resources-for-web-developers-49a3</guid>
      <description>&lt;p&gt;Below you will find a curated list of resources I have found useful in my endevours designing and developing web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://flaviocopes.com/"&gt;Flavio Copes&lt;/a&gt; - seemingly endless articles on a wide variety of technical subjects. Most articles are related to web development. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/refactoring-ui/7-practical-tips-for-cheating-at-design-40c736799886"&gt;7 Practical Tips for Cheating at Design&lt;/a&gt; - a great list of tips to keep in mind when doing web design. They do a fantastic job explaining the concepts, and the article is written to help developers who may struggle with design.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://uxdesign.cc/"&gt;UX Collective&lt;/a&gt; - curated stories on UX, usability, and design.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💾 GitHub repositories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/freeCodeCamp/freeCodeCamp"&gt;freeCodeCamp&lt;/a&gt; - freeCodeCamp has a repository that's home to their open source codebase and curriculum.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ripienaar/free-for-dev"&gt;free-for.dev&lt;/a&gt; - a list of software products which have free tiers for developers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/EbookFoundation/free-programming-books"&gt;Free programming books&lt;/a&gt; - a list of free programming books, with many available languages.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/rShetty/awesome-podcasts/blob/master/README.md"&gt;Awesome podcasts&lt;/a&gt; - a list of podcasts, most of which are development related.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/goabstract/Marketing-for-Engineers"&gt;Marketing for Engineers&lt;/a&gt; - a curated list of marketing resources for developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌈 Colors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://coolors.co/"&gt;Coolors&lt;/a&gt; - generate and browse color palletes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://colorhunt.co/"&gt;ColorHunt&lt;/a&gt; - curated color pallettes, great for inspiration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👥 Communities
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.indiehackers.com/"&gt;IndieHackers&lt;/a&gt; - a great community focused on helping people build and run internet businesses. This site has an entreprenuerial leaning, but most of the members seem to be developers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt; - Y Combinator's news site. There is lots of interesting content here daily. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt; - Dev.to is a community of software developers helping each other.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Inspiration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dribbble.com/"&gt;Dribbble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bestwebsite.gallery/"&gt;Best Website Gallery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.siteinspire.com/"&gt;Site Inspire&lt;/a&gt; - web design inspiration.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.awwwards.com/"&gt;Awwwards&lt;/a&gt; - web design trends.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📺 YouTube Channels (less web focused)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/channel/UCUkRj4qoT1bsWpE_C8lZYoQ"&gt;ThinMatrix&lt;/a&gt; - a great devlog from ThinMatrix, the solo developer of Equillinox. He showed his journey developing, and successfully releasing the game. He's now working on a new project, a city building game. His uploads are infrequent but they are always high quality and entertaining.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/c/Bisqwit/videos"&gt;Bisqwit&lt;/a&gt; - very technical, but also very interesting videos.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA"&gt;Brackeys&lt;/a&gt; - the king of Unity Engine tutorials.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧰 No code tools (not free)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://carrd.co/"&gt;Carrd&lt;/a&gt; - visual builder for one-page sites. Comes with some great templates. This is my go-to for getting a landing page up and running quickly. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webflow.com/"&gt;Webflow&lt;/a&gt; - build custom websites using a visual canvas. Webflow allows more freedom, and more functionality-rich sites than Carrd, but it has a steeper learning curve. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔨 Dev Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://trello.com/en-US"&gt;Trello&lt;/a&gt; - card-based project tracking.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.upvoty.com/"&gt;Upvoty&lt;/a&gt; - a tool to get feedback on project development roadmaps through user voting. I briefly used this when developing &lt;a href="https://discordbotstudio.org"&gt;Discord Bot Studio&lt;/a&gt; and found it had everything I needed at a fairly low price point.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.gitbook.com/"&gt;GitBook&lt;/a&gt; - my go-to choice for creating product documentation. They have a free plan which even allows using a custom domain.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt; - this one won't be new to most people, but it's too good to leave off the list. Free, open source IDE with great extension support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.postman.com/"&gt;Postman&lt;/a&gt; - GUI for testing and developing APIs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; - static site generator. Hugo claims to be the fastest framework for building websites. I can't verify if that's totally true or not, but I've been impressed. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checkout my apps
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://discordbotstudio.org"&gt;Discord Bot Studio - bot maker&lt;/a&gt;&lt;br&gt;
&lt;a href="https://modfoundry.app/"&gt;ModFoundry - the easiest way to make mods for Minecraft&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>design</category>
    </item>
  </channel>
</rss>
