<?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>Forem: Programming Liftoff</title>
    <description>The latest articles on Forem by Programming Liftoff (@programliftoff).</description>
    <link>https://forem.com/programliftoff</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%2F32828%2Fccb324ea-ded7-46c2-9c5d-a7fcfc8182e7.jpg</url>
      <title>Forem: Programming Liftoff</title>
      <link>https://forem.com/programliftoff</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/programliftoff"/>
    <language>en</language>
    <item>
      <title>Win a $50 Gift Card to the DEV Shop!</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Fri, 08 May 2020 19:31:03 +0000</pubDate>
      <link>https://forem.com/programmingliftoff/win-a-50-gift-card-to-the-dev-shop-5008</link>
      <guid>https://forem.com/programmingliftoff/win-a-50-gift-card-to-the-dev-shop-5008</guid>
      <description>&lt;p&gt;Want to have a chance to win a $50 gift card to the &lt;a href="https://shop.dev.to"&gt;DEV Shop&lt;/a&gt;? Just do the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Subscribe on YouTube: &lt;a href="https://youtube.com/c/programmingliftoff"&gt;https://youtube.com/c/programmingliftoff&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow on Twitter: &lt;a href="https://twitter.com/programliftoff"&gt;https://twitter.com/programliftoff&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow on DEV: &lt;a href="https://dev.to/programmingliftoff"&gt;https://dev.to/programmingliftoff&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comment here with a programming topic you'd like to learn!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We will post in the comments who won on Friday May 15th and we'll send the winner the $50 gift card code using the private message (Connect) feature on dev.to.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The winner will be selected randomly. If we are unable to contact the winner within 3 days, we'll choose a new winner.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>giveaway</category>
      <category>developer</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What is the best type of computer for a computer science student entering college/university?</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Sun, 11 Mar 2018 03:13:30 +0000</pubDate>
      <link>https://forem.com/programliftoff/what-is-the-best-type-of-computer-for-a-computer-science-student-entering-collegeuniversity--4gce</link>
      <guid>https://forem.com/programliftoff/what-is-the-best-type-of-computer-for-a-computer-science-student-entering-collegeuniversity--4gce</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8fyC69lW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://source.unsplash.com/user/miabaker/ctRgcY-lY8I" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8fyC69lW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://source.unsplash.com/user/miabaker/ctRgcY-lY8I" alt="Image of someone typing on computer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This can be as general (Mac, Windows, Linux) or specific (SSD vs disk drive, RAM, etc.) as you like!  A good computer can make a huge difference in how productive you are when writing code, especially over a four year time period.  So what is the best computer to get?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>computerscience</category>
      <category>programming</category>
    </item>
    <item>
      <title>JSON Simplified</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Thu, 08 Mar 2018 05:51:39 +0000</pubDate>
      <link>https://forem.com/programliftoff/json-simplified--23g2</link>
      <guid>https://forem.com/programliftoff/json-simplified--23g2</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="http://programmingliftoff.com/" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt; as &lt;a href="http://programmingliftoff.com/json-simplified/" rel="noopener noreferrer"&gt;JSON Simplified&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxf8uquh4inpw27s1b0z7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxf8uquh4inpw27s1b0z7.png" alt="Website with JSON data"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;JSON is an essential part of the web today.  It's unavoidable for anyone programming in JavaScript.  JSON stands for JavaScript Object Notation.  An AJAX request is used in JavaScript to request JSON data from a server.  AJAX stands for Asynchronous JavaScript And XML.  XML is a data format that used to be used instead of JSON, but today JSON has become dominant in this area.  At the end of this tutorial we will have a simple local webpage that sends an AJAX request for JSON data that we upload to a server and then displays that data on the local webpage.  Let's do it!&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you learn better from videos, click here for a video walkthrough: &lt;a href="https://youtu.be/dK90uu-nycA" rel="noopener noreferrer"&gt;JSON Simplified YouTube Video&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;First let's take a look at some real JSON.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Biology"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"homework"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Memorize cell structure"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"classId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, JSON looks like a JavaScript object (that must be why its called JavaScript Object Notation!).  A few special notes about JSON are that all the object keys (class, homework, and classId in the above snippet) must be have double quotes around them.  Also, if the value is a string it must have double quotes as well (single quotes are not valid).  However, numbers do not and should not have double quotes surrounding them.&lt;/p&gt;

&lt;p&gt;Alright, now that we've seen some JSON, lets have some fun!&lt;/p&gt;

&lt;p&gt;I've uploaded some JSON to GitHub here: &lt;a href="https://github.com/programming-liftoff/json-simplified/blob/master/jsondata.json" rel="noopener noreferrer"&gt;https://github.com/programming-liftoff/json-simplified/blob/master/jsondata.json&lt;/a&gt;.  We're going to create a simple webpage that grabs the JSON data from the GitHub repo and displays it in the webpage.  Sounds awesome, right!?&lt;/p&gt;

&lt;p&gt;In your favorite text editor, create a file named &lt;em&gt;index.html&lt;/em&gt;.  In it past the following HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;'page-data'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;xhttp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;XMLHttpRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onreadystatechange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readyState&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&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;pageData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responseText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;pageData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;student&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;pageData&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h4&amp;gt;Let&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;s learn some &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="err"&gt;+ '!&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;;
        pageData += &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;For&lt;/span&gt; &lt;span class="nx"&gt;homework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; + data.homework[0] + &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h4&amp;gt;'&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;page-data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pageData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Done!&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;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://raw.githubusercontent.com/programming-liftoff/json-simplified/master/jsondata.json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;xhttp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;here&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open that file in your browser.  This can usually be done by double clicking the file in Finder or Windows Explorer.  You can also try right clicking the file in your text editor, selecting "Copy Full Path", and pasting that path in your web browser (e.g., Chrome).  You should now see the following webpage&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2018%2F02%2Fjson-simplified-webpage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2018%2F02%2Fjson-simplified-webpage.png" alt="Image of simple webpage displaying JSON data"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let me explain what's going on here.&lt;br&gt;&lt;br&gt;
