<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Site-Server v@build.version@ (http://www.squarespace.com) on Tue, 07 Apr 2026 18:56:56 GMT
--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://www.rssboard.org/media-rss" version="2.0"><channel><title>The Chronic Monster</title><link>https://www.thechronicmonster.com/</link><lastBuildDate>Sat, 14 Mar 2026 21:22:58 +0000</lastBuildDate><language>en-US</language><generator>Site-Server v@build.version@ (http://www.squarespace.com)</generator><description><![CDATA[<p>Blogs by TheChronicMonster over a range of subjects from entertainment to politics to lifestyle and relationships.</p>]]></description><item><title>GCP Baseline Infrastructure Quest Notes Part 1</title><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Sun, 29 Dec 2019 18:07:49 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2019/12/29/gcp-baseline-infrastructure-quest-notes-part-1</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:5e08e63181e14d1a251fc33d</guid><description><![CDATA[Notes to help you quick start your experience with Cloud Storage, the Cloud 
IAM and Stackdriver.]]></description><content:encoded><![CDATA[<p class="">I’m steadily working through the GCP Quests. This week I’ve been working through the Baseline Infrastructure. It walks through creating Buckets, Cloud IAM, using StackDrive and more. My notes are more refined this week and they’re growing more rapidly than last week’s so here’s the first part of the Baseline Infrastructure. </p>


































































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png" data-image-dimensions="500x537" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=1000w" width="500" height="537" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642665489-PY28U8H99VQ1VDDE2Z7U/baseline-infrastructure.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class=""><br></p><p class=""><strong>Baseline Infrastructure Quest</strong></p><p class=""><strong>Cloud Storage Lab</strong></p><p class=""><br></p><p class="">Storage allows storage (duh) and retrieval of data. Can be used to serve website content, archives, and recovery. Can also distribute large data objects to users with direct download.&nbsp;</p><p class="">These notes will help you create storage buckets, upload objects, create folders and subfolders and make objects publicly available.&nbsp;</p><p class="">We’re not using the cloud shell in this series so notes will all be in the console</p><p class=""><strong>Create a Bucket</strong></p><p class="">Open the Google Console</p><p class="">Navigation menu &gt; Storage &gt; Browser &gt; Create Bucket</p><p class="">Name: enter a unique name</p><p class="">	There are rules to naming buckets. See the fine print for details.</p><p class="">	Short form is, start with alpha; alphanumeric, -, _, .</p><p class="">Storage class: (pick your choice) Multi-regional&nbsp;</p><p class="">Location: (your choice) United States</p><p class="">Create</p><p class="">And now your bucket is created.</p><p class=""><strong>Upload an Object into a bucket</strong></p><p class=""><br></p><p class="">Grab a file. Any file. For practice a .jpg or .txt file is best. The image should be saved to your local drive.</p><p class="">If you’ve just created a bucket then you should be in the Bucket’s details screen. If not, then find and open your bucket to view its details.&nbsp;</p><p class="">Drag and drop the file into the bucket’s console or browse your disk for the desired file.&nbsp;</p><p class="">The file will be added to the Bucket’s list.&nbsp;</p><p class="">To Delete the file click the box next to the filename and then click delete. Confirm your desire to delete.</p><p class="">OK, let’s upload the file again.</p><p class="">To rename the file click the hotdog icon (That’s three vertical dots on the far right of the row). Select <strong>Rename</strong></p><p class="">(Note that the hotdog button may be hiding so you may need to scroll to the right or use a full screen).</p><p class="">Change the file name and then click RENAME.</p><p class="">Now your bucket will reflect the new name of the file.&nbsp;</p><p class=""><strong>Share an Object Publicly</strong></p><p class=""><br></p><p class="">Files in a bucket are private by default. We must edit permissions to make them accessible via URL.</p><p class="">Click the hotdog button and select <strong>edit permissions</strong></p><p class="">Click <strong>+ Add item</strong></p><p class="">We’re going to add a permission for all users:</p><p class="">Under <strong>ENTITY </strong>select <strong>User</strong></p><p class="">Under <strong>NAME </strong>select <strong>allUsers</strong></p><p class="">Under <strong>ACCESS</strong> select <strong>Reader</strong></p><p class="">Click Save</p><p class="">Now that the file is shared publicly a link icon will appear in the “public access” column. Click the file to see it in a new tab.</p><p class=""><strong>Create folders in a Bucket</strong></p><p class=""><br></p><p class="">To create a folder click the “Create Folder” link toward the top of the page.&nbsp;</p><p class="">Name the folder and click <strong>Create</strong></p><p class="">Folders have the folder icon in the bucket to differentiate them from files.&nbsp;</p><p class="">Create a subfolder by entering the first folder and then create a new folder.&nbsp;</p><p class="">Files can be placed in folders and subfolders.&nbsp;</p><p class="">Be sure the file is publicly accessible by clicking the hotdog button and selecting <strong>Edit permissions</strong></p><p class="">Select <strong>+ Add item</strong></p><p class="">Enter the same permissions as we did previously.</p><p class="">Under <strong>ENTITY </strong>select <strong>User</strong></p><p class="">Under <strong>NAME </strong>select <strong>allUsers</strong></p><p class="">Under <strong>ACCESS</strong> select <strong>Reader</strong></p><p class=""><br></p><p class=""><strong>Delete a folder</strong></p><p class=""><br></p><p class="">Open your bucket.&nbsp;</p><p class="">Click the box to the left of the folder you desire to delete.&nbsp;</p><p class="">Click delete again to confirm.</p><p class="">It’s gone!</p><p class=""><strong>Cloud Storage: This time with the Shell</strong></p><p class=""><br></p><p class="">Consoles are nice. GUIs have made computers accessible to the general public, which I think we have found is great and terrible all at the same time.&nbsp; As great as GUIs are, the shell is where its at in terms of efficiency and power. If you want to be a power user then learning shell is essential. This section of the notes does exactly what we just accomplished, but using the cloud shell.&nbsp;</p><p class="">You can double check your progress at any time in the console by navigating to your bucket and refreshing the browser as you work. (<strong>Navigation menu &gt; Storage</strong>)&nbsp;</p><p class="">OK, let’s rock through this.</p><p class="">Open the cloud shell by clicking the Open Shell button</p><p class="">If you’d like to list your active account name use the command</p><p class="">gcloud auth list</p><p class="">List project ID with</p><p class="">gcloud config list project</p><p class="">Let’s create a bucket. Use the gsutil mb command and a unique name to create a bucket.</p><p class="">gsutil mb gs://BUCKET-NAME/</p><p class="">Same bucket naming rules as before apply. In short, alphanumeric, _, -, . Are legal but name must start with alpha and end with alphanumeric</p><p class="">Successful output looks like:</p><p class="">Creating gs://BUCKET-NAME</p><p class="">A 409 ServiceException means you’ve already used that bucket name.</p><p class=""><br></p><p class=""><strong>Upload an object into the bucket</strong></p><p class=""><br></p><p class="">In this case, we’re going to get a portrait of Ada Lovelace from her Wikipedia page.&nbsp;</p><p class="">wget --output-document ada.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Ada_Lovelace_portrait.jpg/800px-Ada_Lovelace_portrait.jpg</p><p class="">Use gsutil cp to upload the image from your disk to the bucket.</p><p class="">gsutil cp ada.jpg gs://BUCKET-NAME/</p><p class="">To remove a file use the rm command.</p><p class="">rm ada.jpg</p><p class="">We can download files stored in our buckets to our Cloud Shell with the gsutil cp command.&nbsp;</p><p class="">gsutil cp -r gs://BUCKET-NAME/ada.jpg</p><p class="">Successful operation returns a “Copying gs” output.</p><p class=""><br></p><p class=""><strong>Copy an object to a folder in the bucket</strong></p><p class=""><br></p><p class="">Use gsutil cp to create a new folder and copy the image.</p><p class="">gsutil cp gs://BUCKET-NAME/ada.jpg gs://BUCKET-NAME/image-folder/</p><p class="">(Image-folder/ is the name of my new folder.)</p><p class="">If you’re successful then you’ll receive a “Copying gs” output.</p><p class=""><br></p><p class=""><strong>List contents of a bucket or folder</strong></p><p class=""><br></p><p class="">Use gsutil ls to list contents of a bucket:</p><p class="">gsutil ls gs://BUCKET-NAME</p><p class=""><br></p><p class=""><strong>List details for an object</strong></p><p class=""><br></p><p class="">Use the -l flag to receive a detailed list of bucket contents</p><p class="">gsutil ls -l gs://BUCKET-NAME/ada.jpg</p><p class=""><br></p><p class=""><strong>Make objects publicly accessible</strong></p><p class=""><br></p><p class="">Use the gsutil acl ch command to grand all users read permission of an object stored in the bucket.</p><p class="">gsutil acl ch -u AllUsers:R gs://BUCKET-NAME/ada.jpg&nbsp;</p><p class="">An “updated” output returns when successful.&nbsp;</p><p class="">The image or file is now public and available.&nbsp;</p><p class=""><br></p><p class=""><strong>Remove Public Access</strong></p><p class=""><br></p><p class="">To remove public access use the same command above with the -d flag.</p><p class="">gsutil acl ch -d AllUsers gs://BUCKET-NAME/ada.jpg</p><p class=""><br></p><p class=""><strong>Delete Objects</strong></p><p class=""><br></p><p class="">Use gsutil rm to delete objects.</p><p class="">gsutil rm gs://BUCKET-NAME/ada.jpg</p><p class="">A “removing” output returns upon success.&nbsp;</p><p class=""><br></p><p class=""><strong>CLOUD IAM</strong></p><p class=""><br></p><p class=""><strong>Cloud IAM</strong> is Google cloud’s identity and access management. This is a service that lets users create and manage permissions for their GCP resources. Cloud IAM unifies access control for GCP services into a single system and provides a consistent set of operations.&nbsp;</p><p class=""><br></p><p class="">These notes will help you assign and remove permissions to a second user.</p><p class="">These section will require logging in as two users. To avoid confusion on Google’s platform I recommend using private mode in your browser for this exercise.&nbsp;</p><p class="">USER 1 <strong>IAM &amp; admin &gt; IAM</strong></p><p class="">This enters IAM &amp; admin console.</p><p class="">Click <strong>+ADD</strong></p><p class=""><br></p><p class="">You’ll find all of the project roles under the Project category.</p><p class="">The roles are Browser, Editor, Owner and Viewer</p><p class="">These are <em>primitive </em>roles</p><p class="">Roles specify control access &amp; mgmt for all GCP services.&nbsp;</p><p class=""><br></p><p class="">It’s a brief summary</p><p class="">Viewer: Read only</p><p class="">Editor: viewer permissions + permission to modify state</p><p class="">Owner: Editor permissions + manage roles and set up billing</p><p class="">Browser (beta): Read access to browse project hierarchy and Cloud IAM policy. Does not have permission to view project resources.</p><p class=""><br></p><p class=""><strong>Explore editor roles</strong></p><p class=""><br></p><p class="">Switch to Username 2</p><p class="">Go to IAM <strong>Nav menu &gt; IAM &amp; admin &gt; IAM</strong></p><p class="">The table will show the usernames and their roles</p><p class="">Trying to click +ADD will show that you lack permissions to edit.</p><p class="">Switch to Username 1 for the next step</p><p class=""><br></p><p class=""><strong>Prepare a resource for access testing</strong></p><p class=""><br></p><p class="">Ensure that you’re in the Username 1 console</p><p class="">Create a bucket (If you receive an error sign out and sign back in as user 1)</p><p class="">Update the following fields.&nbsp;</p><p class="">Name: choose your own</p><p class="">Default storage class: multi-regional</p><p class="">Note the name of the bucket for later use.&nbsp;</p><p class="">Create&nbsp;</p><p class="">Upload a file to the bucket</p><p class="">Rename the file by clicking the hotdog button</p><p class="">Rename to ‘sample.txt’</p><p class="">Click rename.</p><p class=""><br></p><p class=""><strong>Verify project viewer access</strong></p><p class=""><br></p><p class="">Switch to Username 2</p><p class=""><strong>Nav menu &gt; Storage &gt; Browser</strong></p><p class=""><br></p><p class="">Verify the user can see the bucket</p><p class="">Username 2 should have “viewer” role&nbsp;</p><p class=""><br></p><p class=""><strong>Remove project access</strong></p><p class=""><br></p><p class="">Switch to Username 1</p><p class="">To remove a project viewer</p><p class=""><strong>Nav menu &gt; IAM &amp; admin &gt; IAM</strong></p><p class="">Click the pencil next to Username 2 (on the right)</p><p class="">Remove the project viewer access for Username 2 by clicking the trash can.</p><p class="">Click save.</p><p class="">The user will disappear from the list.&nbsp;</p><p class=""><br></p><p class=""><strong>Verify Username 2 has lost access</strong></p><p class=""><br></p><p class="">Switch to Username 2</p><p class=""><strong>Nav menu &gt; Home</strong></p><p class="">Nav back to cloud storage&nbsp;</p><p class=""><strong>Nav menu &gt; Storage &gt; Browser</strong></p><p class="">You will see an error.</p><p class=""><strong>Add Storage Permissions</strong></p><p class="">Copy username 2 name</p><p class="">Switch to username 1&nbsp;</p><p class=""><strong>Nav menu &gt; IAM &amp; admin &gt; IAM</strong></p><p class="">Click <strong>+ ADD</strong> and paste Username 2 into new members field.</p><p class="">In the <strong>Roles</strong> field, select <strong>Storage &gt; Storage Object Viewer</strong> from the drop-down menu</p><p class="">Click <strong>SAVE</strong></p><p class=""><br></p><p class=""><strong>Verify Access</strong></p><p class=""><br></p><p class="">Switch to Username 2</p><p class="">Username 2 doesn’t have Project Viewer role so the user can’t see the project. But the user does have access to Cloud Storage. So let’s activate the cloud shell.&nbsp;</p><p class="">Open the cloud shel and enter the command to list the contents of the bucket.&nbsp;</p><p class="">gsutil ls gs://[YOUR_BUCKET_NAME]</p><p class="">Output will show the sample file.</p><p class="">Try renaming and deleting the file<br><br></p><p class=""><strong>Stackdriver</strong></p><p class=""><br></p><p class="">Stackdriver monitoring provides visibility into the performance of cloud-powered applications. Stackdriver is used to collect metrics, events, and metadata from GCP, Amazon Web Services, hosted uptime and lots of other services that can be used with GCP. Stackdriver collaborates with Slack, PagerDuty, HipChat and other messaging services.&nbsp;</p><p class="">Use Stackdriver to monitor VMs and collect logs from 3rd party apps.</p><p class=""><br></p><p class=""><strong>Setting up Stackdriver</strong></p><p class=""><br></p><p class=""><strong>Create a Compute Engine instance</strong></p><p class=""><br></p><p class=""><strong>Nav menu &gt; Compute Engine &gt; VM Instance</strong></p><p class=""><br></p><p class=""><strong>Create</strong></p><p class=""><br></p><p class="">Fill in the fields with the following information</p><p class=""><strong>Name:</strong> lamp-1-vm</p><p class=""><strong>Region: </strong>us-central1 or asia-south1</p><p class=""><strong>Zone:</strong> us-central1-a or asia south1-a</p><p class=""><strong>Machine type:</strong> n1-standard-2</p><p class=""><strong>Firewall:</strong> Select Allow HTTP traffic</p><p class=""><br></p><p class="">Leave any other fields as default</p><p class="">Click <strong>Create</strong></p><p class="">The VM will be ready when the green check mark appears next to the instance.</p><p class=""><br></p><p class=""><strong>Add Apache2 HTTP Server to the Instance</strong></p><p class=""><br></p><p class="">To the right of the VM, click SSH to open the instances terminal&nbsp;</p><p class="">Set up an Apache2 HTTP Server with the following commands in the SSH window:</p><p class="">sudo apt-get updatesudo apt-get update</p><p class="">sudo apt-get install apache2 php7.0</p><p class="">Press Y to continue&nbsp;</p><p class="">If php7.0 won’t work then use php5</p><p class="">sudo service apache2 restart</p><p class="">In the console, on the VM instances page find the External IP and click the link to see the Apache2 default page.</p><p class=""><br></p><p class=""><strong>Create a Stackdriver account</strong></p><p class=""><br></p><p class="">To use Stackdriver the project must live inside a Stackdriver account.&nbsp;</p><p class="">The following steps will create an account with a free trial period:</p><p class=""><strong>Nav menu &gt; Monitoring</strong></p><p class="">Click NO THANKS to trying the beta version&nbsp;</p><p class="">Stackdriver will be ready when you see the Stackdriver dashboard.</p><p class="">Click <strong>Install Agents</strong> in the top banner. There are commands in the SSH window. Run those commands to install the Stackdriver monitoring agent and logging agent.</p><p class="">The required scripts are below</p><p class=""><em>Monitoring agent install script</em></p><p class="">curl -sSO https://dl.google.com/cloudagents/install-monitoring-agent.sh</p><p class="">sudo bash install-monitoring-agent.sh</p><p class="">A Logging agent does what it sounds like, it logs streams from your VM instances and from selected third-party software packages.&nbsp;</p><p class=""><em>Logging agent install script</em></p><p class="">curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh</p><p class="">sudo bash install-logging-agent.sh</p><p class="">Click <strong>Monitoring Overview</strong> to return to the Dashboard.</p><p class=""><strong>Create an uptime check</strong></p><p class=""><br></p><p class="">Uptime checks verify that resources are accessible. Let’s create an uptime check to verify that the vm is up.</p><p class="">On the Stackdriver console click <strong>Create Check</strong> button on the dashboard.&nbsp;</p><p class="">Select <strong>Uptime Checks</strong> in the left-hand menu</p><p class="">Select <strong>Uptime Checks Overview</strong></p><p class="">Click <strong>Add Uptime Check</strong></p><p class="">Edit the <strong>New Uptime Check</strong> panel by adding the following&nbsp;</p><p class=""><strong>Title:</strong> Lamp Uptime Check</p><p class=""><strong>Check type:</strong> HTTP</p><p class=""><strong>Resource Type:</strong> Instance</p><p class=""><strong>Applies to: </strong>Single, lamp-1-vm</p><p class=""><strong>Path: </strong>leave at default</p><p class=""><strong>Check every: </strong>1 min</p><p class="">Leave any other fields at default</p><p class="">Click <strong>Test</strong> to verify that your uptime check can connect to the resource.</p><p class="">Green check marks indicate that the connection is ready.&nbsp;</p><p class="">Click <strong>Save</strong></p><p class="">When asked about creating an alerting policy click <strong>No Thanks</strong></p><p class="">The uptime check takes awhile to become active. We will create an alerting policy for a different resource while we wait.</p><p class=""><br></p><p class=""><strong>Create an alerting policy</strong></p><p class=""><br></p><p class="">Open the Stackdriver console and refresh the screen</p><p class="">In the left menu, <strong>Alerting &gt; Create a Policy</strong></p><p class="">Next we’ll configure conditions, notifications, and documentation</p><p class="">1. <strong>Conditions</strong>: click <strong>Add Condition</strong></p><p class="">A panel will open, edit the following values, leave all others as default.</p><p class=""><strong>Target:</strong> Start typing “GCE” in the resource type and metric field then select:</p><p class=""><strong>* Resource Type:</strong> GCE VM Instance (gce_instance)</p><p class=""><strong>* Metric:</strong> Type “network” then select Network traffic</p><p class=""><br></p><p class=""><strong>Configuration</strong></p><p class=""><strong>* Condition:</strong> is above</p><p class=""><strong>* Threshold: </strong>500 bytes</p><p class=""><strong>* For: </strong>&nbsp;1 minute</p><p class=""><br></p><p class="">Click <strong>Save</strong></p><p class=""><br></p><p class="">2. <strong>Notifications: </strong>Select <strong>Email Address</strong> then enter your personal email address in the <strong>Email </strong>field</p><p class=""><br></p><p class="">3. <strong>Documentation: </strong>Add a message in documentation, which will be included in the emailed alert</p><p class=""><br></p><p class="">4. <strong>Name the policy:</strong> type in the name <strong>Inbound Traffic Alert</strong></p><p class=""><br></p><p class="">Click <strong>Save</strong></p><p class=""><br></p><p class="">This will create the alert policy. We can create a dashboard and chart and then we will check out logging.&nbsp;</p><p class=""><strong>Create a dashboard and chart</strong></p><p class="">Display metrics collected by Stackdriver Monitoring in your own charts and dashboards. We’ll create charts for the lab metrics and customize our dashboard.</p><p class=""><br></p><p class="">1. In the left-and menu of the Stackdriver Monitoring Console select</p><p class=""><strong>Dashboards &gt; Create Dashboard</strong></p><p class=""><br></p><p class="">2. Click <strong>Add Chart</strong> in the upper right of the screen</p><p class=""><br></p><p class="">3. Click into the <strong>Find resource type and metric</strong> field and start typing “CPU” then select CPU Load (1m).</p><p class=""><br></p><p class="">The GCE VM instance is automatically selected as the Resource type. The chart names itself after the metric you’re using, but we can rename it.</p><p class=""><br></p><p class="">4. Click <strong>Save</strong></p><p class=""><br></p><p class="">Now we will create a second chart.</p><p class=""><br></p><p class="">1. Select <strong>Add Chart</strong> in the upper-right menu of the new dashboard</p><p class=""><br></p><p class=""><strong>Find resource type and metric</strong> field and start typing “Network” then choose “Received Packets”. Leave the other fields with their default values. Chart data will show in the preview section.&nbsp;</p><p class=""><br></p><p class="">2. Click <strong>Save</strong></p><p class=""><br></p><p class="">3. You still need to name your new dashboard. Change <strong>Untitled Dashboard </strong>&nbsp;to “Stackdriver LAMP Qwik Start Dashboard”</p><p class=""><br></p><p class=""><strong>View the Logs</strong></p><p class=""><br></p><p class="">Stackdriver Monitoring and Stackdriver Logging share integrations. We can now view the logs for our lab.</p><p class="">In the Stackdriver left-hand menu, click <strong>Logging</strong> to see the Logs Viewer. Let’s change the focus to see our logs</p><p class="">In the first drop-down menu select GCE VM Instance &gt; lamp-1-vm</p><p class="">Select <strong>syslog</strong> in the second drop-down menu and then click <strong>OK</strong></p><p class="">Leave other fields as their default</p><p class="">Click the <strong>Start streaming logs</strong> icon. It looks like the play button at the top beside Create metric and create export.</p><p class=""><br></p><p class="">Now we can see our logs in the VM instance.</p><p class="">Start and stop the VM to see how this affects the Logs</p><p class="">You can see this in real time if you orient the compute engine console and the Stackdriver logging console are side by side.&nbsp;</p><p class="">In the console, in the VM instance window, click on the lamp-1-vm instance</p><p class="">Click <strong>Stop</strong> at the top of the VM instance details window and then confirm to stop the instance. The instance may take a few minutes to stop.</p><p class="">Watch the Logs view tab for when the VM is stopped.&nbsp;</p><p class="">In the VM instance details window, click <strong>Start</strong>. Confirm.&nbsp;</p><p class="">It will take a few minutes for the instance to restart.</p><p class="">Watch the log messages to monitor the start up.</p><p class=""><br></p><p class=""><strong>Check the uptime check results and triggered alerts</strong></p><p class=""><br></p><p class="">We should be able to see if alerts have been triggered now.&nbsp;</p><p class="">View Stackdriver uptime check results</p><p class="">1. In the let pane, click <strong>Uptime Checks &gt; Uptime Check Overview</strong>. We should now see information about active uptime checks, including web site status.</p><p class=""><br></p><p class="">2. Check the name of the uptime check.</p><p class=""><br></p><p class="">—If <strong>Location results</strong> message outputs “No checks have run yet” then wait a few minutes and refresh the page.</p><p class=""><br></p><p class=""><strong>Check if alerts have been triggered</strong></p><p class=""><br></p><p class="">1. In the Stackdriver console, in the left page click <strong>Alerting &gt; Incidents</strong>. If there are no open incidents then look in the <strong>RESOLVED </strong>tab.</p><p class=""><br></p><p class="">2. Still in the Stackdriver console, click <strong>Alerting &gt; Events</strong>. You should see a number of Events listed.&nbsp;</p><p class=""><br></p><p class="">3. Check your email account. You should see Stackdriver Alerts in your inbox.&nbsp;</p><p class=""><br></p><p class="">This concludes this exercise. Once complete be sure to remove the email notifications from your alerting policy to avoid further emails.&nbsp;</p><p class=""><br></p><p class="">Lab resources may be active for several minutes. You may continue to receive email notifications during that time.</p><p class=""><br></p>]]></content:encoded><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577642756246-VTWF31JCAO4JSGGN7QDV/baseline-infrastructure.png?format=1500w" medium="image" isDefault="true" width="500" height="537"><media:title type="plain">GCP Baseline Infrastructure Quest Notes Part 1</media:title></media:content></item><item><title>Google Cloud Platform (GCP) Essential Shell Commands</title><category>Technology</category><category>Education</category><dc:creator>JP Miller</dc:creator><pubDate>Sun, 22 Dec 2019 23:29:36 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2019/12/22/google-cloud-platform-gcp-essential-shell-commands</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:5dfffc6627eac52da195f350</guid><description><![CDATA[Google Cloud Platform (GCP) Essential cloud shell command lines. These are 
my notes from the GCP Essential Qwik Labs to help you get your VMs, health 
checks and load balancers up and running with GCP’s shell.]]></description><content:encoded><![CDATA[<p class="">This Christmas I’m giving myself the gift of knowledge. The gift that always gives back. </p><p class="">I just completed the GCP Essentials Quest on the Google Cloud Training Platform. Below you’ll find all of my notes. They include the most essential gcloud shell commands for establishing virtual instances, working with Kubernetes and setting up load balancers. </p><p class="">If you’d like to learn more about using the command shell in Google Cloud then it may be helpful to know that the Essentials Quest path involves 5 lessons. Google accounts  come preloaded with 20 credits to take these lessons. Most lessons are worth 1 credit. A credit is valued at one dollar, USD. I earned my badge with plenty of free credits to spare. You can earn a shiny badge like this for yourself at <a href="https://google-run.quiklabs.com" target="_blank">https://google-run.quiklabs.com</a>. (No affiliation, this is just something I’m doing). </p>


































































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg" data-image-dimensions="500x541" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=1000w" width="500" height="541" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=100w 100w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=300w 300w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=500w 500w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=750w 750w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059163614-EOB31706LRAXLY1VLZLY/GCP+Essentials+Badge.jpeg?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class=""><br></p><p class="">Without further delay, here are my notes. Fair warning, it’s not a pretty list. These are my notes, nothing more. That said, steps for spinning up VMs or creating load balancers are written in the correct order of operations as the qwik lessons presented them. </p><p class="">           </p><h2><strong>GCloud scripts</strong></h2><p class="">* List active account name</p><pre><code>gcloud auth list</code></pre><p class="">* List project ID</p><pre><code>gcloud config list project</code></pre><p class="">* create vm instance with gcloud</p><pre><code>gcloud compute instances create [NAME] --machine-type [TYPE] --zone [ZONE]</code></pre><p class="">* gcloud vm instance help</p><pre><code>gcloud compute instances create --help</code></pre><p class="">* Set default zone and region for VM instances</p><pre><code>gcloud config set compute/zone [ZONE]</code></pre><pre><code>gcloud config set compute/region [REGION]</code></pre><p class="">(Example follows):</p><pre><code>gcloud config set compute/zone us-central1-a</code></pre><pre><code>gcloud config set compute/region us-central1</code></pre><p class="">* Default regions and zones can also be set using:</p><pre><code>google-compute-default-zone</code></pre><pre><code>google-compute-default-region</code></pre><p class="">* to see default region and zone settings run</p><pre><code>gcloud compute project-info describe --project [PROJECT ID]&nbsp;</code></pre><p class="">* Enter SSH through gcloud</p><pre><code>gcloud compute ssh [VMNAME] --zone [ZONE]</code></pre><p class="">* Check if a server is ready for RDP connections</p><pre><code>gcloud compute instances get-serial-port-output instance-1 --zone us-central1-a (USE YOUR INSTANCE NAME AND ZONE)</code></pre><p class="">(SERVER IS READY WHEN OUPUT == “Finished running startup scripts”)</p><p class="">* if not in Cloud Shell then gcloud can be installed as part of the Google Cloud SDK with</p><pre><code>gcloud init</code></pre><h2><strong>Set up Environment variables in gcloud</strong></h2><p class="">Env variables define your environment. These can be used to save time when writing scripts that contain APIs and executables</p><p class="">* Project variable ID</p><pre><code>export PROJECT_ID=&lt;your_project_ID&gt;</code></pre><p class="">* Set ZONE env var</p><pre><code>export ZONE=&lt;your_zone&gt;</code></pre><p class="">* Verify correct variables:</p><pre><code>echo $PROJECT_ID</code></pre><pre><code>echo $ZONE</code></pre><p class="">* Create a vm instance w/env vars:</p><pre><code>gcloud compute instances create INSTANCE_NAME --machine-type n1-standard-2 --zone $ZONE</code></pre><p class="">Create your own instance name and use whatever type of machine type you want to use. The $ZONE refers to the zone env. Variable.</p><p class="">* View a list of configurations in your gcloud env</p><pre><code>gcloud config list</code></pre><p class="">* Check that all properties are set:</p><pre><code>gcloud config list --all</code></pre><p class="">* List components</p><pre><code>gcloud components list</code></pre><p class=""><strong>Gcloud help</strong></p><p class="">Get simple usage guidelines with the -h flag. i.e.</p><pre><code>gcloud -h</code></pre><p class="">Obtain verbose help with the --help flag. Or run gcloud help command.</p><pre><code>gcloud help</code></pre><pre><code>gcloud config --help</code></pre><p class="">To scroll through the help use Enter or Spacebar keys.</p><p class="">Exit content with q</p><p class="">q</p><p class="">EQUIVALENT HELP COMMANDS&nbsp;</p><pre><code>gcloud config --help</code></pre><pre><code>gcloud help config</code></pre><p class="">* Shortcut for help toggle: F2</p><p class="">* F2 help changes help STATE, toggle ON or OFF with F2</p><h2><strong>Auto-complete with gcloud prompts</strong></h2><pre><code>glcoud interactive&nbsp;</code></pre><p class="">This sets up auto prompting for commands and flags with inline help snippets.</p><p class="">* Install beta components</p><pre><code>gcloud components install beta</code></pre><p class="">* Enter gcloud interactive mode</p><pre><code>gcloud beta interactive</code></pre><p class="">* When using interactive mode click on the tab key to complete file path and resource args. If a dropdown menu appears use tap to move through the list. Use the Space bar to select a choice.</p><p class="">Test this with:</p><pre><code>gcloud compute instances describe &lt;your_vm_instance_name&gt;</code></pre><h2><strong>Kubernetes Engine on gcloud</strong></h2><p class="">* Create a cluster (start with a letter, end with alphanumeric, &lt; 40 characters) (ignore output warnings, allow time to finish cluster creation)</p><pre><code>gcloud container clusters create [CLUSTER-NAME]</code></pre><p class="">* Get auth reds for the cluster. Required to interact w/cluster.</p><pre><code>gcloud container clusters get-credentials [CLUSTER-NAME]</code></pre><p class="">Output will look like:&nbsp;</p><p class="">`Fetching cluster endpoint and auth data</p><p class="">kubeconfig entry generated for my-cluster`</p><p class="">* Create a new deployment for containerized apps (This uses a premade sample app. Use your own image for realzies)</p><pre><code>kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0</code></pre><p class="">Output in this scenario should be:</p><p class="">`deployment.apps/hello-server created`</p><p class="">* create kubernetes service, a resource to expose app to external traffic.</p><pre><code>Kubectl expose deployment hello-server --type=LoadBalancer --port 8080</code></pre><p class="">--port specifies the port that the container exposes</p><p class="">type=LoadBalancer creates a compute engine load balancer for the container</p><p class="">Should see output:</p><p class="">`service/hello-server exposed` (and it’s no big surprise…)</p><p class="">* Inspect the hello-server service with kubectl get</p><pre><code>kubectl get service</code></pre><p class="">* If external IP column is ‘pending’ then try again after 60 seconds</p><p class="">* To view app, copy the external IP address and enter:</p><p class="">http://[EXTERNAL-IP]:8080</p><p class="">* to delete a cluster:</p><pre><code>gcloud container clusters delete [CLUSTER-NAME]</code></pre><p class="">* Type Y when prompted to confirm delete. Deleting can take a couple minutes.</p><h2><strong>Creating Web Server Instances</strong></h2><p class="">Write a script to create Nginx web server clusters&nbsp;</p><p class="">In the shell create a startup script that will be used by every virtual machine instance. This script will set up an Nginx server upon startup:</p><pre><code>cat &lt;&lt; EOF &gt; startup.sh</code></pre><pre><code>#! /bin/bash</code></pre><pre><code>apt-get update</code></pre><pre><code>apt-get install -y nginx</code></pre><pre><code>service nginx start</code></pre><pre><code>sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html</code></pre><pre><code>EOF</code></pre><p class="">Next create an instance template that will use the startup script</p><pre><code>gcloud compute instance-templates create nginx-template \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --metadata-from-file startup-script=startup.sh</code></pre><p class="">You’ll get an output showing the that template was created.&nbsp;</p><p class="">Next thing to do is create a target pool. This allows a single access point to all instances in a group. It’s required for load balancing. At least the way we’re doing it here.</p><pre><code>gcloud compute target-pools create nginx-pool</code></pre><p class="">You’ll get an output confirming the target pool.</p><p class="">Next you’ll create a managed instance group using that instance template.</p><pre><code>gcloud compute instance-groups managed create nginx-group \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --base-instance-name nginx \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --size 2 \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --template nginx-template \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --target-pool nginx-pool</code></pre><p class="">You’ll then receive an output confirming the MIG (managed instance group)</p><p class="">This example creates two VMs with names prefixed with “nginx-“. Allow time for VMs to spin up.</p><p class="">You can see these by listing the compute engine instances:</p><pre><code>gcloud compute instances list</code></pre><p class="">Next we configure a firewall. This allows us to connect the machines to port 80 using the EXTERNAL_IP. (External_IP is derived from compute instance list output)</p><pre><code>gcloud compute firewall-rules create www-firewall --allow tcp:80</code></pre><p class="">Open your favorite browser (I use Brave) and check out the instance via http://[EXTERNAL_IP/	</p><h2><strong>Create a network load balancer</strong></h2><p class="">Create a L3 network load balancer that targets the instance group</p><pre><code>gcloud compute forwarding-rules create nginx-lb \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --region us-central1 \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --ports=80 \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; --target-pool nginx-pool</code></pre><p class="">Output will confirm&nbsp;</p><p class="">* List all Google compute engine forwarding rules in the project:</p><pre><code>gcloud compute forwarding-rules list</code></pre><p class="">Visit the load balancer from a browse using the IP_ADDRESS.</p><p class="">http://IP_ADDRESS/</p><h2><strong>Create an HTTPS Load Balancer</strong></h2><p class="">* Create a health check</p><pre><code>gcloud compute http-health-checks create http-basic-check</code></pre><p class="">Output will confirm creation.</p><p class="">Define an HTTP Service and map a port name to the instance group. Once created, the load balancer will forward traffic to the named port.</p><pre><code>gcloud compute instance-groups managed \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; set-named-ports nginx-group \</code></pre><pre><code>&nbsp;&nbsp; &nbsp; &nbsp; --named-ports http:80</code></pre><p class="">Output will confirm</p><p class="">Create a back-end service:</p><pre><code>gcloud compute backend-services create nginx-backend \</code></pre><pre><code>&nbsp; &nbsp; &nbsp; --protocol HTTP --http-health-checks http-basic-check --global</code></pre><p class="">Output will confirm</p><p class="">* Add the instance group into the backend service:</p><pre><code>gcloud compute backend-services add-backend nginx-backend \</code></pre><pre><code>&nbsp; &nbsp; --instance-group nginx-group \</code></pre><pre><code>&nbsp; &nbsp; --instance-group-zone us-central1-a \</code></pre><pre><code>&nbsp; &nbsp; --global</code></pre><p class="">Create a default URL map that directs all incoming requests to all instances:</p><pre><code>gcloud compute url-maps create web-map \</code></pre><pre><code>&nbsp; &nbsp; --default-service nginx-backend</code></pre><p class="">Output will confirm</p><p class="">Create a target HTTP proxy to route requests to URL map</p><pre><code>gcloud compute target-http-proxies create http-lb-proxy \</code></pre><pre><code>&nbsp; &nbsp; --url-map web-map</code></pre><p class="">Output will confirm</p><p class="">Create a global forwarding rule to handle and route incoming requests. Note that the global forwarding rule does not support multiple ports.</p><pre><code>gcloud compute forwarding-rules create http-content-rule \</code></pre><pre><code>&nbsp; &nbsp; &nbsp; &nbsp; --global \</code></pre><pre><code>&nbsp; &nbsp; &nbsp; &nbsp; --target-http-proxy http-lb-proxy \</code></pre><pre><code>&nbsp; &nbsp; &nbsp; &nbsp; --ports 80</code></pre><p class="">Several minutes may be required for configurations to propagate.</p><p class="">List with:</p><pre><code>gcloud compute forwarding-rules list</code></pre><p class="">Connect in a web browser using the IP_ADDRESS</p><p class="">These things can take 3 - 5 minutes to go live.</p><h2><strong>Enter SSH through gcloud with env variables</strong></h2><p class="">* Create a wrapper around SSH to handle auth and mapping of instance names to IP addresses</p><pre><code>gcloud compute ssh VM_INSTANCE_NAME --zone $ZONE</code></pre><p class="">* Type “y” to continue after warning, follow prompts</p><p class="">* Exit SSH with:</p><p class="">exit</p><h2><strong>The gcloud HOME directory</strong></h2><p class="">The home dir persists always across projects between all Cloud Shell sessions with 5GB of storage</p><p class="">* Change current working dir</p><pre><code>cd $HOME</code></pre><p class="">* Open .bashrc config file using the vi text editor:</p><pre><code>vi ./.bashrc</code></pre><p class="">This will open and display the contents of the file. To exit, press the ESC key and then “:wq” to exit editor</p><p class="">ESC</p><pre><code>:wq</code></pre><h2><strong>SSH commands and scripts</strong></h2><p class="">* Get root access using sudo&nbsp;</p><pre><code>sudo su -</code></pre><p class="">* update OS</p><pre><code>apt-get update</code></pre><p class="">* install NGINX (establish NGINX on GCP VM Instance</p><pre><code>apt-get install nginx -y</code></pre><p class="">* Check that NGINX is running </p><pre><code>ps auwx | grep nginx</code></pre><p class=""> </p><p class="">Now that I’ve completed GCP Essentials I’ll move on to the Baseline Infrastructure Quest.</p><p class="">This link is to a Create a load balancer YouTube tutorial (I haven’t watched it all the way through but it looks promising)</p><p class=""><a href="https://www.youtube.com/watch?v=Gn7pGQYkKnA">https://www.youtube.com/watch?v=Gn7pGQYkKnA</a></p>]]></content:encoded><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1577059361275-42QXOLXCVNL3043R0Y8T/GCP+Essentials+Badge.jpeg?format=1500w" medium="image" isDefault="true" width="500" height="541"><media:title type="plain">Google Cloud Platform (GCP) Essential Shell Commands</media:title></media:content></item><item><title>IPND - Marching Forward</title><category>Education</category><dc:creator>JP Miller</dc:creator><pubDate>Thu, 23 Jul 2015 13:31:27 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/21/ipnd-marching-forward</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55aeff55e4b081a3c7d20ad4</guid><description><![CDATA[<p>The weekend's experiment was a bust. A good experience, but the IPND is too robust to be properly completed in a mere 72 hours. That's good news for students. The portfolio projects themselves may be able to be completed in that kind of a time frame, but then the meat of the nanodegree is missed. So I'm adjusting my goal to one project per week.&nbsp;</p><p>Stage 2: Work Session 4:</p><p>Working on systematically breaking down a problem. Going to take an input of "TITLE:" and "DESCRIPTION:" and we want it to look like</p><pre>&lt;div class="concept"&gt;
&lt;div class="title"&gt;
title 1
&lt;/div&gt;
&nbsp; &lt;div class="description"&gt;
&nbsp; description 1
&nbsp; &lt;/div&gt;
&lt;/div&gt;</pre><p dir="ltr">A function is needed to convert the input to the desired output. Break big problems down into smaller parts. Create solutions to the small problems then tie it all together. The function that we create will accept a second input for the HTML. Sometimes working backwards from what you know you can do is easier.&nbsp;</p><p dir="ltr">For this particular problem we're going to create a function called get_concept_by_number that will take the input and break it into TITLE and DESCRIPTION by number. Then we'll create two functions, one will get_title and the other will get_description. We'll use the get_title and get_description outputs in a function called generate_concept_HTML. This will output the HTML!</p><p dir="ltr">2.6 Structured Data: Lists &amp; For Loops</p><p dir="ltr">Introduction to an object called a&nbsp;<strong>list.</strong>&nbsp;</p><p dir="ltr">A string is structured data because it can be broken down into its characters. In a string a sequence of characters is contained within quotes. In a List characters are contained in an array (square brackets) and separated by commas. Lists can be accessed using square brackets and numbers. i.e. p[0] or p[2,4]. This second call will return a list of elements.</p><p dir="ltr">Lists can call subs of subs so if you have a list of countries</p><p dir="ltr"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name &nbsp; &nbsp;Capital &nbsp;Populations (millions)<br />countries = [['China','Beijing',1350],<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;['India','Delhi',1210],<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;['Romania','Bucharest',21],<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;['United States','Washington',307]]</p><p dir="ltr">To call Delhi type: print countries[1][1] and it will print the 1 item in the 1 list, 'Delhi'</p><p dir="ltr">If we want to know how many times greater China's population is to Romanias we can type:</p><p dir="ltr">print countires[0][2] / countries[2][2] and python will do that math.</p><p dir="ltr">#floored</p><p dir="ltr">Lists work by using two concepts: Mutation and Aliasing.</p><p dir="ltr">Lists support Mutation (yes they are a friend to the X-Men). This means the value of a list can be changed after it has been created</p><p dir="ltr">That's enough for this post..</p><p dir="ltr"> </p><p dir="ltr"> </p>]]></description></item><item><title>IPND in Three Days or Bust - Wrapping up Project 2</title><category>Education</category><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Mon, 20 Jul 2015 06:05:22 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/19/ipnd-in-three-days-or-bust-wrapping-up-project-2</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55abb9d6e4b05f2993b11afe</guid><description><![CDATA[<p>Received my Project 1 submission at 1:09 am, but an little error on my part caused it to return. I tried to make on ordered list a child to a paragraph, and that is not allowed. Fixed a couple other things. The project is on GitHub at https://www.github.com/thechronicmonster if interested.</p><p>Sunday 7/19 9:58 am</p><p>Working on a procedure to decide if a day is a weekend or not. It looks something like this:</p><pre>def weekend(day):
if day[0] == "S" and day[-3:] == "day":
return True
else:
return False</pre><p>Using While Loops to create a countdown to blastoff:</p><pre>def countdown(x):
while x &gt; 0:
print x
x = x - 1
if x == 0:
print "Blastoff!"</pre><p>Another solution to the find the biggest among three numbers is embed a function within a function (not quite recursive, these are two different functions).</p><pre>def bigger(a,b):
if a &gt; b:
return a
else:
return b
def biggest(a,b,c):
return bigger(a,bigger(b,c))</pre><p>Today was derailed by a dehydrated bunny trapped in the garage. Thankfully the poor mammal decided to quit hiding and laid down near the doorway. I think we successfully nursed it back to its habitat, but the stress of seeing that little creature in such straights really capitalized my attention, today. Plus, the monster came back so once the bunny was satiated the monster became the center of attention. So, after an hour long bike ride/playground break and one and one-half&nbsp;gatorades I am now ready to take on Work Session 4 before calling it a night.</p><p>Time to work on creating a median finding function...</p><p>8:45 pm</p><p>It is now 10:51 pm and I have come up with a (probably terrible) solution to finding a median number given three numbers. So excited.</p><p>I started with the bigger and biggest functions and created mirrored smaller and smallest functions. My thought was if I don't know how to pick out the median I do know how to pick which numbers aren't the median. This works for three number medians. Once we take this problem to the next level my little solution breaks...but we're celebrating. The problem I ran into was when two of the inputs were the same so I created a function same that takes three inputs and checks if any inputs are the same and returns the double input. It looks like this:</p><pre>def same(a,b,c):
if a == b or a == c:
return a
if b == c:
 return b

def median(a,b,c):
x = smallest(a,b,c)
y = biggest(a,b,c)
z = same(a,b,c)
if z != None:
return z
if a != x and a != y:
return a
if b != x and b != y:
return b
if c != x and c != y:
return c
if a == x and a != y:
 return a
if b == x and b != y:
 return b
if c == x and c != y:
return c</pre><p dir="ltr">Modular code: code that separates the data from its visual presentation such that one may be changed without effecting the other.&nbsp;</p><p dir="ltr">Best practices for writing code:</p><ol dir="ltr"><li>Break a big task into smaller pieces</li><li>use functions that have already been written</li><li>write new functions to solve pieces of the bigger problem</li><li>put the pieces together to solve the bigger problem</li></ol><p>Systems thinking can be accomplished in a 5 step process:</p><ol dir="ltr"><li>Understand the requirements of a problem. i.e. what are the inputs and what should the outputs be</li><li>Plan an approach to solve the problem</li><li>re-familiarize yourself with code that you've wrote so that it may be useful in solving the problem.</li><li>Write new code to solve the other pieces of the problem</li><li>Put all the pieces together.</li></ol><p> </p>]]></description></item><item><title>IPND in Three Days or Bust - Project 2 Continued</title><category>Education</category><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Sun, 19 Jul 2015 02:54:53 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/18/ipnd-in-three-days-or-bust-project-2-continued</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55aae5f9e4b0ea19042deeb3</guid><description><![CDATA[<p>Back from my break, enjoying&nbsp;<em>Men Amongst Mountains</em>&nbsp;by&nbsp;<strong>The Revivalists</strong>. Check them out on iTunes, buy their new album. Support great artists.</p><p>And we're back from our sponsors (joking). We left off with Work Session 3 and are now ready to jump into 2.4: Control Flow &amp; Loops: If and While. Very important skills for the developer to have in her pocket protector...</p><p>6:52 pm</p><p>While loops operate WHILE a parameter is true. If statements run code depending on certain parameters. If statements are often united with if else and else statements.</p><p>If, else statements look something like this in Python:</p><pre>if (some code here):
 print/return (or do something other than print)
else:
 print/return (something else)</pre><p dir="ltr">writing if functions to check for letters in strings and greater than/lesser than problems..and am now being warned of a Collatz conjecture problem. Sounds like a smart mathematician.&nbsp;</p><p dir="ltr">Remember when testing with booleans that True and False begin with capital letters..</p><p dir="ltr">7:28 pm</p><p dir="ltr">challenging quiz to create a program that will take three numerical parameters and output the biggest. Sounds like a fun challenge using if/else statements.</p><p dir="ltr">7:47 pm</p><p dir="ltr">I have grown greatly as a programmer in the past eight months. Solved what Dave classified as a gold star problem in ten minutes. So there's a word of hope for new programmers struggling through understanding. You will achieve your goals, even if it does require some amount of mental frustration.</p><p dir="ltr">8:22&nbsp;</p><p dir="ltr">Dave says that all programs can be wrote with arithmetic comparisons and functions (procedures) and if statements. That's quite a profound statement. There are other tools that make programming a bit simpler, I'm assuming, but what a statement to say these three things can accomplish all things in a program.</p><p dir="ltr">While loops syntax looks like:</p><pre dir="ltr">i = 0
while i != 10:
i = i+1
print i</pre><p dir="ltr">Alright, wrapped up 2.4 and can now (technically) write any code in the world...I think it's true. I know just enough to be dangerous.</p><p dir="ltr">8:52 pm</p><p dir="ltr">Forward to 2.5: Debugging</p><p dir="ltr">Bugs, it's a programmer's life.</p><p dir="ltr">I'm not sure who's Andy's partner in Debugging, but he's a natural comedian.&nbsp;</p><p dir="ltr">Best explanation of Git I've ever heard: "Basically a big undo button."</p><p dir="ltr">Debugging strategy recap for those (me included) wondering what I've learned</p><ol dir="ltr"><li>Examine error messages when programs crash (called a Traceback in Python)</li><li>Work from example code (copy and paste what works and play till it breaks)</li><li>Make sure examples work&nbsp;</li><li>Check (print) intermediate results (remember to remove print statements after debugging)</li><li>Keep and compare old versions (Use a VCS like Github for greater freedom in coding)</li></ol><p>9:46 pm</p><p>That wraps up 2.5, Work Session 4 up next..</p><p>My brain has had it for awhile so that's it.</p><p>9:53 pm</p>]]></description><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1437274469104-KTPDCBAPZVL4P9MLE3E7/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="197" height="200"><media:title type="plain">IPND in Three Days or Bust - Project 2 Continued</media:title></media:content></item><item><title>IPND in Three Days or Bust - Project 2</title><category>Education</category><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Sat, 18 Jul 2015 22:58:01 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/18/ipnd-in-three-days-or-bust-project-2</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55aa7d00e4b01127a128f016</guid><description><![CDATA[<p>Project 2 involves creating some Python code to generate html for me. This sounds exciting. I've only played around with Python a handful of times so this will be new territory for me. Very exciting!</p><p>11:22am</p><p>Python code is saved with the extension of .py</p><p>Running Python on a Mac is super simple. Open the terminal and type "python" press return and bam. Python running on the mac. To write code that you can save simply open your favorite IDE (I like atom 1.0 or sublime 3) and save your file with extension .py.</p><p>In Project 2 I'll learn how to use variables effectively and how to write functions to do repetitive work...we'll let's say review. I've been here before.</p><p>Informed it's time to clean the house...this may take awhile..</p><p>11:33 am</p><p>Back in the seat! 1:10 pm</p><p>Working through Introduction to Computer Science courses. I've taken this course in the past. Dave breaks down the basics into very simple concepts. In my experience, Udacity courses have been spot-on about 95% of the time.&nbsp;</p><p>Computers enable making repetitive steps at incredible speeds.&nbsp;</p><p>Some examples of the methods of thinkings:</p><p>Procedural thinking...follows instructions&nbsp;in code</p><p>Technological empathy as to how the computer interprets the code</p><p>Abstract thinking when conceptually understanding that a Python program, Python interpreter and web browser are different versions of the same thing (a program).</p><p>Natural languages can be full of ambiguity and verbosity. Computer programs must be precise and concise. This is why computer languages exist and computers do not operate in English or Mandarin or some other human language.</p><p>However, Python and other programming languages have grammar rules that must be followed. We call that syntax.</p><p>Backus-Naur Form helps humans write in language that computers can interpret.&nbsp;</p><p>Expression is something that has a value. Python follows the grammatical&nbsp;structure of Arithmetic expressions is&nbsp;Expression Operator Expression</p><p>On to Stage 2: Work Session 1</p><p>1:36 pm</p><p>Pulled away again right after last post...Back on for another three hours of uninterrupted study time. Had to pick up&nbsp;<strong>The Revivalists</strong>&nbsp;new Album&nbsp;<em>Men Amongst Mountains</em>, first though. Just released yesterday. I've been listening to these guys nonstop and have to support them on their debut weekend.</p><p>Back to the Mighty Python...3:27 pm</p><p>Wrapped up 2.1 and the work session 1 with some syntax quizzes in Python. Moving on to 2.2 Variables and Strings</p><p>So, now we're talking about variables. A Variable is an assigned expression that can be changed.</p><p>An Assignment Statement i.e. Name = Expression, assigns an expression to a variable.</p><p>Moving on to strings. Strings can be printed using " " or ' ', double or single quotes. Strings can be concatenated with the operator +.</p><p>Strings can be sequenced using square brackets [].</p><p>Strings are 0-based so that the first letter begins at the number 0 and moves forward from there. For example:</p><pre dir="ltr">name = JP
print name[0]
will print J</pre><p dir="ltr">You can also print a range of letters using the colon : as in&nbsp;</p><p dir="ltr">print word[3:6] this will print the fourth to the sixth&nbsp;letters in the word. Remember, strings are 0-based so the first letter is counted as zero. Negative numbers can be used in the square brackets. Negative numbers count from the end of the string.</p><p dir="ltr">Words in strings can be found using the method .find.&nbsp;</p><p dir="ltr">string.find('word-in-string') will print the character at which the search term begins.</p><p dir="ltr">A return of -1 means that the string was not found.</p><p dir="ltr">Strings are case sensitive.</p><p dir="ltr">4:05 pm</p><p dir="ltr">More vocab:</p><p dir="ltr">Parameters are values or numbers that go inside parentheses. Parameters can help you find specific points within a string...in the case of finding strings. They have other uses too..Specifically with the .find method the first parameter will be a letter or phrase and the second parameter can be a number. This number tells the method at which character it should begin looking for the first parameter.</p><p dir="ltr">Wrapped up 2.2 looking at how these parameters effect strings.</p><p dir="ltr">4:17 pm</p><p dir="ltr">On to Stage 2: Work Session 2..</p><p dir="ltr">Apparently triple double or single quotes can be used to print multiple line strings. That's a new one for me.</p><p dir="ltr">Work session 2 involves some fun string .find-ing quizzes</p><p dir="ltr">5:02 pm</p><p dir="ltr">2.3 moves on to Functions (or procedures). I am constantly misspelling function...not good when working in object oriented programming.</p><p dir="ltr">Python functions are linked to the keyword "def" and "return" breaks the function and computes a result..parameters here are called inputs, sometimes parameters are also called operands.</p><p dir="ltr">I'm thinking that def stands for defined. So, function defined as...</p><p dir="ltr">syntax of a python function looks something like</p><pre dir="ltr">def functionName(parameter):
return parameter do something

print functionName(value of parameter)</pre><p dir="ltr">Finished up 2.3 and will go through the next work session before taking a short break.</p><p dir="ltr">5:41 pm</p><p dir="ltr">The final quiz begins walking your through the process of using Python to create HTML. This is going to be really cool, and it's a skill I can't wait to master. Absolutely brilliant to write a program to create more programs for you. I suppose, though, that this is the idea behind AI technology. Create the AI program and it can create on it's own...but that is for another course, and one that is available on Udacity, as a matter of fact. But that's all for me for about an hour or so.</p><p dir="ltr">5:57 pm</p>]]></description><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1437252778936-9BO6RWA9HRX6KCET3L9W/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="197" height="200"><media:title type="plain">IPND in Three Days or Bust - Project 2</media:title></media:content></item><item><title>IPND, Three Days or Bust - Finishing Project 1</title><category>Education</category><dc:creator>JP Miller</dc:creator><pubDate>Sat, 18 Jul 2015 16:20:06 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/18/ipnd-three-days-or-bust-finishing-project-1</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55aa55bee4b037ce0adea761</guid><description><![CDATA[<p>It's a bright and beautiful morning. Enjoyed a relaxing child-free evening and am ready to take on today. Starting things off properly with a hearty breakfast; brain power is important, and I'll be pushing through Project 1. I like that the nanodegree&nbsp;prompts note taking. Studies have shown that to be a powerful part of learning...</p><p>Saturday, 7/18/15 8:38 am&nbsp;</p><p>An overview of CSS</p><p>CSS is code written to control the style of HTML elements</p><p>Cascading Style Sheets</p><p>Style can refer to elements, attributes, the general look of a page or a verb. i.e. "I must style this page."</p><p>Rule: a line of CSS code describing the value that a certain attribute should take</p><p>Property: The property you want to change</p><p>Value: The value that you want to assign to the attribute</p><p>Selector: The name that you use to in order to target the elements that are assigned to a class or id attribute in the HTML</p><p>Class: A class refers to a group of elements that can be styled together. Class names should not contain periods or any other punctuation marks such as class="1.1"</p><p>ID: ID's are unique identifiers that uniquely identifies an element in HTML</p><p>Best practice for linking CSS to HTML: Link the CSS in the head of the document. (Style commands can also be inserted directly into the HTML, usually for web optimization purposes, but that's a more advanced subject.</p><p>&lt;link rel="stylesheet" href="main.css"&gt;</p><p>Inline style looks something like:</p><p>&lt;div style="background-color: red; color: white"&gt;</p><p>&lt;/div&gt;</p><p>Excellent discussion on Divs, Spans, Classes here:&nbsp;<a href="https://discussions.udacity.com/t/stage-1-webcasts/16000">https://discussions.udacity.com/t/stage-1-webcasts/16000</a></p><p>Important notes on "Boxes" in HTML elements</p><ol dir="ltr"><li>HTML elements are boxes and each box has 4 components</li><li>Getting boxes 'just right' can be challenging</li><li>Two techniques are available to help with sizing issues<ol dir="ltr"><li>Set sizes in terms of percentages rather than pixels (px)</li><li>Set the ```box-sizing``` attribute to ```border-box``` for every element.<ol dir="ltr"><li>``` * { box-sizing: border-box; } ```</li></ol></li></ol></li><li>Different browsers work differently. This can act the same code to act different in each browser<ol dir="ltr"><li>Negate that using Reset CSS or NormalizeCSS</li><li><a href="http://necolas.github.io/normalize.css/">http://necolas.github.io/normalize.css/</a></li></ol></li></ol><p>Box Positioning:</p><ol dir="ltr"><li>Divs are block elements (as opposed to inline), so by default they take up the entire width of a page.</li><li>Adding the rule ```display: flex;``` to the appropriate CSS will override this behavior and let divs appear next to each other.</li></ol><p>9:10 am</p><p>Code, Test, Refine (The principle behind engineering)</p><ol dir="ltr"><li>Look for natural boxes</li><li>Look for repeated styles &amp; semantic elements</li><li>Write the HTML</li><li>Apply Styles from Biggest to smallest</li></ol><p>Going to dive into creating a table of contents and CSS styles for Stage 1 submission.</p><p>9:25 am</p><p>HTML looks good, time to start Styling..</p><p>10:33 am</p><p>Finished up CSS. Looks good. Brief interruption and twenty minutes uploading to GitHub (my Git skills are still in the early ability stages) and ready to submit Project 1. Woot Woot!</p><p>On to Stage 2: Automate Your Page</p><p>11:19 am</p>]]></description><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1437236394769-VCOIKG34LI1SOW2T2WGN/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="197" height="200"><media:title type="plain">IPND, Three Days or Bust - Finishing Project 1</media:title></media:content></item><item><title>IPND in three days or bust - Stage1</title><category>Education</category><dc:creator>JP Miller</dc:creator><pubDate>Sat, 18 Jul 2015 00:10:15 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/17/ipnd-in-three-days-or-bust-stage1</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55a97a08e4b0b69fc5aed252</guid><description><![CDATA[<p>Made a quick chicken cutlet for dinner and onto the orientation. Very basic entry requirements. Know the internet and interested enough to Google the things you don't know.</p><p>5:08 pm</p><p>Quick introduction with Miriam - she rocks as a community organizer. Very friendly and makes the nuts and bolts of the nanodegree as easy as possible.</p><p>Here's something new, in the forums (does this work in SquareSpace?) enter three backticks ``` and the type of code to create markup...the backtick is by the tilda on the upper left of your keyboard.</p><p>```html</p><p>&lt;b&gt;mark me up &lt;em&gt;baby!&lt;/em&gt;&lt;/b&gt;</p><p>```</p><p>guessing that's not going to show as grey-back-field markup...</p><p>Accepting the honor code...</p><p>5:14 pm</p><p>Shout out to Dawoon...All hail...warning to work on the degree a little bit every day (2 hours per day, 10 hours per week). A great blog post on Acing Your Online Course:&nbsp;<a href="http://blog.udacity.com/2014/09/top-study-tips-for-online-courses.html">http://blog.udacity.com/2014/09/top-study-tips-for-online-courses.html</a></p><p>Orientation complete</p><p>5:18 pm</p><p>Moving forward ...very slowly...Last day of registration. I imagine the Udacity servers are working over-time.</p><p>On to How Learning to Code Works</p><p>We all begin learning at the stage of&nbsp;<strong>complete novice</strong>. By the time one is an expert one asks, "Why was this ever hard?" ha! ain't it the truth..</p><p>Asked to think of something I'm an expert in...I chose raising a toddler then laughed at myself. That's not true, so I'm settling on changing a diaper. Fairly decent at that task at this point in my life.</p><p>Moving through the stages of expertise from Ignorance, awareness, ability to fluency.</p><p>Andy speaking on the inevitable frustration of learning to program. #truth Avoid frustration turning into confusion, despair, terror...or other awful emotions.&nbsp;</p><p>Project0 just came back. Reviewed in less than one hour (give or take). That's very awesome, especially for new students completely unfamiliar with coding! Udacity really focuses on their students. I may sound like a fanboy, and I am, but I've also seen the tweaks in the system first hand. This is a very adaptable company and they work hard to give students the best experiences possible.</p><p>Finished How Learning to Code Works...now on to Stage1.</p><p>5:38 pm</p><p>Two reasons why we code, as stated by Andy, and reasons I completely agree with.</p><p>For the thrill of writing code to tell a computer what to do and then watching the computer actually do it.</p><p>Because we hate repetition</p><p>Finished Introduction to Stage1...now on to 1.1 The basics of Web and HTML...this is actually the first lesson with Steve all over again.&nbsp;Great if you're a student who may have got busy for a week and need a refresher. I just completed this so moving on to 1.2</p><p>5:50 pm</p><p>1.2 Creating a structured document.</p><p>Best to work through the videos with the instructors of this piece...</p><p>Let's take some notes here:</p><ol dir="ltr"><li>HTML and CSS (and JavaScript) are programming languages</li><li>HTML controls the structure of the Web page</li><li>CSS controls the style of the page. Thus Cascading Style Sheets</li><li>The DOM or document object model refers to the tree-like structure of a page</li></ol><p>Took a quick stand up and sit down break. About 45 minutes left for today's work...</p><p>6:14 pm</p><p>Basically, HTML is the structure of the website, CSS puts on the color and makes it look pretty, and JavaScript gives the site functionality. The DOM is defined as a cross-platform and language-independent convention for representing and interacting with objects in HTML. The nodes of every document are organized in a tree structure, called the DOM tree.</p><p>Favorite word of the day, "Boxify"</p><p>laughing out loud, seriously. 6:22</p><p>The program recommends Sublime 2, but I've moved onto GitHub's Atom 1.0 now. Open source driven. It's going to surpass Sublime's functionality&nbsp;in a matter of months.</p><p>Finished 1.2 and now on to the first work session.</p><p>6:31 pm</p><p>Added notes to Stage0 html. Wrapping up for a few hours.</p><p>7:09 pm</p><p> </p>]]></description><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1437178193283-JMRL19YRWFN0LEVS8YUX/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="197" height="200"><media:title type="plain">IPND in three days or bust - Stage1</media:title></media:content></item><item><title>This weekend's experiment - IPND in three days or bust - Stage0</title><category>Education</category><dc:creator>JP Miller</dc:creator><pubDate>Fri, 17 Jul 2015 21:53:37 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/17/this-weekends-experiment</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55a94ddce4b0ca41a09f555b</guid><description><![CDATA[<p>Today I embark on an experiment. I've completed the front-end nanodegree with Udacity, but have had no formal computer science training or education in the past. I want to be sure my new career is on a firm foundation, so even if this is a step back, I'm enrolling in the Intro to Programming nanodegree with the goal of completing it over one monster-free weekend.</p><p>Wish me luck.</p><p>July 17 1:49 CDT</p><p>Signed up to CodePen's free service and checked out scratchpad.io. Both very similar to jsFiddle.net. Very basic, friendly for people who have done nothing on the internet put open a browser...even if that browser is IE.</p><p>1:58 pm</p><p>Five methods of Thinking</p><p>Procedural Thinking - clear and unambiguous instructions that follow a linear path</p><p>Abstract Thinking - finding generality (similarity) amongst seemingly different&nbsp;things</p><p>Systematic Debugging - process of relentlessly identifying the cause of a comp program failure This involves a four step process:</p><ol dir="ltr"><li>Collect evidence (what makes the program fail?)</li><li>Generate theories (what may have caused this problem?)</li><li>Test those theories (if my theory is correct, how could I find out?)</li><li>Fix the problem.</li></ol><p>Technological Empathy - understanding how the computer operates, what it is good and bad at</p><p>Systems Thinking - breaking big problems down into smaller component pieces</p><p>2:15</p><p>Just about anyone can learn just about anything. The brain is incredibly flexible. With the proper inputs you can physically change the brain.</p><p>Finished the introduction</p><p>2:22 pm</p><p>Took an hour break, unloaded monster into grand monster mother's care. Opened a celebratory beverage and back, hopefully without further distractions for some time.</p><p>3:20 pm</p><p>Some basic terms:</p><p>World Wide Web - collection of HTML documents&nbsp;</p><p>HTML - hypertext markup language</p><p>hyperlinks - connects HTML pages (makes the internet web like)</p><p>Servers - Computers that&nbsp;host files that make up content on web.&nbsp;</p><p>Computers access servers for their files.&nbsp;</p><p>HTTP - the main protocol of the web</p><p>Internet -&nbsp;The world's largest computer network</p><p>Browser - A program that runs on your computer to display files found on the web</p><p>HTML is made up of many things including:</p><ol dir="ltr"><li>text content (what you see)</li><li>markup (what it looks like)</li><li>references to other documents (images, videos...)</li><li>links to other pages</li></ol><p>...Some reasonably straightforward html quizes</p><p>3:38 pm</p><p>And a jab at everyone's favorite browser to hate..hahaha</p><p>HTML Attributes - &lt;tag attr="value"&gt; content &lt;/tag&gt; attributes&nbsp;always equal a value</p><p>&lt;a&gt; anchor tag is&nbsp;very&nbsp;common - links attribute href to value of website.</p><p>&lt;img&gt; image tag uses attribute src, linked to url value to show an image. Use alt tag with text content incase link to image is broken, or user is visually handicapped. &lt;img&gt; is called a void tag; it requires no closing tag.</p><p>Very simple html quizzes...</p><p>There are <strong>inline</strong> and <strong>block</strong> elements. Block elements actually create "invisible boxes" around their content. Piece on difference in block and inline elements:&nbsp;<a href="http://www.impressivewebs.com/difference-block-inline-css/">http://www.impressivewebs.com/difference-block-inline-css/</a></p><p>Some inline elements include a, span, br, img, strong</p><p>Block elements include div, p, form</p><p>4:05 pm</p><pre dir="ltr">Basic HTML Document
&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt; content &lt;/title&gt; (displays in browser tag)
&lt;head&gt;
&nbsp; &lt;/head&gt;
&lt;body&gt;
&lt;b&gt;content&lt;/b&gt;
&lt;/body&gt;
&lt;head&gt;
&lt;/html&gt;</pre><p dir="ltr">Finishing up basics of web and html with Steve...</p><p dir="ltr">4:14 pm</p><p dir="ltr">Push together some quick notes from above into an html file for Project 0. -If you've played enough video games or watched too many movies I assure you, it's less mysterious than it sounds.</p><p dir="ltr">Stage0 complete and sent off. Post this feed and on to the next.</p><p dir="ltr">4:49 pm</p>]]></description><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1437169951325-R5MRIB19V4RE6198UTNE/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="197" height="200"><media:title type="plain">This weekend's experiment - IPND in three days or bust - Stage0</media:title></media:content></item><item><title>Get Your Daily Recommended Dose of Screen Time</title><category>Lifestyle</category><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Wed, 08 Jul 2015 16:24:50 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/8/screen-time</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:559cb524e4b00fd9fdefc719</guid><description><![CDATA[Children and adults are spending more time in front of screens then ever 
before. How is this going to effect our culture?]]></description><content:encoded><![CDATA[<p>Read just about any pediatric study concerning screen time and you're bound to be told that our <a target="_blank" href="http://well.blogs.nytimes.com/2015/07/06/screen-addiction-is-taking-a-toll-on-children/?mabReward=A3&amp;moduleDetail=recommendations-0&amp;action=click&amp;contentCollection=The%20Upshot&amp;region=Footer&amp;module=WhatsNext&amp;version=WhatsNext&amp;contentID=WhatsNext&amp;configSection=article&amp;isLoggedIn=false&amp;src=recg&amp;pgtype=article">children are addicted to screens</a>.&nbsp;Reports also indicate that&nbsp;the majority of children are spending too much time in front of screens and not enough time&nbsp;interacting with real people. If you've found a study that says not to worry about screen time I want to see it. I'd also like to know&nbsp;the amount of hate mail that author receives.&nbsp;Yet parents with children of all ages punch in a password, pass the screen, and revel in the peace and quiet as their own eyes cross in front of a screen held six inches from the tip of the nose.</p><p>What does this say about our culture? The older generations who don't "get it" are considered backwards and out of the times. Anyone sixty or younger owns at least one screen, the traditional TV, a tablet, computer, laptop, smartphone, watch... Where does the list end? It's not just children.&nbsp;We're all in our screens&nbsp;physically and mentally. Have mercy on the&nbsp;individual who interrupts Facebook time for some old school peer-to-peer&nbsp;interaction.&nbsp;</p><p>We are a species prone to addiction. Anyone who says "I don't have an addictive personality," is full of the nasty stuff. Myself included. Maybe not prone to nicotine addiction, perhaps not prone to alcoholism, but down to every last person I know, except possible my mother, bless her soul, she doesn't "get" Facebook, is addicted to their screens. Prove me wrong. Go a day without your screen. Without your phone. Without your tablet, laptop, desktop. You can't because they're everywhere. At your desk at work, on the wall in the break room, in your living&nbsp;room, family room, &nbsp;bedroom, in your purse, in your pocket. They're in our economy. If all the screens stopped working the world would come to a screeching halt and then jumpstart into a panic not seen in America since the crash of 1929.</p><p>Parts of the world would go on as they have for thousands of years, but all of us first-worlders would have no idea what to do without the ability to post meta first-world-problem memes.</p><p><a target="_blank" href="http://munchies.vice.com/articles/what-its-like-as-a-bartender-to-watch-your-awkward-tinder-date">Young people have no idea how to date</a> the way their grandparents or parents dated. My son, my precious little angel wakes up, he runs to me clutching for my leg, and the first words out of his precious mouth, every single morning, without failure are, "pad? pad, da!" "Pad" almost sounds like "dad" in the mouth of a two year old learning to speak. It's heartbreaking.&nbsp;</p><p>I'm asking my peers:&nbsp;Gen Xers sending their children to college, older Millennials with young children: What are we doing to ourselves and to the succeeding generation? As one man on the street to another. Is this right? Is this healthy? Is this okay? Is this the world we want our children to experience? The world where everything happens within a five-point-one-inch-screen? Will our grandchildren be part of the cyborg revolution with screens surgically tattooed in their wrists, internal heart monitors, blood pressure sensors, RFID tags in the fatty tissue of the hand? These things don't scare me.&nbsp;I'm not preaching the apocalypse or the fulfillment of ancient prophecies. I'm just asking. And saying, our children talk to screens more than they talk to faces.&nbsp;</p><p>What role-model are we establishing when we're checking our phones <a target="_blank" href="https://www.google.com/search?client=safari&amp;rls=en&amp;q=how+many+times+does+the+average+person+check+their+phone&amp;ie=UTF-8&amp;oe=UTF-8">150 times</a> per day? That's 6.25 times per hour in 24 hours. But you're sleeping a full eight hours a day, right? So that's actually 9.4 times every hour in a 16 hour day. On average, that's every 6 and a half minutes. However, there are times when checking-in&nbsp;turns into screen time. Assuming twenty minutes is spent on the phone every waking-hour, that drives&nbsp;check-in time to every 4.3 minutes. (Do you&nbsp;know how often&nbsp;you check your phone? <a target="_blank" href="http://techcrunch.com/2014/09/15/how-many-times-a-day-do-you-check-your-phone-checky-will-tell-you/">There's an app for that</a>).</p><p>The smartphone is not the only screen time to consider.&nbsp;The average American spends <a target="_blank" href="http://www.nydailynews.com/life-style/average-american-watches-5-hours-tv-day-article-1.1711954">24 hours per&nbsp;week on the television</a>. That's nearly 3.5 hours a day on the TV. Next time someone asks where did all the tinkerers and self-starters go&nbsp;tell them they're watching television.&nbsp;We are drowning in our screens and this&nbsp;cannot help but to change our&nbsp;culture, and quite possibly our <a target="_blank" href="http://www.psr.org/environment-and-health/environmental-health-policy-institute/responses/environmental-influences-on-neurodevelopment.html">neurodevelopment</a>.&nbsp;</p><p>There's a lot of data to sift through regarding this subject. Individuals will be prone to their confirmation bias, but there is no doubt that screen time is higher than it's ever been, and it looks as though that trend will continue to climb. Stay plugged in and watch for the results.</p>]]></content:encoded><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1436336916851-V0CD8BE2H64WFZEELAJ2/image-asset.png?format=1500w" medium="image" isDefault="true" width="700" height="400"><media:title type="plain">Get Your Daily Recommended Dose of Screen Time</media:title></media:content></item><item><title>A Brief Observation: The Theory of Everything</title><category>Entertainment</category><dc:creator>JP Miller</dc:creator><pubDate>Tue, 07 Jul 2015 13:55:18 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/5/the-theory-of-everything</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:559987ace4b0851a3e8f3b4b</guid><description><![CDATA[The Theory of Everything is a story of life, love and loss and one not to 
be left unseen.]]></description><content:encoded><![CDATA[<p>The Academy Awards Nominated&nbsp;Best Motion Picture of the Year, Best Performance by an Actress in a Leading Role, Best Writing, Adapted Screenplay, Best Achievement in Music Written for Motion Pictures, Original Score and received the Best Performance by an Actor in a Leading Role for Eddie Redmayne's impeccable performance, The Theory of Everything (2014) is an instant classic that demands attention.&nbsp;</p><p>Eddie Redmayne and Felicity Jones co-starred in the picture that observed the relationship of the famous Stephen Hawking and his wife, Jane Hawking, as based on her book T<em>raveling to Infinity: My Life with Stephen (2007)</em>. The Theory of Everything portrays a memoir of the early romance, marriage and (no spoiler here) dissolution of the Hawking's&nbsp;union.</p><p>This award-winning film touches on many things:&nbsp;the evolution of Hawking's studies, his pursuit for a theory to explain&nbsp;all things, atheism, faith, the regressive effects of Lou Gehrig's disease,&nbsp;the duty of friends and family and&nbsp;most importantly the&nbsp;determination&nbsp;of a man and woman&nbsp;to prevail&nbsp;against the severest of hardships.&nbsp;</p><p>Hawking&nbsp;could have wallowed&nbsp;at&nbsp;the&nbsp;loss of his&nbsp;bodily functions, but we are a resilient species and the desire to live trumps all if grief is given enough time to process. The Theory of Everything is a triumph of the power of love and the indomitable spirit of youth. Dissolving the marriage would have been an&nbsp;easy&nbsp;out for Jane, shuddering the world&nbsp;would have served as escapism for Stephen, but they strove to raise a family and to prosper.</p><p>Both Hawking and Jane have their failings, their moments of weakness. That is not extraordinary, that is common to the human experience. What is most spectacular is the strength they found from deep within,&nbsp;the ability to&nbsp;cherish small&nbsp;moments even after sensual love passed from their relationship.&nbsp;</p>]]></content:encoded><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1436150215215-7WKRFXWR9F7YOJTEC2YU/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="779" height="1154"><media:title type="plain">A Brief Observation: The Theory of Everything</media:title></media:content></item><item><title>Explaining a Nontraditional Career to Loved Ones</title><category>Lifestyle</category><dc:creator>JP Miller</dc:creator><pubDate>Mon, 06 Jul 2015 14:04:46 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/7/1/explaining-a-nontraditional-career-to-loved-ones</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:5593b7d2e4b07bcfcbb0be8f</guid><description><![CDATA[The way people work is quickly evolving in the age of the internet of 
everything. No longer are individuals tied to hierarchical corporations and 
subjected to the laws of the ladder. While this new reality can be exciting 
and full of opportunity it also presents challenges for loved ones who are 
closest to the newly independent nontraditional careerists. ]]></description><content:encoded><![CDATA[<p>The way people work is quickly evolving in the age of the internet of everything. No longer are individuals tied to hierarchical corporations or subjected to the laws of the ladder. New opportunities are rising for&nbsp;brave and adaptable talent willing to take the risk of autonomy. A new generation of technologically savvy, wifi-connected contractors are changing the work environment. This new reality can be exciting and full of opportunity, but it also presents challenges for loved ones who are closest to the newly independent nontraditional careerists.&nbsp;</p><p>Anyone who has worked as a freelancer, contractor, temporary worker or some other form of unattached accomplice&nbsp;to the workplace can testify to the challenges of building a career&nbsp;without a sound security blanket. Working from day to day with the faith that solid and consistent performance will pay off and provide the satisfaction of being a free agent can become unnerving at times. Bonus checks don't come around on the holidays, no one is paying for sick leave or holidays. Freelancers can quickly feel like it's them against the world. The constant search for referrals, consistent work and maintaining a network can be draining for spouses and partners who rely on the income to help pay&nbsp;the bills.</p><p>I reached out to Andrea Wetzel, founder of <a target="_blank" href="http://andreawetzel.com/">Wetzel Creative LLC</a> for her take on this subject. "Leaving a great job to start a freelance career was one of the scariest things I've ever done. It meant letting go of security, coworkers and scariest of all, needing to ask for help. Fortunately, my fiancé&nbsp;Eric&nbsp;always had my back even while I voiced&nbsp;the downsides of irregular payments, unforeseen business expenses, taxes, lack of social interaction and long hours. His support and confidence allowed me to leap into a field where I can grow and develop while creating work that I am proud of. Plus, you can't beat the commute and the coffee here is great."</p><p>Those with the drive and talent who dream about throwing off their corporate lifestyle should consider the emotions and mental pressures such a move will place upon their spouses, partners and&nbsp;dependents. Ideally, in a two-person household one brings home the bacon and the other is free to&nbsp;provide&nbsp;income for discretionary spending. However, this hasn't been the reality of most American homes for half-a-century.&nbsp;</p><p>Here are a few things to do before stepping out into the wilderness of the independent contractor.&nbsp;</p><ol><li>Talk about each other's expectations. Explain your deep need to find personal fulfillment in an independent career and listen to one another's fears without judgment or instant disregard.</li><li>Make a game plan with a timeframe to meet small objectives. How many connections have you made? How many can you expect to make in a month's time? When will you make your first $500? $1,000? Where are potential sources of income?</li><li>Verbally commit to your partner with the same determination that you've committed to being independent.</li><li>Try contracting part-time before handing in your two-week notice. Give yourself an opportunity to adjust to the new work. You want to know that you&nbsp;enjoy your new field&nbsp;and can be efficient before going full-time.</li><li>If possible, cut your household overhead and save three to six months' worth of living expenses.</li></ol><p>Remember to have patience with yourself and with your loved ones. Being your own boss can be extremely rewarding and provides its own set of unique opportunities, but the road to success is paved with many failures. So be kind to yourself, be nice to your spouse even when the rent is almost due and most importantly, have fun with the extra time (and income) that independent work can provide.</p>]]></content:encoded><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1436191864540-L7LO0KY4HTIQ4UHI3HQ4/image-asset.png?format=1500w" medium="image" isDefault="true" width="700" height="595"><media:title type="plain">Explaining a Nontraditional Career to Loved Ones</media:title></media:content></item><item><title>Common Themes in Entrepreneurship</title><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Tue, 30 Jun 2015 05:24:10 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/6/29/common-themes-in-entrepreneurship</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55921b38e4b097f200b0b821</guid><description><![CDATA[Exploring common themes entrepreneurs attribute toward their continued 
success.]]></description><content:encoded><![CDATA[<p>Khan Academy has launched a <a target="_blank" href="https://www.khanacademy.org/about/blog/post/122259720115/can-you-earn-more-points-than-me-this-summer">summer of learning</a> running between last week in June to the end of August. They're offering badges for those who earn 50,000 points in that time and a special badge for anyone who earns more points than Cam, an energetic&nbsp;young man and hopeful unicyclist. My advice, as one who spent a summer long ago mastering the art of the unicycle is to lead the pedal with your best foot.&nbsp;</p><p>In light of this challenge, and my love for the work of Saul Khan, I decided to listen to the entrepreneurial videos while completing contracted work. While listening to the brilliant minds of our day I began to notice common themes. Anyone familiar with Khan's work knows its not mediocre in any sense. These interviews follow the same rigorous quality assurance checks. Guests included <a href="https://www.virgin.com/richard-branson">Richard Branson</a>, <a target="_blank" href="http://www.marcecko.com/">Mark Ecko</a>, <a href="https://www.linkedin.com/in/philiprosedale">Phillip Rosedale</a>, <a href="https://www.inventables.com/press/materials/zach-kaplan">Zach Kaplan</a>, <a href="http://www.tamccann.com/">T.A. McCann</a>, <a href="http://benmilne.com/">Ben Milne</a>, <a href="https://www.linkedin.com/pub/giles-shih/0/584/824">Giles Shih</a>, <a href="https://www.theroasterie.com/about/staff">Danny O'Neill</a> and <a href="http://www.laramorgan.co.uk/">Lara Morgan</a>. The list, admittedly very caucasian and male, goes on to include top entrepreneurs such as <a target="_blank" href="http://www.virtual-ea.com/#!lakeshia-grant-biography/c1bx1">LaKeshia Grant</a>, <a href="http://holscience.com/wp-content/uploads/2014/10/Linda-Jeschofnig-bio-for-website.pdf">Linda Jescehofnig</a> and <a href="https://www.lendingclub.com/public/company-leadership.action">Renaud Laplanche</a>.&nbsp;</p><p>To move toward the point, common themes that appeared one after another include the idea of delivering a product that's better and&nbsp;faster than anyone else's, that failures are an integral part of success and that those who do better than anyone else in their enterprise are those who are the most passionate and most excited about their product or service. Money from successful ventures will follow, but those who follow the money will compromise their core values and be left with a shell of what they once created.</p><p>The consistency of these themes was uncanny. Entrepreneurship requires grit, a bit of reckless abandon and at some point, cash flow. But cash is not often the foremost reason for creating an enterprise. Rather, it's the drive to see an idea come to life that moves these innovators to do what has never been done before.</p><p>One never grows too old to pursue their passion. Young people who succeed and amass great wealth receive overwhelming amounts of media attention because it's so uncommon. Think of all the 20-something people you know. They are probably very hard working, inspired and interesting, but not on the cover of Forbes.&nbsp;It's rare that one finds their point-of-focus&nbsp;so early in life. So, if you're a little older and reading this don't be discouraged by the advice of the most successful entrepreneurs of our time. Rather, find strength in the possibility that the dream of a profitable venture is still available to those who learn from their failures and are willing to work hard to make their dreams reality.</p><p>The best news for would-be entrepreneurs is that society has never known a better time to innovate, create and begin something completely new. It's time to launch your dream into the stratosphere of reality.</p>]]></content:encoded><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1435640871625-NTUSLOSZZQERCVSMBRTB/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="451" height="301"><media:title type="plain">Common Themes in Entrepreneurship</media:title></media:content></item><item><title>Atom 1.0</title><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Mon, 29 Jun 2015 03:40:43 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/6/28/atom-10</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:5590b2ece4b0475870334d7c</guid><description><![CDATA[GitHub released the first official version of the ATOM text editor. I give 
a quick overview and teach you a quick way to set up launch commands for 
your terminal or command prompt.]]></description><content:encoded><![CDATA[<p>GitHub recently announced their hackable text editor, <a target="_blank" href="https://atom.io/">ATOM</a> version 1.0. If you've ever sat through an old-school 1960s-70s era informational/educational video then you owe it to yourself to watch the announcement video. It's an instant classic.&nbsp;</p><p>I switched from SubLime a couple days ago and am so far pleased with the text editor. It's an open source project on GitHub and hackable in about every way possible. True to GitHub, ATOM embraces crowdsourcing and has the potential to become the most powerful and customizable text editor of this generation. It'll be interesting to see how the competition responds.</p><p>When you download ATOM (not if) you'll be given a quick introduction to the most basic customizations available. You can quickly set ATOM to run from the terminal by following these quick and easy steps.</p><p>1. After downloading move ATOM to your Applications folder.</p><p>2. Open ATOM and take your time to go through the customization options.</p><p>3. Select the ATOM menu --&gt; Install Shell Commands and you'll be set to run the commands atom or apm (Atom Package Manager) from the terminal or Git-Bash.</p><p>Like other text editors, you can create a new file from the terminal using:</p><p>atom desired-file-name.extension</p><p>This will open atom with the specified new file.</p><p>If you need to create the file&nbsp;in a different directory that only requires a few steps:</p><p>cd ~ &nbsp;Changes directory to your home directory</p><p>mkdir new-version-control-folder &nbsp;Makes a new directory</p><p>cd new-version-control-folder &nbsp;Goes to the directory as named</p><p>atom desired-file-name.ext &nbsp;Open the Atom text editor and creates the file as named.</p><p>With ATOM users will be able to install a number of packages including linters, GitHub integration packages and a countless number of visual customizations for font, color and background.</p><p>Tell me what packages you've installed for ATOM and why you like them.&nbsp;</p>]]></content:encoded><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1435549107465-AOPRVRU5UGER6UY95RKP/image-asset.png?format=1500w" medium="image" isDefault="true" width="377" height="196"><media:title type="plain">Atom 1.0</media:title></media:content></item><item><title>Falling Flat</title><category>Lifestyle</category><dc:creator>JP Miller</dc:creator><pubDate>Sat, 27 Jun 2015 14:10:05 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/6/27/z9kkfvjv951xgj1m4q6yh6cjqs7wwh</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:557af503e4b00d9eff625777</guid><description><![CDATA[<p>Failing is hard. Writing about failures has its difficulties, as well.</p><p>Most people do their best to put on the adornments of perfection. Not to say all people have their noses up in the air, but generally the public face is the one of "the best foot forward." Who wants to let their friends and colleagues down?&nbsp;Who wants to drop the hopes and aspirations of their family? No one who values their relationships at least as much as they value themselves.</p><p>This week, I can't help but feel like I let many people down. I was being recruited for what felt like a perfectly suited position for myself. The opportunity promised to&nbsp;lead to a worthwhile career at a company that is passionate about their clients and their staff. It's seemed to be the kind of place I've wanted to be a part of for a very long time.</p><p>After completing 75% of the interview process I fell flat on my face. There's no excuse for myself. I should have been able to ace the whiteboard session. I should have been more relaxed during the interview. It's easy to think back and say I should have been a lot of things. But surely, after a week of dedicated study for this interview alone I should have been able.&nbsp;</p><p>In my lifetime, experience has often been the best teacher. In this scenario&nbsp;there's little difference. Experience again will teach me best practices and be my guide in similar situations encountered in the future. In the meantime, I've let my support team&nbsp;down. Welcome to being human. It's hard, dirty and painful, but we do the best can with tools at our disposal and work every day to do better.</p>]]></description></item><item><title>Jasmine and Pollination</title><category>Lifestyle</category><dc:creator>JP Miller</dc:creator><pubDate>Tue, 05 May 2015 22:16:47 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/5/5/jasmine-and-pollination</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55493ecce4b082cc498fd81e</guid><description><![CDATA[<p>Yesterday was a glorious day. A storm rolled in the night before and another was on its way. Our land was covered in a deep peaceful calm. The largest pine tree in the backyard was pollinating yesterday. I showed King the tender buds that were opening when a light yellow powder poured from the branches. I explained the dusting going on above his head, but King was more apt to hide under the tree's branches. My fingers were covered in pollen and it was straight to the tub for the boys as soon as we entered the house.&nbsp;</p><p>If I hadn't already determined to do so my Mrs. surely would have put such an objective upon my mind. She was not pleased at all with our shoes&nbsp;or dirt- and pollen-covered hands.&nbsp;</p><p>The second storm rolled in quietly as promised and hung about the vicinity well into the afternoon. After being stuck inside all day today I know the King will be ready to pull me back into the woods and run around his favorite tree, tomorrow.</p><p> </p><p>In other news I am now only one final and one project away from earning my front-end web development nanodegree with <a target="_blank" href="http://www.udacity.com">Udacity.com</a>!&nbsp;I am very excited at the latest progress. After several changes in comments, indentation and a few weeks in the code I am now finished with the test-driven programming of Jasmine JS. Well, finished as in with this project. I am certain a great amount of Jasmine JS awaits my future.</p>]]></description></item><item><title>Piers rapae sighting</title><category>Lifestyle</category><dc:creator>JP Miller</dc:creator><pubDate>Mon, 04 May 2015 05:17:44 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/5/3/piers-rapae-sighting</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:5546fc6de4b08d5dd935cd6e</guid><description><![CDATA[A Piers Rapae butterfly. photo credit to wiki commons]]></description><content:encoded><![CDATA[<p>The King&nbsp;encountered his first butterfly today. Honestly, it was probably a moth. Well, I thought it was a moth until google searching "white butterfly with two black spots." Yes, it was the very common Piers rapae (small white) butterfly. To say King was excited is to understate the moment. He gave one chase until another popped up before him, gave that one chance until it disappeared and was soon running for more as they danced with one another mere inches from his reach.</p><p>He's growing in independence, but still likes his companion nearby. Especially to join in play. He wants to share his favorite places and games. I have to remind myself to be in the moment. In my adult world there are always a dozen things to be done and playing with a ball or chasing for no purpose is never in that list. Sometimes I have to recognize that my list of things to do is not as important as the opportunity to bond with my son. You'd think that's a no brainer, but the list is a powerful lure for a busy adult desiring to make busy work.</p><p>One day he'll go out to play and won't need me or necessarily want me to come along so JP, enjoy these days while you have them. Not all men are as fortunate.</p>]]></content:encoded><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1430863488583-W61A4C2YNQRP1L5DAK2P/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="800" height="592"><media:title type="plain">Piers rapae sighting</media:title></media:content></item><item><title>Adding Subdirectories with Terminal</title><category>Technology</category><dc:creator>JP Miller</dc:creator><pubDate>Mon, 27 Apr 2015 20:08:51 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/4/27/adding-subdirectories-with-terminal</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:553e9617e4b0561f90123fa2</guid><description><![CDATA[<p>Today I learned a neat trick from lifehacker. My source article is here:&nbsp;<a href="http://lifehacker.com/create-new-directories-and-subdirectories-with-one-term-508906709">http://lifehacker.com/create-new-directories-and-subdirectories-with-one-term-508906709</a></p><p>but the jist of it is that using the Terminal (I operate a Mac) you can create subfolders while making directories.</p><p>use the command mkdir -p to tell the console you're making a directory then set the name of the parent folder and subfolders as such:</p><p>mkdir -p parentFolder/childFolder/subChildFolder/asManyMoreAsYouWant</p><p>you can also add several subfolders of the same level by using curly brackets:</p><p>mkdir -p parentFolder/{childFolder1,childFolder2,childFolder3}</p><p>Check out lifehacker for more ways to simplify your life and check out me, The Chronic Monster for more adventures in fatherhood and creating your world.</p>]]></description></item><item><title>Unboxing April's Loot Crate</title><category>Lifestyle</category><dc:creator>JP Miller</dc:creator><pubDate>Mon, 27 Apr 2015 03:12:31 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/4/26/unboxing-aprils-loot-crate</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:553da85ee4b083ed44772963</guid><description><![CDATA[D&D shirt as modeled in the Loot Crate Magazine]]></description><content:encoded><![CDATA[<p>My Brother-in-Law hooked me up with a cool cool gift of Loot in a crate. Also known as #lootCrate. This month's theme is fantasy so let's open a box.</p>]]></content:encoded><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/52ca02e4e4b05c5f2d7b000d/1430864281782-10RD2RHFSZWT0TJYSLIF/image-asset.jpeg?format=1500w" medium="image" isDefault="true" width="314" height="350"><media:title type="plain">Unboxing April's Loot Crate</media:title></media:content></item><item><title>Rewards in the Struggle for Knowledge</title><category>Lifestyle</category><dc:creator>JP Miller</dc:creator><pubDate>Wed, 22 Apr 2015 13:07:28 +0000</pubDate><link>https://www.thechronicmonster.com/new-blog/2015/4/22/rewards-in-the-struggle-for-knowledge</link><guid isPermaLink="false">52ca02e4e4b05c5f2d7b000d:52ca03d7e4b097374c3b73ca:55379898e4b0e5cb0abd9e46</guid><description><![CDATA[<p>New day new possibilities.&nbsp;</p><p>I've been studying web development with Udacity.com since last November and am in the home stretch. After building a mock static page, manipulating the DOM with javascript, building a Frogger game clone and designing a pizza website to optimize to the utmost speed I am now building a SPA, single page application, that incorporates Google Maps API and other third party APIs to highlight locations in a specific neighborhood, and another project incorporating Jasmine JS's error-checking/testing framework.</p><p>The Google Maps API has required learning a new library (Knockout JS and jQuery) and reading the documentation&nbsp;to comprehension to implementation. Knockout uses a MVVM (Model View ViewModel) framework that separates the Model from the ViewModel. The View is the UI (User Interface). Knockout's model creates an octopus hub where the Model and ViewModel never interact with each other directly but speak through a hub via data-binding and applyBindings commands.&nbsp;</p><p>When I'm in the thick of programming and struggling through the solutions to my quandaries it helps to remind myself of how far I've come, and&nbsp;how much html, css and javascript I am now able to code. The ability to learn is a beautiful thing. The "ah-ha" moments make every struggle worthwhile. And I hope a rewarding career full of new possibilities awaits me just a little further along in the journey.</p>]]></description></item></channel></rss>