First, the line &lt;code&gt;var xhttp = new XMLHttpRequest();&lt;/code&gt; creates a new request object. The XML data format used to be more popular than JSON, but now JSON is used more and we are stuck with the name &lt;code&gt;XMLHttpRequest&lt;/code&gt;.  This object can be used to request JSON data from a file or server.&lt;/p&gt;

&lt;p&gt;Let's skip down to line 21 &lt;code&gt;xhttp.open("GET", "&lt;a href="https://raw.githubusercontent.com/programming-liftoff/json-simplified/master/jsondata.json" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/programming-liftoff/json-simplified/master/jsondata.json&lt;/a&gt;", true);&lt;/code&gt;.  This line specifies the type of request we want to send.  We're sending a &lt;code&gt;GET&lt;/code&gt; request, since we want to get data from the server.  The other option is &lt;code&gt;POST&lt;/code&gt;, which could send data to the server.  Next we specify the location of the JSON data.  In this case its in a GitHub repository.  Finally, we pass &lt;code&gt;true&lt;/code&gt;.  This means the request should be performed asynchronously.  Performing the request asynchronously is the preferred method, since it allows the rest of the web page to load while the request is waiting for a response from the server with the data.  This is therefore an AJAX (Asynchronous JavaScript and XML) request.  Although as stated before, since we're using JSON in place of XML, you can think of it as an AJAJ request.  Just go with the flow and call it AJAX though, because that's what everyone calls it (so it must be right, right?).  Also note that &lt;code&gt;xhttp.send();&lt;/code&gt; is needed to actually send the request.&lt;/p&gt;

&lt;p&gt;Now let's look at the &lt;code&gt;xhttp.onreadystatechange&lt;/code&gt; function on line 7.  The first line in that function is an if statement &lt;code&gt;if (this.readyState == 4 &amp;amp;&amp;amp; this.status == 200)&lt;/code&gt;.  This is saying that the code inside the &lt;code&gt;if&lt;/code&gt; statement should be executed when the state of the request changes to &lt;code&gt;4&lt;/code&gt;, and the status is &lt;code&gt;200&lt;/code&gt;.  A ready state with the value &lt;code&gt;4&lt;/code&gt; means that the request has completed, and a status of &lt;code&gt;200&lt;/code&gt; means that the request was successful.  In other words, we have received the JSON data.  Checkout &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState" rel="noopener noreferrer"&gt;Mozilla's post&lt;/a&gt; and &lt;a href="https://www.w3schools.com/tags/ref_httpmessages.asp" rel="noopener noreferrer"&gt;W3School's post&lt;/a&gt; for more information about ready states and HTTP status codes respectively.&lt;/p&gt;

&lt;p&gt;Finally on line 11, the line &lt;code&gt;var data = JSON.parse(xhttp.responseText);&lt;/code&gt; retrieves the JSON response, uses &lt;code&gt;JSON.parse&lt;/code&gt; to convert the response String to a JSON object, and stores that JSON object in the &lt;code&gt;data&lt;/code&gt; variable.  The object can now be used as a JavaScript object and the data can be shown on the web page.&lt;/p&gt;

&lt;h3&gt;Bonus:&lt;/h3&gt;

&lt;p&gt;Try changing &lt;code&gt;true&lt;/code&gt; in line 21 to &lt;code&gt;false&lt;/code&gt;, then refresh the page.  Did you notice any change?  There isn't any noticable change in the web page.  But open the console (in Chrome, right click on the web page, select 'Inspect', and click on the 'Console' tab).  And refresh the page again.  You'll notice the order of the &lt;code&gt;console.log&lt;/code&gt; statements changes.  This is because when the call is not asynchronous (&lt;code&gt;false&lt;/code&gt;), the page waits for the request to complete before continuing.  Therefore 'Done!' prints before 'here'.  When the call is asynchronous, the page sends the request and has time to print 'here' before the server responds to the request.&lt;/p&gt;

&lt;p&gt;You may also notice a warning in the console when the parameter is set to &lt;code&gt;false&lt;/code&gt;.  This is the browser telling you that it's not a good idea to do this since the page loads slower if it's not asynchronous!&lt;/p&gt;

&lt;p&gt;There you have it, you've now learned JSON and played around with AJAX.  I will leave you with this challenge.  Create a free account with &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; if you don't have one.  Then create a new repository and copy the JSON data from this tutorial into a file in that repository.  Next, click the 'Raw' button to get the URL to the raw JSON data.  Finally update the URL in line 21 to your URL.  You're now pulling JSON from your GitHub server space to your web page.  Awesome!&lt;/p&gt;

&lt;p&gt;Now go ahead and modify the JSON and the web page to play around with it some more.  And feel free to post a comment below if you publish you're site live so that others can view it and be inspired!&lt;/p&gt;

&lt;p&gt;Get stuck anywhere, or want to hear everything explained again in a video?  Click the following link for a nice video walkthrough of all these steps! &lt;a href="https://youtu.be/dK90uu-nycA" rel="noopener noreferrer"&gt;JSON Simplified YouTube Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;-Andrew @ Programming Liftoff&lt;br&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://programmingliftoff.com" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>json</category>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Upload a Website to GitHub Pages</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Wed, 28 Feb 2018 22:36:41 +0000</pubDate>
      <link>https://forem.com/programliftoff/upload-a-website-to-github-pages--3k11</link>
      <guid>https://forem.com/programliftoff/upload-a-website-to-github-pages--3k11</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="http://programmingliftoff.com/" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt; as &lt;a href="http://programmingliftoff.com/upload-website-github-pages/" rel="noopener noreferrer"&gt;Upload a Website to GitHub Pages&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiad2ii05ewbf9glt6uk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiad2ii05ewbf9glt6uk7.png" alt="Finished Website" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Before following these steps you should have created a website on your local machine.  If you do not have a website yet, complete the tutorial &lt;a href="http://programmingliftoff.com/create-basic-webpage-css-javascript/" rel="noopener noreferrer"&gt;Create a Basic Webpage with CSS and JavaScript&lt;/a&gt; to create a website, then come back to this tutorial.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Prefer to watch this tutorial instead of reading it?  Click &lt;a href="https://www.youtube.com/watch?v=hAsDjEo9Oqw" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You will need &lt;code&gt;git&lt;/code&gt; installed on your computer to upload your website to GitHub.  If you don’t have it installed, visit &lt;a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git" rel="noopener noreferrer"&gt;this site&lt;/a&gt; and follow the instructions for your operating system.  Note that if you’re using Windows, I recommend installing &lt;a href="https://desktop.github.com/" rel="noopener noreferrer"&gt;GitHub for Windows&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then, to set up git, type the following in the terminal (or Git Bash on Windows), replacing &amp;lt;name&amp;gt; and &amp;lt;email&amp;gt; with your name and email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &amp;lt;name&amp;gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &amp;lt;email&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing and configuring git, log into GitHub and create a new repository.  Do not check the box to initialize the repository with a readme.  GitHub will then show you instructions for creating a new repository on the command line.&lt;/p&gt;

&lt;p&gt;Next, open the terminal (or the ‘Git Bash’ program in Windows).  Then use the &lt;code&gt;cd&lt;/code&gt; command to navigate to the folder that your website is in.  Once in the folder, type the commands that GitHub displayed after creating a new repository in the last step.  The commands will be similar to the following, with only the GitHub repository URL changing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; “Upload website”
git remote add origin git@github.com:programming-liftoff/github-pages-first-upload.git
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin master &lt;span class="c"&gt;# If this command fails, click the link in the next section to learn how to setup a SSH key with GitHub.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;Permission denied (publickey) when executing &lt;code&gt;git push -u origin master&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;If you see the message "Permission denied (publickey)", you will need to setup a SSH key to use with GitHub.  To do this, read GitHub's article &lt;a href="https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/" rel="noopener noreferrer"&gt;Generating a New SSH Key&lt;/a&gt;.  Complete all the steps, and when you're done, be sure to &lt;a href="https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/" rel="noopener noreferrer"&gt;Add your SSH Key to your GitHub Account&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now try executing the line &lt;code&gt;git push -u origin master&lt;/code&gt; and it should work!&lt;/p&gt;

&lt;h3&gt;Final Steps&lt;/h3&gt;

&lt;p&gt;Finally, go to the ‘Settings’ tab of the GitHub repository, scroll down to the GitHub Pages section, choose ‘Master Branch’ for the source, and click ‘Save’.  A URL will then be displayed in the GitHub Pages section.  Click on that URL to visit your webpage (Note: It may take several minutes for the webpage to show up at the URL).&lt;/p&gt;

&lt;p&gt;Congratulations!  You have now uploaded you website live on the internet!  Feel free to post the URL to your website in the comments below so other people can checkout your sweet website!&lt;/p&gt;

&lt;p&gt;If you had any trouble, &lt;a href="https://www.youtube.com/watch?v=hAsDjEo9Oqw" rel="noopener noreferrer"&gt;watch the video tutorial on YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
-Andrew @ Programming Liftoff&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>git</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Create a Basic Webpage with CSS and JavaScript</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Wed, 28 Feb 2018 22:35:35 +0000</pubDate>
      <link>https://forem.com/programliftoff/create-a-basic-webpage-with-css-and-javascript--104i</link>
      <guid>https://forem.com/programliftoff/create-a-basic-webpage-with-css-and-javascript--104i</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="http://programmingliftoff.com/" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt; as &lt;a href="http://programmingliftoff.com/create-basic-webpage-css-javascript/" rel="noopener noreferrer"&gt;Create a Basic Webpage with CSS and JavaScript&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8gbjpzy2p9ikygg6z3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8gbjpzy2p9ikygg6z3t.png" alt="Screenshot of finished webpage" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you already have your website and just need to upload it to GitHub and enable GitHub Pages, read &lt;a href="http://programmingliftoff.com/upload-website-github-pages/" rel="noopener noreferrer"&gt;Upload a Website to GitHub Pages&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Prefer to watch this tutorial instead of reading it?  &lt;a href="https://youtu.be/CFkQk_6xdS8" rel="noopener noreferrer"&gt;Click here to watch it on YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tired of creating boring HTML pages without style?  Then it's time to add some CSS and JavaScript to liven up your webpage!  In this tutorial we will create a website with a basic index.html file and add some CSS and JavaScript files to make it more exciting.  Then we will upload the webpage to GitHub as a GitHub Pages website!  Note that the methods shown in this tutorial to add CSS and JavaScript files in a webpage are not specific to GitHub Pages.  These methods will work with any website and any host (GitHub, GitLab, BitBucket, etc...).  Without further ado, let's get started!&lt;/p&gt;

&lt;p&gt;Start by opening your favorite text editor and creating a new folder (you can name the folder anything you like).  In that folder, create a file named index.html.&lt;/p&gt;

&lt;p&gt;Add the following code to index.html:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My webpage!&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello, World!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h4&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;'date'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h4&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you open the webpage in the browser, you should see just "Hello, World!" printed on the screen.&lt;/p&gt;

&lt;h4&gt;Adding JavaScript to Our Webpage&lt;/h4&gt;

&lt;p&gt;Next we will learn how to import JavaScript code from a separate file into 'index.html'.  Create a folder named 'javascript'.  Inside that folder, create a file named 'index.js'.  Inside this JavaScript file, add the following line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;date&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toDateString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; tag in 'index.html', add the following line of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;async&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./javascript/index.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now save the files and refresh your browser.  You should see the current date printed bellow 'Hello, World!'.  So how is this working?  Take another look at the JavaScript we added.  As you can see, it gets the element with id 'date' (thats the &amp;lt;h4&amp;gt; tag in our webpage), and sets the text inside it to a new Date() object that is converted into a more readable string.&lt;/p&gt;

&lt;p&gt;Then we added a &amp;lt;script&amp;gt; tag in the 'index.html' page to load this JavaScript code in our webpage.  We set the &lt;code&gt;src&lt;/code&gt; attribute of the &amp;lt;script&amp;gt; tag to "./javascript/index.js".  This tells the browser to load the file 'index.js', which is located in the 'javascript' folder.  This happens asynchronously and then the JavaScript code is executed, updating our web page almost instantly!  Great, now that we've added some JavaScript, lets add some CSS.&lt;/p&gt;

&lt;h4&gt;Adding CSS to Our Webpage&lt;/h4&gt;

&lt;p&gt;First create a folder named 'styles'.  Inside this folder, create a file named 'styles.css'.  Type or paste the following code into 'styles.css':&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0e8c5&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;Now go back to the 'index.html' file and add the following &amp;lt;link&amp;gt; tag inside the &amp;lt;head&amp;gt; tag (right above the &amp;lt;script&amp;gt; tag we added in the last section):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles/styles.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now refresh the 'index.html' page in your browser.  Sweet!  We've successfully added styles to the webpage!  Looking at the code we added to 'styles.css', you can see that we centered the text and added a light-tan background color to the body of the webpage.  Then we added a &amp;lt;link&amp;gt; tag with the attribute &lt;code&gt;rel="stylesheet"&lt;/code&gt; to 'index.html'.  This tells the browser that we will be loading CSS styles from a separate file.  We also added the attribute &lt;code&gt;href="styles/styles.css"&lt;/code&gt;.  This tells the browser that the styles we want to add are located in the 'styles.css' file, which is in the 'styles' folder.  Awesome!  Now that we've added JavaScript and CSS to our webpage, let's overdo it and add some image with some sweet styles!&lt;/p&gt;

&lt;h4&gt;Add some sweet CSS styles!&lt;/h4&gt;

&lt;p&gt;Replace the contents of your 'index.html' page with the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My webpage!&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles/styles.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;async&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./javascript/index.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello, World!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h4&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;'date'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h4&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"image-section"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"section-style"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://source.unsplash.com/random/400x200"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;A random image courtesy of unsplash.com.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"section-style"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://source.unsplash.com/random/400x200"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;A random image courtesy of unsplash.com.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"image-section"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"section-style"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://source.unsplash.com/random/400x200"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;A random image courtesy of unsplash.com.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"section-style"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://source.unsplash.com/random/400x200"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;A random image courtesy of unsplash.com.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also replace the contents of 'styles.css' with the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0e8c5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.image-section&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.section-style&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&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;Now refresh your webpage.  Nice!  We have a sweet webpage with images from &lt;a href="https://unsplash.com/" rel="noopener noreferrer"&gt;unsplash.com&lt;/a&gt;!  Every time you refresh the page you will see a new random image.  Pretty cool, right?!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2018%2F02%2Fcreate-website-css-and-js.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2018%2F02%2Fcreate-website-css-and-js.png" alt="Image of basic webpage with four pictures from unsplash" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you had any trouble, &lt;a href="https://youtu.be/CFkQk_6xdS8" rel="noopener noreferrer"&gt;watch the video tutorial on YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Next Steps: Uploading the Website to GitHub Pages&lt;/h3&gt;

&lt;p&gt;Ok, now that we've had our fun creating our site locally, let's publish it to the internet for free using GitHub Pages.  Head on over to &lt;a href="http://programmingliftoff.com/upload-website-github-pages/" rel="noopener noreferrer"&gt;Upload a Website to GitHub Pages&lt;/a&gt; to learn how to upload your site to GitHub Pages.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
-Andrew @ Programming Liftoff&lt;br&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="http://programmingliftoff.com" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>github</category>
    </item>
    <item>
      <title>Create Your First Website with GitLab Pages</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Fri, 16 Feb 2018 06:32:12 +0000</pubDate>
      <link>https://forem.com/programliftoff/create-your-first-website-with-gitlab-pages--1j8n</link>
      <guid>https://forem.com/programliftoff/create-your-first-website-with-gitlab-pages--1j8n</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RJYmJuYy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/uqh0ufsi05v869ffbxbh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RJYmJuYy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/uqh0ufsi05v869ffbxbh.png" alt="Image of GitLab Homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This video will walk you step by step through creating a live website using GitLab Pages.  This video is intended for people who may have experience building websites, but have not used GitLab Pages to host their website.  Want to show off your beautiful website to the world?  Then this is for you.&lt;/p&gt;

&lt;p&gt;Watch the video on YouTube: &lt;a href="https://youtu.be/cERdbQ-GgOo"&gt;https://youtu.be/cERdbQ-GgOo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>gitlab</category>
      <category>website</category>
      <category>free</category>
    </item>
    <item>
      <title>Learn Regular Expressions using Atom</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Tue, 07 Nov 2017 05:03:38 +0000</pubDate>
      <link>https://forem.com/programliftoff/learn-regular-expressions-using-atom-alk</link>
      <guid>https://forem.com/programliftoff/learn-regular-expressions-using-atom-alk</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="http://programmingliftoff.com/" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt; as &lt;a href="http://programmingliftoff.com/learn-regular-expressions-using-atom/" rel="noopener noreferrer"&gt;Learn Regular Expressions using Atom&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is a short little post with the goal of helping you to learn the elusive regular expressions!&lt;/p&gt;

&lt;p&gt;This takes advantage of a built in regex feature in the Atom text editor. It may work in other text editors as well, so give it a try in your favorite text editor or IDE. If it doesn't work, you can &lt;a href="https://atom.io/" rel="noopener noreferrer"&gt;download Atom here&lt;/a&gt; (don't worry, its free!).&lt;/p&gt;

&lt;h2&gt;Tutorial&lt;/h2&gt;

&lt;p&gt;First, create a new file in the Atom editor.&lt;/p&gt;

&lt;p&gt;Next, type in a line of text. Here is the line I will be using &lt;code class="highlight"&gt;(Hello). [World!]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Next type CMD+f (Ctrl+f on Windows) to open the find and replace utility.&lt;/p&gt;

&lt;p&gt;Then select the 'regex' option to treat the search item as a regular expression (see red arrow below).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2017%2F11%2FAtomRegexOption-1-300x181.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2017%2F11%2FAtomRegexOption-1-300x181.png" alt="Image of Atom Regex Option"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, highlight the line of text that you typed and press CMD+f (Ctrl+f on Windows). The search box should update to display your selection formatted as a regular expression.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2017%2F11%2FAtom-Regex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fprogrammingliftoff.com%2Fwp-content%2Fuploads%2F2017%2F11%2FAtom-Regex.png" alt="Image of Atom Regex in 'find and replace' utility"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations!Â  You now know how to use Atom to build regular expressions for you!&lt;/p&gt;

&lt;h2&gt;Understanding the generated expression&lt;/h2&gt;

&lt;p&gt;Recall that the original string wasÂ &lt;code&gt;(Hello). [World!]&lt;/code&gt;.Â  Parenthesis and brackets are special symbols in regex, so they must be escaped with theÂ &lt;code&gt;\&lt;/code&gt; character.Â  Note that a period &lt;code&gt;.&lt;/code&gt; is also a special regex character.Â  This is one of the most misused characters in regex, because a period by itself will match any character!Â  Simply typing aÂ &lt;code&gt;.&lt;/code&gt; to match a period in a string will match that string, but it will also match any string that contains any other character in place of the period.&lt;/p&gt;

&lt;h2&gt;Limitations&lt;/h2&gt;

&lt;p&gt;This only works for one-line expressions. :(Â  Even magic has its limits :).&lt;/p&gt;

&lt;h2&gt;Additional links&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://regexone.com/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://regexone.com/" rel="noopener noreferrer"&gt;https://regexone.com/&lt;/a&gt; - An awesome interactive tutorial for learning regular expressions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://regex101.com/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://regex101.com/" rel="noopener noreferrer"&gt;https://regex101.com/&lt;/a&gt; - A regex tester. You must know the regular expression, or try typing regular expressions until they match the example text you entered.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://amzn.to/2yabQ0p" rel="noopener noreferrer"&gt;Mastering Regular Expressions&lt;/a&gt; - Great book to learn how to write regular expressions. (This is an affiliate link.)&lt;/p&gt;

</description>
      <category>regex</category>
      <category>atom</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Using Docker for Experimenting with Code</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Wed, 25 Oct 2017 23:41:35 +0000</pubDate>
      <link>https://forem.com/programliftoff/using-docker-for-experimenting-with-code-8i</link>
      <guid>https://forem.com/programliftoff/using-docker-for-experimenting-with-code-8i</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="http://programmingliftoff.com/" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt; as &lt;a href="http://programmingliftoff.com/using-docker-for-experimenting-with-code/" rel="noopener noreferrer"&gt;Using Docker for Experimenting with Code&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbkhr8p5inu6p4qnlarv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbkhr8p5inu6p4qnlarv3.png" alt="Docker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the best ways to learn to code is by writing or modifying programs to see what they do. For me, this usually involves creating a file named something like &lt;code&gt;delete.py&lt;/code&gt;, and writing some code in it to help me understand more about the language. I then inevitably end up with a bunch of files on my desktop named &lt;code&gt;delete1.py&lt;/code&gt;, &lt;code&gt;delete2.py&lt;/code&gt;, &lt;code&gt;tmp.c&lt;/code&gt;, &lt;code&gt;temp.rb&lt;/code&gt;, &lt;code&gt;temp1.py&lt;/code&gt;, and so on. These are usually mixed in with some images and other files I may want to keep on my Desktop so removing them then becomes a semi time-consuming task. What if there was a better way!?&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Docker for Code Experiments
&lt;/h2&gt;

&lt;p&gt;Recently I started using docker for this task. The benefit of using Docker is that container provide a layer of isolation from your computer, so for the most part you can execute any commands in a container without worrying about messing something up on your computer. If something goes drastically wrong inside the container, no worries! Simply boot up a new container and try again! Cool, so how do I create a container and install the programming languages and tools that I need? I’m glad you asked. In the next section I will explain how to get started using the Dockerfile so you can get up and running! Then I will break down the Dockerfile I use line-by-line. It looks a little lengthy, but each line is fairly simple.&lt;/p&gt;

&lt;h2&gt;Using The Dockerfile&lt;/h2&gt;

&lt;p&gt;The Dockerfile and supporting files can be downloaded from the GitHub repository here: &lt;a href="https://github.com/programming-liftoff/docker-playground" rel="noopener noreferrer"&gt;docker-playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is a Readme on the GitHub page to help you get started, but I will provide the instructions here as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;br&gt;
Prereq: Before you begin, make sure you have installed &lt;a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git" rel="noopener noreferrer"&gt;Git&lt;/a&gt; and &lt;a href="https://docs.docker.com/engine/installation/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;.&lt;br&gt;
1) Clone the repository with &lt;code&gt;git clone &lt;a href="https://github.com/programming-liftoff/docker-playground.git" rel="noopener noreferrer"&gt;https://github.com/programming-liftoff/docker-playground.git&lt;/a&gt;&lt;/code&gt;&lt;br&gt;
2) cd into the directory by typing &lt;code&gt;cd docker-playground/&lt;/code&gt;&lt;br&gt;
3) Build the image by typing &lt;code&gt;docker build -t playground:latest .&lt;/code&gt;&lt;br&gt;
4) Start a bash shell in the container by typing &lt;code&gt;docker run --rm -it playground&lt;/code&gt;&lt;br&gt;
Thats it! Now you can create files and run them without worrying about cluttering up your desktop!  Simply type &lt;code&gt;exit&lt;/code&gt; or press &lt;code&gt;Ctrl-c&lt;/code&gt; to exit the container, leaving no trace of those files.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Additional Notes&lt;/strong&gt;&lt;br&gt;
At the beginning of the Dockerfile, some enviroment variable are set with the following lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; username andrew&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; password pass&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; rootpassword toor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the container loads a shell, it will load to user &lt;code&gt;andrew&lt;/code&gt;, with the password set to &lt;code&gt;pass&lt;/code&gt;.  The password for the root user is set to &lt;code&gt;toor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you wish to change these values, simply change them in this one place and rebuild the image with &lt;code&gt;docker build -t playground:latest .&lt;/code&gt; to update the container's settings.&lt;/p&gt;

&lt;h2&gt;The Dockerfile&lt;/h2&gt;

&lt;p&gt;Here's where I break down the Dockerfile and supporting files so you can learn what each lines does and modify the code to fit your needs.  We'll start with the smallest file first 'entry_point.sh'.&lt;/p&gt;

&lt;h4&gt;entry_point.sh&lt;/h4&gt;

&lt;p&gt;This file is run every time the container starts.  In this way, putting code in here is similar to putting code in '.bash_profile' or 'profile', etc.&lt;/p&gt;

&lt;p&gt;The full code can be view here: &lt;a href="https://github.com/programming-liftoff/docker-playground/blob/master/entry_point.sh" rel="noopener noreferrer"&gt;entry-point&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;1) This section of code checks to see if the file 'rvm.sh' exists.  If it exists, the file is executed.  This is necessary to add Ruby's executables to the PATH variable, among other things.  If you do now want to use Ruby, you can remove this from 'entry_point.sh'.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# For RVM - Ruby&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/profile.d/rvm.sh &lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt; /etc/profile.d/rvm.sh
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) This section of code starts a bash shell.  If you remove it, the container will start and stop without giving you a shell.  Feel free to give it a try!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get a shell&lt;/span&gt;
/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;Dockerfile&lt;/h4&gt;

&lt;p&gt;The Dockerfile contains the majority of the code.  It is used to build the docker image that a container can be started from.  Hang on tight as we explore it!&lt;/p&gt;

&lt;p&gt;The full code can be found here: &lt;a href="https://github.com/programming-liftoff/docker-playground/blob/master/Dockerfile" rel="noopener noreferrer"&gt;Dockerfile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;1) Docker images can be build starting with a base image.  In this case, the new image will start with everything in the base image, plus whatever is added in the Dockerfile.  This line tells Docker to start building the image using the latests version of the ubuntu image as a base.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) This section was shown earlier.  It sets some environment variables that are used when building the image.  There is a TODO in the comments to let you know that you can set these to whatever values you like.  The environment variables can be accessed from later on inside the Dockerfile, as well as in the container itself after it is built.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#==========================&lt;/span&gt;
&lt;span class="c"&gt;# TODO: Use desired values&lt;/span&gt;
&lt;span class="c"&gt;#==========================&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; username andrew&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; password pass&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; rootpassword toor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) This section creates a new user for the container.  By default with the ubuntu image, the container would start as the root user.  Using a computer as the root user is generally frowned upon because it can be dangerous (easy to mess something up when you have full rights).  This may not be as big of a deal since we're using a container, but creating a new user keeps things similar to how you would normally use the command line.  The docker &lt;code&gt;RUN&lt;/code&gt; command runs a shell command to change something in the container that is being build.  In this case, as mentioned, its simply running bash commands to add a user, set the user's password, and give the user 'sudo' rights.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#============&lt;/span&gt;
&lt;span class="c"&gt;# Add a user&lt;/span&gt;
&lt;span class="c"&gt;# 1) First add a user and set user's shell to bash and create a directory for user in the /home folder&lt;/span&gt;
&lt;span class="c"&gt;# 2) Next set the user's password&lt;/span&gt;
&lt;span class="c"&gt;# 3) Then add the user to the `sudo` group so the user can use the `sudo` command&lt;/span&gt;
&lt;span class="c"&gt;#============&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;useradd &lt;span class="nt"&gt;-ms&lt;/span&gt; /bin/bash &lt;span class="nv"&gt;$username&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$username&lt;/span&gt;:&lt;span class="nv"&gt;$password&lt;/span&gt; | chpasswd
&lt;span class="k"&gt;RUN &lt;/span&gt;adduser &lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="nb"&gt;sudo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) This line updates the package manager for the container.  This is necessary before using apt-get to install packages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5) These lines aren't necessary, but they prevent some warnings from being displayed.  Docker builds the container without accepting/allowing user input, so the first line tells debconf (the Debian configuration management system) not to worry about displaying dialogs to the user.  The second command installs apt-utils to allow package configuration to occur directly after install, rather than delaying it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#=====================&lt;/span&gt;
&lt;span class="c"&gt;# Updates for debconf&lt;/span&gt;
&lt;span class="c"&gt;# Prevent message 'debconf: unable to initialize frontend: Dialog'&lt;/span&gt;
&lt;span class="c"&gt;# Prevent message 'debconf: delaying package configuration, since apt-utils is not installed'&lt;/span&gt;
&lt;span class="c"&gt;#=====================&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'debconf debconf/frontend select Noninteractive'&lt;/span&gt; | debconf-set-selections
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; apt-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6) These lines use the apt-get package manager to install some basic tools that you would expect to have available on your command line.  These include &lt;code&gt;sudo&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt; (used to download files, useful when installing programming languages), the c and c++ compilers which are also needed for many other language installations, and &lt;code&gt;nano&lt;/code&gt;, a simple text editor.  You may want to add some more install commands here if you use another text editor like emacs or vim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#================&lt;/span&gt;
&lt;span class="c"&gt;# Basic software&lt;/span&gt;
&lt;span class="c"&gt;# build-essential Includes:&lt;/span&gt;
&lt;span class="c"&gt;#  - gcc (C language compiler)&lt;/span&gt;
&lt;span class="c"&gt;#  - g++ (C++ compiler)&lt;/span&gt;
&lt;span class="c"&gt;#  - make&lt;/span&gt;
&lt;span class="c"&gt;#================&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;sudo&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; curl
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; build-essential
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nano
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7) This part installs Python 3 and Pip 3, which is the package manager for Python 3.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#=========&lt;/span&gt;
&lt;span class="c"&gt;# Python3&lt;/span&gt;
&lt;span class="c"&gt;#=========&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; python3 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; python3-pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8) This section installs RVM, the Ruby Version Manager, which makes it easier to work with Ruby.  I comes with the ruby language interpreter as well as &lt;code&gt;irb&lt;/code&gt; (interactive ruby REPL) and some additional software.  It first downloads the gpg keys to verify the the RVM install is legitimate.  Next it downloads RVM with the latest stable version of Ruby.  It then add the user that was created earlier to the &lt;code&gt;rvm&lt;/code&gt; group.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#================&lt;/span&gt;
&lt;span class="c"&gt;# Ruby (via RVM)&lt;/span&gt;
&lt;span class="c"&gt;#================&lt;/span&gt;
&lt;span class="k"&gt;RUN  &lt;/span&gt;gpg &lt;span class="nt"&gt;--keyserver&lt;/span&gt; hkp://keys.gnupg.net &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="se"&gt;\c&lt;/span&gt;url &lt;span class="nt"&gt;-L&lt;/span&gt; https://get.rvm.io | bash &lt;span class="nt"&gt;-s&lt;/span&gt; stable &lt;span class="nt"&gt;--ruby&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    adduser &lt;span class="nv"&gt;$username&lt;/span&gt; rvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9) This section downloads version 1.9.1 of the Go programming language.  First it uses curl to download the compressed language files.  It then uncompresses the files to the /usr/local directory. Then it removes the compressed files.  Finally it updates the PATH environment variable to include the path to the Go binaries (e.g., the &lt;code&gt;go build&lt;/code&gt; and other Go commands).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#====&lt;/span&gt;
&lt;span class="c"&gt;# Go&lt;/span&gt;
&lt;span class="c"&gt;#====&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;curl &lt;span class="nt"&gt;-o&lt;/span&gt; ./go.linux-amd64.tar.gz https://storage.googleapis.com/golang/go1.9.1.linux-amd64.tar.gz &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; /usr/local &lt;span class="nt"&gt;-xzf&lt;/span&gt; go.linux-amd64.tar.gz &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; go.linux-amd64.tar.gz
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PATH="${PATH}:/usr/local/go/bin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10) This section sets the password for the root user.  It uses the rootpassword environment variable that was set at the beginning of the Dockerfile as the new password for the root user.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#===================&lt;/span&gt;
&lt;span class="c"&gt;# Set root password&lt;/span&gt;
&lt;span class="c"&gt;#===================&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;root:&lt;span class="nv"&gt;$rootpassword&lt;/span&gt; | chpasswd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;11) These lines copy the entry_point.sh file from your computer into the root directory of the container (/entry_point.sh).  The second line changes the file's permissions to make it executable.   We need to do this because the file is copied with the same permissions it has on your computer.  That means that if it cannot be executed on you computer, Docker won't be able to execute it.  You could change the permissions to the desired permissions on your computer so that it is copied with the correct permissions; however, to make it work every time, this Dockerfile doesn't assume that the file has the correct permissions.  The third line tells Docker to use that file "/entry_point.sh" as the ENTRYPOINT.  Meaning that this file will be run every time the container starts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#================&lt;/span&gt;
&lt;span class="c"&gt;# Set ENTRYPOINT&lt;/span&gt;
&lt;span class="c"&gt;# Copy entry_point file and make it executable.&lt;/span&gt;
&lt;span class="c"&gt;#=================&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./entry_point.sh /&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;744 /entry_point.sh
&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["/entry_point.sh"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;12) The first line here changes the current user for the container build.  All commands after this will be executed as this user.  This also makes it so that when the container starts, it loads the bash shell as this user.  The final command allows us to specify the directory that the shell will be in when the container starts.  This is set to load the bash shell in the user's home directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#==================&lt;/span&gt;
&lt;span class="c"&gt;# Set default user&lt;/span&gt;
&lt;span class="c"&gt;# 1) Set the default user when the container starts&lt;/span&gt;
&lt;span class="c"&gt;# 2) Set the default directory to load when container starts&lt;/span&gt;
&lt;span class="c"&gt;#==================&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; $username&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /home/$username&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;That's it!&lt;/h2&gt;

&lt;p&gt;You made it!  Congratulations!  Now not only can you use this Dockerfile to create an image and containers, you also can fork this Dockerfile on GitHub and customize it to exactly suit your needs!  Docker is a powerful tool, and this is just one of many uses for it.  Learning happens step-by-step though, so master this knowledge and then move on to increase your understanding of what Docker can do for you!  Thanks for reading!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>python</category>
      <category>ruby</category>
      <category>programming</category>
    </item>
    <item>
      <title>Create your first website on GitHub Pages</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Fri, 22 Sep 2017 04:35:29 +0000</pubDate>
      <link>https://forem.com/programliftoff/create-your-first-website-on-github-pages</link>
      <guid>https://forem.com/programliftoff/create-your-first-website-on-github-pages</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="http://programmingliftoff.com/" rel="noopener noreferrer"&gt;programmingliftoff.com&lt;/a&gt; as &lt;a href="http://programmingliftoff.com/create-your-first-website-on-github-pages/" rel="noopener noreferrer"&gt;Create your first website on GitHub Pages&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqq3i9hsqg4dqal8mk2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqq3i9hsqg4dqal8mk2r.png" alt="GitHub Pages Jekyll Theme" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been spending most of my time lately working on projects around web development. One of the most amazing tools I've found during this process is GitHub Pages. This article will walk you through creating a 'Hello, World' website hosted on GitHub Pages. Everything here is 100% free. If you learn better from videos, scroll down to the bottom of this article for a video walkthrough.&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 1 - CREATE A GITHUB ACCOUNT
&lt;/h2&gt;

&lt;p&gt;If you already have a GitHub account, great! Â Feel free to skip to step 2. Â If not, no worries! Â Creating a GitHub account is easy and will boost your visibility and credibility as a developer. Â In a way, a GitHub account is like a LinkedIn account for developers. Â GitHub allows you to put your code under version control and store it on a server (aka "In the cloud") so that even if you lose your computer or hard drive, all your code will still be accessible through your GitHub account. Â There are many different types of version control systems (vcs) such as subversion (svn), mercurial, and git. Â GitHub, as you may have guessed, uses git. Â They all have different strengths and weaknesses, but overall git is probably the easiest to get started with and is the go-to vcs system for the majority of developers. Â Version control systems are outside the scope of this tutorial, but you can find a short comparison of some of the most popular version control systems here. Â A nice Youtube playlist with introductory git videos published by GitHub can be found &lt;a href="https://www.youtube.com/watch?v=8oRjP8yj2Wo" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To make an account on GitHub, head on over to their webpage at &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt;. Â They have a really simple process for creating an account, so simply pick a username, enter your email address, and choose a (strong) password, and you're good to go!&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 2 - CREATE A REPOSITORY
&lt;/h2&gt;

&lt;p&gt;Â &lt;br&gt;
Next we will create the repository we will use for our GitHub Pages site. Â First a quick, but important note on repositories created with GitHub. Â GitHub has a free plan and a paid plan. Â The main difference between a free and paid plan on GitHub is the ability to create a private repository. Â With a free plan, all repositories you create will be public. Â That means anyone can see the code/files/ect. that you upload or create in the repository. Â Therefore it is super important that you do not put any private information in a public GitHub repository. Â Whatever you put in a public GitHub repository, you are sharing with the world. Â Using the free plan works great for this tutorial, as we will be adding a simple 'Hello, World' webpage to our repository, but keep in mind that if you want to be the only one with access to your GitHub repositories, you will need to upgrade to a paid account, which is currently $7 a month. Â If you're a college student, GitHub will give you unlimited free private repositories and many other benefits; you can find more info &lt;a href="https://education.github.com/pack" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Steps to create a repository:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click the 'New Repository' button&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the repository details as shown below and then click the green 'Create repository' button.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  STEP 3 - ENABLE GITHUB PAGES FOR THE REPOSITORY
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click the 'Settings' button on the repository home page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you are on the settings page, scroll down to the 'GitHub Pages' section and choose the master branch for the source.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  STEP 4 - CREATE THE HELLO WORLD WEBSITE
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;After enabling GitHub Pages for the repository, the next step is to create your website! Â Head back to the 'Code' tab in GitHub as shown below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To create a homepage for your website, click on the 'Create new file' button.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next enter the information shown below to create the index.html file.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  STEP 5 - VISIT YOUR WEBSITE!
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Great! Now it's time to visit your new website! Â Head back to the 'Settings' tab and click on your GitHub Pages URL in the GitHub Pages section. Â Note: It may take 5-10 minutes for the link to show your updated site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Congratulations! Your website should be live on the internet! Â Now you can utilize your web development skills to make an awesome website without having to pay a penny for hosting!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Final Site&lt;/p&gt;

&lt;h2&gt;
  
  
  BONUS - USING JEKYLL THEMES
&lt;/h2&gt;

&lt;p&gt;If you were checking out the options under the GitHub Pages section, you will have noticed that you can choose a theme. Â Themes are an easy way to get a great looking webpage up and running in no time! Â After choosing a theme, you will need to delete the index.html file you created to see the theme take effect.&lt;/p&gt;

&lt;p&gt;And that's the basics of GitHub Pages. Â In summary, GitHub Pages allows you to host your static websites for free. Â If you want your website source code to be private, you can upgrade to a paid GitHub account for unlimited private repositories. Â Static websites are very powerful. Â These sites can be built so well that it is not obvious whether a site is a static site, or a dynamic site using a server. Â This tutorial was to help you become aware of the possibilities made available to you by GitHub's support for static websites. Â To fully take advantage of static sites on GitHub you will need to practice your HTML, CSS, and JavaScript skills! Â With GitHub Pages, (almost) anything is possible, so start building your website today!&lt;/p&gt;

&lt;p&gt;Did you create a static site on GitHub? Â If so, post a link in the comments below so others can see it and gain some inspiration!&lt;/p&gt;

&lt;p&gt;Decide to watch this tutorial instead of reading it? Â Great! Â Hit play below.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Send Text Messages from Python!</title>
      <dc:creator>Programming Liftoff</dc:creator>
      <pubDate>Sun, 10 Sep 2017 02:10:50 +0000</pubDate>
      <link>https://forem.com/programliftoff/send-a-text-message-from-python-100-free</link>
      <guid>https://forem.com/programliftoff/send-a-text-message-from-python-100-free</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I4VN8Rfx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/3tsely1znv7u92l01647.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I4VN8Rfx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/3tsely1znv7u92l01647.png" alt="Twilio Homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently I've been focusing on how to do useful things with my programming knowledge.  Python integrates so well with many different services, and therefore has been my language of choice on this quest.  In this post I'm sharing an awesome service I found that lets you send text messages from your Python application for free - no credit card required!  There is a catch though, this is just a trial account, so you will eventually run out of trial credits .  But hey, Twilio is pretty generous with the amount of free credits you receive, so let's get to writing our application!&lt;/p&gt;

&lt;p&gt;Checkout the video below.  If you would like to learn how to make more awesome applications in Python, checkout the Programming Liftoff website here &lt;a href="http://programmingliftoff.com/"&gt;http://programmingliftoff.com/&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Andrew @ Programming Liftoff&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>twilio</category>
      <category>sms</category>
      <category>textmessage</category>
    </item>
  </channel>
</rss>
