<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Harleigh Abel</title>
    <description>The latest articles on DEV Community by Harleigh Abel (@atxrenegade).</description>
    <link>https://dev.to/atxrenegade</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F9089%2F517ee15f-d82e-4b49-9d61-cab23d499046.jpg</url>
      <title>DEV Community: Harleigh Abel</title>
      <link>https://dev.to/atxrenegade</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/atxrenegade"/>
    <language>en</language>
    <item>
      <title>Deconstructing the Trail Tracker</title>
      <dc:creator>Harleigh Abel</dc:creator>
      <pubDate>Tue, 09 Jun 2020 01:11:22 +0000</pubDate>
      <link>https://dev.to/atxrenegade/deconstructing-the-trail-tracker-5enj</link>
      <guid>https://dev.to/atxrenegade/deconstructing-the-trail-tracker-5enj</guid>
      <description>&lt;h1&gt;
  
  
  DECONSTRUCTING THE TRAIL TRACKER&lt;br&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Generating the Idea
&lt;/h2&gt;

&lt;p&gt;Generally before I build an app I’ve had half a dozen ideas bouncing around my head for days or weeks before I begin. The application idea I select is usually determined by which idea appropriately meets the terms and scope of project requirements defined by my Flatiron instructor. This time I tried a totally different approach and reached out to my sister Katie who had an upcoming birthday and asked her what problem she was experiencing that I might be able to solve digitally through creation of a web application. She expressed how she would love to be able to share local trails with her daughter that were not listed on google or other mapping programs with adding them to a database as publicly available as google. &lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is It? What Does it Do?
&lt;/h2&gt;

&lt;p&gt;I brainstormed and mapped out the idea. I envisioned a simple application with a visually appealing, intuitive user interface with basic functionality for users to record details of local trails, add, images and details about these trails, and record and share their hikes on them. Because this is a two part project I had to ensure that it would allow me expand applications with javascript features and that I could fill all the project requirements for both assignments with this concept.&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Easy Parts
&lt;/h2&gt;

&lt;p&gt;After the gazillion exercises I completed in both Ruby and Sinatra in the course curriculum, I felt fairly confident with my knowledge executing CRUD functionality through MVC architecture. Though Rails is a mammoth framework, the basics of it are pretty straightforward, and the documentation is very clear, easy to navigate and well written and maintained . That being said Im sure I will eat my words when someone later points out a rookie mistake I overseen in my rails application. I kept waiting to get stuck, to hit a wall, or a challenge I couldn't overcome but for the most part I was able to sail through the implementation of these features without ever really being stumped. Although this was my first Rails app, having previously built a Sinatra application from scratch the MVC architecture and separation of concerns principles were the same, with the added implementation of RESTFUL routes. This was also my first time using twitter bootstrap, and while it was my first time working with it, and with my limited experience in front end development but extensive experience in graphic design, I found it refreshingly easy to use, and manipulate once I got the hang of it.&lt;br&gt;
And then Came the Other Parts… &lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  And then Came the &lt;em&gt;Other&lt;/em&gt; Parts…
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fi.ebayimg.com%2Fimages%2Fi%2F401066743191-0-1%2Fs-l1000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fi.ebayimg.com%2Fimages%2Fi%2F401066743191-0-1%2Fs-l1000.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pure grit. That was what it ended up taking me to finish this application. Not because it was conceptually so challenging that I couldn't complete it. All my hurdles came in surprise packages from outside the development environment. First was my international move from the U.S. to an island in Mexico which tied up a huge chunk of my time and resources for a short period. Ok, no big deal. That was a choice and I had planned, researched and prepared for a graceful transition (Or so I thought). Then began the domino effect which started while wrapping up the tail end of the project, right as I was recording my demo video and writing my blog post, days before planning to schedule my assessment. &lt;br&gt;
  &lt;br&gt;
The hurdles started with the amateur electrical wiring in our temporary accommodations that shocked me with 220V on a daily basis through open neutral circuit and quickly rendered my just over one year old MacBook air useless. Gah! Ok, no problem.  So… even though I was on an island of 70,000 people in Mexico… I found a repairman who replaced my motherboard within a day for very affordable price. Lucky me! What were the chances? Yeay! Next hurdle, the replacement motherboard worked beautifully but …also revealed there was more damage than anticipated, and the faulty wiring had also destroyed my built in speakers, microphone and audio jack. No audio input, meant no demo video, no online assessment.  Through a very complicated arrangement aka “Operation Cozumel”, I was able to locate a secondhand Dell XPS 15 replacement laptop back in Austin, TX. I wired money for it, hired someone to go check it out, purchase it and ship it to Oklahoma ,and then had someone else fly it from Oklahoma to Mexico. Okay. That took a few weeks but problem solved. I also purchase a “No Break” uninterrupted power supply with led voltage monitor to prevent anymore damaged electronics. Now, working laptop in hand, crisis averted. I got this. Sigh, I moved from electrified paradise into new permanent apartment, where the property manager promised fast wifi that had been set up for previous remote worker inhabitants. And…nope. I can’t even load google on my 2Mbps wifi connection. Doh!  Yeay! Superhero computer repair guy also turns out is actually a network guru in disguise (with a Masters in Network Engineering). He saves the day once again by appearing with a brand new wifi extender, which I regretfully discover after a day does very little through my concrete walls. But, that’s okay, because the next day my newly adopted superhero (let’s call him Edgar) resells me my neighbors long range wifi radio antenna transmitting 400Mbps from a dedicated fiber connection on the other side of town. (I think every programmer needs an ‘Edgar’ in their life. ) And so… that it how I was able to complete my blog post and demo, one paragraph at a time, and how I became the proud new owner of a Ubiquti NanoBean AC Gen 2 Power Beam and possibly the best internet connection on the island, with my own superhero. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2F4.bp.blogspot.com%2F-u1gwflnN2nU%2FUcT5TE2kGwI%2FAAAAAAAAAmQ%2Fyna9tX5z78g%2Fs1600%2Fisland_ipad_fullsize.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2F4.bp.blogspot.com%2F-u1gwflnN2nU%2FUcT5TE2kGwI%2FAAAAAAAAAmQ%2Fyna9tX5z78g%2Fs1600%2Fisland_ipad_fullsize.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aside from the logistical challenges I overcame there were few programmatical challenges along the way.&lt;br&gt;&lt;br&gt;
I began my application some months ago before deciding to tackle the rest of the curriculum material first and return to my project, so there were several months in between beginning and finishing and so I had the experience of having to reacquaint myself to my code, and returning to an application with a deprecated gem and a security vulnerability.&lt;br&gt;&lt;br&gt;
Upgrading the deprecated gem in my application was an easy fix. I simply replaced the chromedriver-helper gem with the new webdrivers gem in my gemfile. Chromedriver-helper was created to run system tests for the Chrome browser and was deprecated in favor of webdrivers with discontinued support as of 03-31-2019.&lt;br&gt;&lt;br&gt;
Regarding security issues in my application, an alert appeared in my Github profile on May, 29, 2019 warning me of a security vulnerability of ‘high severity”. The widely used OmniAuth gem that creates an alternative sign up and login method for new users by allowing them to sign in to popular accounts such as facebook, gmail, and Github to authorize and authenticate their identity had been recognized as a security risk. Apparently the OmniAuth request phase is ‘vulnerable to Cross Site Request Forgery when used as a part of the Rails framework’. This vulnerability creates an opportunity for a secondary account to be able able to sign into a primary account without the primary users consent. No patch was available at the time of writing this blog post but there is a suggested fix which instructs developers to add the omni auth-rails_csrf_protection gem to the application gemfile and ensure that any links that initiate an OAuth request phase and use an HTTP GET request is converted to an HTTP POST request form with an authenticity token value, most easily by replacing suspect instances of link_to with button_to.&lt;br&gt;&lt;br&gt;
Other little bugs included, form validation with missing error messages, flash messages appearing again later on the wrong pages, unexpected behaviors between associated objects, for example if deleting a trail that another user had saved an associated hike to cause all kinds of errors with missing attribute values. Making the application fluid and responsive for different browser window sizes to accommodate different devices also proved to be challenging and time consuming. One by one I worked through each to an appropriate solution. Of the more complicated solutions I implemented was the use of polymorphic associations between models.&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Polymorphic Associations
&lt;/h2&gt;

&lt;p&gt;When creating an architectural outline for my application, I realized that the image objects I was creating, did not belong to one other object model in my program, but rather could belong to almost any model in my project. A profile image would belong to a user, an image of a trail would belong to its trail, and a users images of a specific hike would belong to the hike. I needed to create an image model that could morph its association to which ever model that instance of an image belonged to. As per the Rails guide: “A slightly more advanced twist on associations is the polymorphic association. With polymorphic associations, a model can belong to more than one other model, on a single association.”&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Polymorphic associations are a fairly straight forward concept but while I am practicing limiting my own scope, it is a concept with enough material to explore in a separate blog post dedicated strictly to this topic where I would also like to explore polymorphic route helpers so I will only cover it briefly cover here.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To implement polymorphic associations:&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;    Create your migration to build your model&lt;/li&gt;

&lt;li&gt;    Add the [model] id and [model] type line to your migration file&lt;/li&gt;

&lt;li&gt;    Run rake db:migrate&lt;/li&gt;

&lt;li&gt;    Add the belongsto association to your polymorphic model&lt;/li&gt;

&lt;li&gt;    Add the reciprocal associations to your hasmany models&lt;/li&gt;

&lt;li&gt;    Create methods to create the appropriate restful routes&lt;/li&gt;
&lt;/ol&gt;       

&lt;p&gt;The unforeseen complication of this type of association was that my rails path helpers no longer worked. When I discovered this I made the amateur error of reinventing the wheel without checking for an existing solution. I ended up spending a whole lot of time building many neatly encapsulated helper methods to create my own paths for each polymorphic variation. While refreshing my understanding of polymorphic associations for this blog post I stumbled across polymorphic route helpers that it did not even occur to would already be available. Again, I would like to revisit this in depth in a future blog post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fproxy.duckduckgo.com%2Fiu%2F%3Fu%3Dhttp%253A%252F%252Faturkewi.github.io%252Fimages%252Fpolymorphic.jpg%26f%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fproxy.duckduckgo.com%2Fiu%2F%3Fu%3Dhttp%253A%252F%252Faturkewi.github.io%252Fimages%252Fpolymorphic.jpg%26f%3D1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Features
&lt;/h2&gt;

&lt;p&gt;This is a two part project and I intend to extend my app by giving users the capability to share feedback with and interact with other users by adding JS comments to Trails.  I would also like to use google maps api to enable users to add location maps of trails with start and end markers, use geolocation to display user or device position in relation to these trails and add google directions service to map direction to trail heads.&lt;/p&gt;

&lt;h2&gt;
  
  
  If I Had a &lt;em&gt;Do Over&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Projects are always the deepest and broadest scope in the learning curve. If I were to do this project again, I would simplify. I would focus on limiting scope and improving the quality and syntactical sugar of my code. I would write the best little program instead of a mediocre larger more complex one. I think there is eloquence, and efficiency in simplicity. I would take time more time to brainstorm user scenarios and app behavior to define and understand the clear relationships between objects as the user interacts with them. For example - the Trails and Hikes relationship. If a user deletes a Trail what happens to the references to that Trail by associated Hikes on that Trail that other users have created. I would clearly define these behaviors and what ifs at the beginning of the architectural process rather than being surprised by them as bugs while nearing completion and having to create methods as afterthoughts to correct them. I would avoid the added complication of polymorphic associations, if practical. I would refactor my code to reduce the number of database inquiries. I was torn between reducing potential bugs caused by storing old database requests in instance variables and making frequent new requests to the database to prevent variables from holding on to stale data. I choose the latter, but I like to find a more efficient way to reduce the number of this requests and keep my variables current. To sum up, a revised version of my application would include fewer db requests, smaller scope, simplified code base, higher quality code, polymorphic route helpers instead of custom path helper methods.&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  D-R-Y
&lt;/h2&gt;

&lt;p&gt;In the spirit of not repeating myself, mistakes included, a couple of take-aways that Im sure will be useful to retain for future projects would be the use of polymorphic associations on my object models if I needed to recreate similar relationships. Simple things like remembering to add regex for end of string in date and number range validations, and watching out for missing attribute references on forms, and form label helpers. I learned about handling deprecated gems in my app, and correcting security vulnerabilities created by the use of popular gems. With my unanticipated electrical, hardware and network issues, I got side lessons in hardware repair and replacement, open neutral electrical wiring, uninterrupted power supplies, wifi extenders and long range wifi antennas, and a refresher on setting up linux development environments with my replacement laptop. All in all I would say these challenges provided me with a pretty well rounded curriculum in all things web development All are lessons I am eager to retain.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;(This blog post was previously written August 11 2019) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fproxy.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Ftse2.mm.bing.net%252Fth%253Fid%253DOIP.4tkMiuG-fQfllunKPicYSgHaEs%2526pid%253DApi%26f%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fproxy.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Ftse2.mm.bing.net%252Fth%253Fid%253DOIP.4tkMiuG-fQfllunKPicYSgHaEs%2526pid%253DApi%26f%3D1"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>fullstack</category>
      <category>flatiron</category>
    </item>
    <item>
      <title>Adventures in Ruby</title>
      <dc:creator>Harleigh Abel</dc:creator>
      <pubDate>Mon, 22 Oct 2018 03:05:34 +0000</pubDate>
      <link>https://dev.to/atxrenegade/adventures-in-ruby-4bm8</link>
      <guid>https://dev.to/atxrenegade/adventures-in-ruby-4bm8</guid>
      <description>

&lt;h1&gt;
  
  
  ADVENTURES IN RUBY
&lt;/h1&gt;

&lt;h2&gt;
  
  
  (or Lessons Learned from the Creation of a CLI Gem)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SCOPE AND CONCEPT
&lt;/h3&gt;

&lt;p&gt;My original concept idea, with all my enthusiasm and naivety was to create a grandiose all purpose developer reference that included shortcuts for atom, ruby methods, cli commands, pry commands, and any other routinely used tool by web developers. While great in concept I spent weeks pouring over pages trying to find any workable “cheatsheets” that did not either come in pdf format or html tables.   Eventually I realized that working with pages and pages of tables was going to be tedious and nearly impossible to parse and make sense of.  I narrowed down my scope by the selecting the most agreeable table of all the tools and web pages I had selected, which turned out to be an atom shortcut reference page on GitHub. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson learned:&lt;/strong&gt; MVP. Minimum Viable Product. Start small in scope and scale, expand after a thoroughly working and tested MVP has been achieved.  Build one piece and a time, get each piece working properly before jumping ahead. Be patient and disciplined about it. It’s much easier to find a bug in one block of code than in hundreds of lines of code later on. &lt;/p&gt;

&lt;h3&gt;
  
  
  SCRAPING AND DATA FORMATTING
&lt;/h3&gt;

&lt;p&gt;Since the page I selected to scrap my object data from was in table format it did require a fair amount of parsing, tweaking, splitting, and hashing to create an array of hashed values for each object to be passed into the model classes.  I  thought I had it all worked out, and was some way into the project when I noticed I noticed odd capitalization, and missing table values with caused my hash objects to offset, reversing key value pairs.  I solved this by adding n/a values to the array to put attributes back in their correct order and placement.  In retrospect though I new a table would be challenging I may have chosen something else more reliable to work with and easier to drill down into using by using css selectors.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson Learned:&lt;/strong&gt; When choosing website to scrape look for sites that have clearly formatted css selectors, and break down elements in a systematic and orderly fashion.&lt;/p&gt;

&lt;h3&gt;
  
  
  MODEL ARCHITECTURE
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dXeD_apw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/www.brainpickings.org/wp-content/uploads/2013/01/chickenegg1.jpg%3Fw%3D300%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dXeD_apw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/www.brainpickings.org/wp-content/uploads/2013/01/chickenegg1.jpg%3Fw%3D300%26ssl%3D1" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This particular topic seem to bring up the most questions in my mind. Sometimes I puzzle over it till I find myself in an infinite loop, spinning in circles till I get find the end or the beginning. Which comes first the chicken or the egg? Is the egg a product of the chicken, or is the chicken a product of the egg.  Begin infinite loop. PANIC!  Using my understanding of the belongs_to, has_many, has_many_through and object relationships, I sat down and wrote out three different alternatives for constructing my models and chose the one that felt most natural to what functionality I was trying to achieve with my application.  I've included this document in my project file, and eventually refactored it testing out two more architectural arrangements before deciding on the current configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI APP FUNCTIONALITY
&lt;/h3&gt;

&lt;p&gt;The interface flow of my cli gem would begin the user with a brief introduction of the application followed by the main menu where the user would first select their operating system from the list. This would result in a method call to the Scraper, which would then scrape the website for all shortcuts, pass this array of strings into the Data Formatter class.  The DataFormatter class would create my object hashes that were passed into the Shortcut model for object creation and return a submenu to the user.  This new submenu (search menu) would include a LIST ALL SHORTCUTS option - that would display all atom shortcuts in a numbered list for the users selected operating system, a SEARCH BY KEY option - that would allow users to search shortcut for a specific key sequence ex. “ctrl-m”, and an option to SEARCH BY NAME - allowing users to search atom shortcuts by name ex. “Open File”.  If they chose to LIST ALL SHORTCUTS they would be given the option to select by a shortcut by number from the list, and the program would return a detailed view of their chosen shortcut.  The detailed view includes the shortcut name, key sequence, OS, and a brief description of the shortcut functionality.  Typing ‘X’ followed by enter, exits the user from the program from nearly anywhere within it.  &lt;/p&gt;

&lt;p&gt;Once the objects were created and I had created the search and list functions I noticed that theta wasn’t really being displayed in any kind of order so I decide to create an alphabetize function to make it easier to visually digest.  &lt;/p&gt;

&lt;h3&gt;
  
  
  OBJECT DUPLICATION
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MI-9YjGL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.vikrambedi.com/wp-content/uploads/2017/10/duplicate-content-image.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MI-9YjGL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.vikrambedi.com/wp-content/uploads/2017/10/duplicate-content-image.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While testing out my List All Shortcuts function I discovered an interesting bug that puzzled me.  While my first OS displayed all the correct objects and values as requested, the second operating system returned all the requested objects plus a duplicate copy, and the third operating system seemed to return a triplicate copy of shortcut objects. Yet other times it seemed the program worked flawlessly.  This inconsistency stumped my even further. At the time of writing this I did not know what was causing this bug and it is the final remaining detail in completing my project. Lightening strikes, as I type these letters I’ve had my ahhhaaa moment.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DWEPeCKX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://vignette.wikia.nocookie.net/buddyfight/images/d/d8/Homer-simpson-quotes-doh-i11.jpg/revision/latest/scale-to-width-down/304%3Fcb%3D20141227165956" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DWEPeCKX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://vignette.wikia.nocookie.net/buddyfight/images/d/d8/Homer-simpson-quotes-doh-i11.jpg/revision/latest/scale-to-width-down/304%3Fcb%3D20141227165956" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would seemingly cause a correct number of objects to be displayed for the first OS, duplicate for the second, and triplicate for the third OS.  D’oh!  Could it be tied to the fact that my scraper is called AFTER the OS is selected, which MEANS it is being called for EACH TIME a new OS is selected creating yet another copy of each object EVERY TIME the scraper class is called.  I resolved this by moving the method call to the Scraper class from it's awkward position in the Main Menu to the CLIInterface initialize method where is would only be called once per program execution, this immediately corrected the issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LESSON LEARNED:&lt;/strong&gt; Be familiar with the lifecycle of objects and sequence of events in your programs.  Forcing you to articulate bugs, concepts, problems often helps determine in clarify in your own mind what these things are.  Often when I feel stuck on a concept or am the debugging process, the first thing I do is ask myself - What is the question? What exactly am I trying to accomplish? Sometimes by clarifying the question the answer because easy to locate, or assimilate.&lt;/p&gt;

&lt;p&gt;This was yet another adventure in programming that tested my problem solving abilities, while also creating an awareness of blindspots, and syntax errors. The construction of my own projects is always for me the most effective way to practice, learn, and retain concepts through hands on exploration and bar far the most rewarding.&lt;/p&gt;

&lt;p&gt;A demo of this cli gem can be viewed here:&lt;br&gt;
&lt;a href="https://youtu.be/5GZ8Ck5W3us"&gt;https://youtu.be/5GZ8Ck5W3us&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;atxrenegade/Harleigh Abel&lt;/p&gt;


</description>
      <category>ruby</category>
      <category>portfolioproject</category>
      <category>flatironschool</category>
    </item>
    <item>
      <title>BUILDING CASTLES WITH SINATRA</title>
      <dc:creator>Harleigh Abel</dc:creator>
      <pubDate>Mon, 22 Oct 2018 02:55:39 +0000</pubDate>
      <link>https://dev.to/atxrenegade/building-castles-with-sinatra-4323</link>
      <guid>https://dev.to/atxrenegade/building-castles-with-sinatra-4323</guid>
      <description>&lt;h1&gt;
  
  
  BUILDING CASTLES WITH SINATRA
&lt;/h1&gt;

&lt;h3&gt;
  
  
  THE MAKER
&lt;/h3&gt;

&lt;p&gt;Im a maker at heart and every time I get an opportunity to build something I have a tendency to get carried away.  I call it  “Building castles where only bungalows are required” syndrome. Learning about constructing MVP’s (Minimum Viable Product) has been both enlightening and beneficial for this tendency towards elaborate production.  Needless to say this project was my first opportunity really make something out of thin air and I was going to have fun with it.  Even if it meant putting an extra day or two (week or two) to build something I was proud of.&lt;br&gt;&lt;br&gt;
​&lt;/p&gt;

&lt;h3&gt;
  
  
  THE APP
&lt;/h3&gt;

&lt;p&gt;My vision was an implementation of something close to my heart and something I have been for some time strongly encouraging those around my to participate in.  I call my application Morning and Evening Pages, or AM/PM pages for short.  Morning and Evening pages is created to assist users in recording and making a habit of a morning and evening ritual that includes intention setting, gratitude and reflection.  &lt;/p&gt;

&lt;p&gt;I designed it to encourage and implement a daily practice of conscious focus and repetition to create new neural pathways leading to conscious living and away from subconscious reactivity.  Throughout our hasty lifestyles our attention and focus is constantly being directed away from our goals and intentions as we are bombarded by the latest media driven fear and the continuous perceived threat to our survival. While technology has enhanced our lives in many ways, I believe that it can be more beneficially used to create and develop mindfulness and healthier perspectives of our world.&lt;br&gt;
​&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WX-l2q8F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/atxrenegade/AM_PM_pages/blob/master/public/site_design_mockups/Screen%2520Shot%25202018-10-14%2520at%252010.04.56%2520AM.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WX-l2q8F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/atxrenegade/AM_PM_pages/blob/master/public/site_design_mockups/Screen%2520Shot%25202018-10-14%2520at%252010.04.56%2520AM.png%3Fraw%3Dtrue" alt=""&gt;&lt;/a&gt;&lt;br&gt;
​&lt;/p&gt;

&lt;h3&gt;
  
  
  THE PROCESS
&lt;/h3&gt;

&lt;p&gt;So more about the app. One of my favorite parts of the process, was beginning from absolute scratch. Ground Zero meant I knew exactly where I was beginning from and allowed me to create a fluid systemic step-by-step approach to building from the ground up (hah, at least in my head). This allowed my to create every file and write every line of code, aside from a small skeleton framework I customized for css styling and a few lines from a README.md template.  I was able to become intimately familiar with every piece of my application.  Since this was a simple Sinatra application using Model View Controller architecture to implement CRUD (CREATE READ UPDATE DELETE) functionality, I felt fairly comfortable with the process, since we had been required to complete similar projects multiple times throughout the Sinatra section.  Following a couple of minor bumps in the road I began to take for granted the ease of this process I hit my first roadblock/challenge. &lt;br&gt;
Reflected in the image below is the basic structure of MVC architecture.&lt;br&gt;
​&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1I4VmaZs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://smist08.files.wordpress.com/2013/11/mvc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1I4VmaZs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://smist08.files.wordpress.com/2013/11/mvc3.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SPEED BUMPS AND ROADBLOCKS
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Pluralization
&lt;/h4&gt;

&lt;p&gt;I hit my first minor speed bump early on, which revealed itself as a question about active record pluralization that eventually had to be corrected in both my database and my class names.  The question in my mind was "Does Active Record recognize grammatically correct pluralization?"  I leaned towards a less intelligent system and created my initial models and tables the assumption that it would not.&lt;br&gt;
​&lt;br&gt;
If my database table name was AM ENTRY would ActiveRecord recognize:&lt;br&gt;
​&lt;br&gt;
AMEntrys   OR    AMEntries ?&lt;br&gt;
PMEntrys    OR    PMEntries ?&lt;br&gt;
​&lt;br&gt;
As it turns out ActiveRecord does recognize grammatically correct pluralization, and since I erred on the side of caution, I had to update all my class names and tables names. Easy fix. In general naming conventions has been a sore spot for me so  for my own reference I created a table to remind myself since I seem to be so painful unable to retain them.&lt;br&gt;
​&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OnOHvf_H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/atxrenegade/AM_PM_pages/blob/master/public/images/ActiveRecordNamingConventions.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OnOHvf_H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/atxrenegade/AM_PM_pages/blob/master/public/images/ActiveRecordNamingConventions.png%3Fraw%3Dtrue" alt=""&gt;&lt;/a&gt;&lt;br&gt;
​&lt;/p&gt;

&lt;h4&gt;
  
  
  Loading Controllers in Alphabetical Order
&lt;/h4&gt;

&lt;p&gt;While ActiveRecord is intelligent enough to recognize pluralization, Sinatra does not know to automatically load application_controller.rb before all others. Instead it loads each controller in alphabetical order and since A-P-P is most often going to be the first file loaded, in my case it did not come before A-M-E (AMEntriesController).  I spent hours puzzled by this phenomenon before throwing out a life line to Section Lead Howard DeVeenish who helped me identify and correct the issue by requiring the Application Controller at the top of my  AM Entries controller.&lt;/p&gt;

&lt;h4&gt;
  
  
  Model Architecture
&lt;/h4&gt;

&lt;p&gt;When it came to model architecture I was not entirely sure about the most efficient way to design my models. I had several attributes for my am_entry and pm_entry classes and many of those attributes were multiples. For example, In both AM and PM entries I had an attribute for gratitude. The are five lines to input and store five gratitude items.  Ideally I would have made each attribute a model itself containing these multiple variables for easy retrieval and interaction of each individual instance of an attribute - now object. However for the number of models/tables I would have had to create, this would have expanded this project well beyond the scope of the exercise and I was already struggling to restrict to myself to something small enough to graduate before retirement age.  This was a case where I was able to restrict myself to building an apartment complex sized project, instead of castle when only a bungalow was required.  &lt;/p&gt;

&lt;p&gt;When constructing my models, I decided, to be ultra efficient I would list each attribute by number on the view pages and then store them as an array in the database under their attributes/column titles.  For example the view page would collect gratitude[gratitude_1], gratitude[gratitude_2], gratitude[gratitude_3, gratitude[gratitude_4], gratitude[gratitude_5], and I would compress these values and store them in the database as an array.  This resulted in strange unrecognized strings with extraneous escape characters that I could not extract when retrieving the data. It also resulted in a complicating the process or retrieving and updating these values.  I learned/was reminded that SQL does not recognize or store arrays and eventually had to resolve myself to the fact that EACH iteration of EACH attribute would have to be stored independently.  For example, my table instead of reflecting a column named “gratitude” containing a gratitude array, of five gratitude items, now held a COLUMN for each gratitude item named “gratitude_1”, “gratitude_2”, “gratitude_3”, “gratitude_4”, gratitude_5”. While it didn’t feel like the most was the most elegant execution it did create the functionality I was seeking.  One hundred migrations and revisions later my models, views and revised column names reflected my new format.&lt;/p&gt;

&lt;h4&gt;
  
  
  Recording, Storing and Formatting Date and Time
&lt;/h4&gt;

&lt;p&gt;Time.now - Timestamps, datelines, time formatting, time updated. This turned out to be my biggest headache.  My intention was to record and display a simple Time and Date heading at the top of each entry and organize the entry index by this data.  Instead what I got using Time.now in my table was a hardwired date in my schema labelling every entry the same date and time.  Additionally if I edited/updated an entry it would  now display the correct date and hour of the entry change but the minutes would always display 10 minutes after the hour.  For example if it was 5:22 pm it would record 5:10 p.m., and if it was 3:56 a.m. I would get a time of 3:10a.m.  This was another lifeline issue for me and after a couple debugging sessions with a technical coach and section lead we were able to correct it.  The created_at bug with the hardwired date and time was resolved by dropping the database, and changing the initial migration to remove the default value from the created_at column of the AM and PM entry tables.  The 10 minute after the hour bug literally turned out to be the result of one letter that was capitalized when it should have been lowercase.  In my time and date formatting method I had referred to the minutes variable as %M  instead of %m.  Because %M is actually representative of the MONTH,  NOT the MINUTE, and the month was October the10th month of the year, it was the cause on my 10 minute after the hour anomaly.  One tiny typo wreaking havoc!  &lt;/p&gt;

&lt;h2&gt;
  
  
  THE EXTRAS
&lt;/h2&gt;

&lt;h4&gt;
  
  
  The About Page
&lt;/h4&gt;

&lt;p&gt;Here I took an opportunity to explain the use and purpose of my application along with an opportunity for flagrant self promotion which I leveraged to the fullest.  My intention for this application is to actually have it up and running on a server for people to use for their own benefit.  It is my way of learning while simultaneously contributing and creating value…and promotion.&lt;/p&gt;

&lt;h4&gt;
  
  
  Styling and User Interface
&lt;/h4&gt;

&lt;p&gt;I am a visual/logical person and I believe in creating things that are both pleasant to look at, as well as intuitive and functional to use. I tried to reflect this as best I could through the interface by including multiple easy to navigate buttons on every page, with a fluid transition between CRUD functions. Regarding styling I was able to locate a skeleton css template, literally called “Skeleton Template”.  I customized and modified 80% of it to suit my design vision, and cut out some of the unnecessary content. I sourced images and fonts online from open sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  FUTURE FEATURES and POTENTIAL IMPROVEMENTS
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Improved stylesheets css and inline style  elements
&lt;/h4&gt;

&lt;p&gt;Since this was not a requirement of this exercise and I am not fully comfortable with modifying stylesheets at this time.  I did not spend what I could have to implement better coding practices in my css style sheets and view pages.  To correct this I would spend the time to remove redundant inline style elements and use specific css selectors to target areas of the page I was trying to format. In concept this is a great idea but when I tried to execute it, I made a mess of my view pages and decided that this was not a part of my MVP and that I couldn’t afford to spend anymore time on it for now.  I may correct this at a later date.  I would also like to see that my view page displayed correctly on various device sizes and add appropriate queries for a consistent viewing experience across all platforms.&lt;/p&gt;

&lt;h4&gt;
  
  
  Live and Online
&lt;/h4&gt;

&lt;p&gt;My end goal is to create a portfolio project I am proud of but also to create something this is usable, live and online.  I will add the live application here address here when I do.&lt;/p&gt;

&lt;h4&gt;
  
  
  Password Recovery
&lt;/h4&gt;

&lt;p&gt;I did find steps to create a password recovery process for Rails application.  I do not know if it would work with Sinatra but it is something I would like to try to add as feature to this application. Im going explore this further.&lt;/p&gt;

&lt;h4&gt;
  
  
  Background Randomizer
&lt;/h4&gt;

&lt;p&gt;I did try to implement this with two different sets of images.  One set of stunning HD nighttime images to be randomly viewed as backgrounds to PM pages and another of striking Daytime scenes for randomized backgrounds to Morning Pages. This was an interesting concept because while essentially creating a branch in my project and testing an implantation from stack overflow I had worked out in my head multiple variations and had concluded that simplest way was to select images by id number depending on what the entry id number was.  For example if the entry created was an AM Entry with an id number of 22 this would result in a background image number 2 from the AM Images folder. I did find an alternative implementation on stack overflow that I was unable to successfully incorporate on a brach of this project at the time of this post but will continue to work on it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Desktop and Mobile Ready
&lt;/h4&gt;

&lt;p&gt;As mentioned above I would like to add media queries to make this application mobile and desktop ready. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0-2i7tTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://webizrada.org/wp-content/uploads/2015/11/mobile-ready.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0-2i7tTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://webizrada.org/wp-content/uploads/2015/11/mobile-ready.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AND SO I’VE CONCLUDED…
&lt;/h2&gt;

&lt;p&gt;I enjoyed the opportunity to create using all my new skills and knowledge in one application. It really brought to light areas that I hadn’t fully grasped yet, syntax I had remembered incorrectly and solidified concepts that prior to I may not have been confident about.  I am a really hands on learner and after this project I truly believe that it is through the creation and completion of a programmers own passion projects that one will learn and benefit from most.&lt;/p&gt;

&lt;p&gt;A demo of this application can be found at:&lt;br&gt;
&lt;a href="https://youtu.be/K0f1uj3QtrU"&gt;https://youtu.be/K0f1uj3QtrU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;atxrenegade/Harleigh Abel&lt;/p&gt;

</description>
      <category>sinatra</category>
      <category>portfolioproject</category>
      <category>flatironschool</category>
    </item>
    <item>
      <title>Why Programming?</title>
      <dc:creator>Harleigh Abel</dc:creator>
      <pubDate>Tue, 11 Apr 2017 05:41:18 +0000</pubDate>
      <link>https://dev.to/atxrenegade/why-programming</link>
      <guid>https://dev.to/atxrenegade/why-programming</guid>
      <description>

&lt;p&gt;Home computers, programming, technology and web development are industries that grew up with my generation. There was no such thing as the internet or cellphones when I was a child, and I am still under the age of 40. (Here I am incriminating myself, in an industry where no one is over 25). We were the first generation to have computers in school at all.  Software engineering and web development didn't exist yet, therefore they were never offered as career tracks. In school we were taught Basic 2.0. and learned to move a large blinking lime green or burnt orange cursor twenty steps across the tube tv sized screen of a bulky metal machine. Most of our work was completed in the terminal window, none of the peppy user interface windows you see today had been dreamed up yet. Everything about early computers was cold and industrial.  Programs were loaded with cassette tapes, and gaming options were limited to primitive versions of Frogger, Avengers (Space Invaders) and text based games.    &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1oSMIOQB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://img2.ali213.net/picfile/News/2015/11/22/201511229254046.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1oSMIOQB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://img2.ali213.net/picfile/News/2015/11/22/201511229254046.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was eight years old around this time and my dad bought our first home computer, the Commodore Vic 20. My Mother was furious.  She thought it was a complete waste of time and money, and couldnt imagine what we'd need one for. Shortly after we upgraded to the Macintosh Lisa II. These are the machines I spent my childhood days at, locking myself in the basement, writing my own texted based choose your own adventure games (living the stereotype!).  I was hooked, and I've been using computers every day since then. Computers were natural for me, I understood their clear, linear procedural ways, and black and white "thinking", but it was still years before I'd find my way back to it as a chosen profession.&lt;/p&gt;

&lt;p&gt;As a young adult, I tried a series of promising professions but found that I was disappointed in them all. I didn't feel challenged.  Very few of my career choices satisfied both my craving for technical, science and logic, and my creative, artistic, literary side.  I was bored easily and was looking for something that really pushed me and kept moving like I did.   It didn't occur to me to consider programming. From the outside, computer science appeared to be an overcomplicated, and dry, isolating profession, that surely no one without a masters in advanced mathematics should consider.  I believed in a stereotype, as many outside "the world of programming" bubble do. I imagined that software engineering and web development was limited to young male basement dwellers with pocket protectors and coke bottle glasses, awkward anti-socialites who had chosen programming over accounting. Nothing about the stereotype appealed to me, nor did I think at that point it was within my abilities. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B6kvGX-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://ilmilaneseimbruttito.com/wp-content/uploads/2016/02/photodune-4665028-nerd-m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B6kvGX-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://ilmilaneseimbruttito.com/wp-content/uploads/2016/02/photodune-4665028-nerd-m.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My journey back to programming really happened by accident. One day I fell down a bottomless rabbit hole. It started with photoshop in photography school, and eventually evolved into web design in my graphic design school. I was still not satisfied with just making images, I wanted to "make computers do stuff" but was still convinced programming was out of my reach. Meanwhile, on the side I was becoming the go to computer repair person among my family and friends picking up side work by spending hours diagnosing and debugging their broken and virus infested machines. One day while digging through one of the countless web resources online, I stumbled across the "Hour of Code" campaign. It was short and sweet but shattered my illusion that programming was limited to rocket scientists, and rekindled my passion for code.&lt;/p&gt;

&lt;p&gt;I'm not sure I could count the number of desktops and laptops I have personally owned over the past 30 years.  My current household of two people consists of four laptops, an Ipad, an Imac, an android tablet and two smartphones. I can no longer imagine going back in time to not being connected in some way. I grocery shop online, all my classes are online, I socialize through an online meetup I have created, and use technology to stay in touch with my friends and family all over the world. In contrast, my other half grew up in a remote village in Fiji without power or running water and didn't see his first computer till he was twenty. He has owned two laptops throughout his entire life. While intelligent and mechanically inclined I see that his computer illiteracy often becomes a challenging hurdle in his career and in managing his personal life.  This is by no means an attempt to belittle those who are less than proficient with computers, there are many days that I feel like switching off the virtual world to be more present in the physical one, but I do believe that fluency in technology has become a mandatory skill for modern life, and at the very least in Western Civilization and the business world.&lt;/p&gt;

&lt;p&gt;Quality of life, I have decided, best sums up what stirs within me a desire to become a developer. Both the opportunity to improve my own quality of life through a respected rewarding career, but also to use this skill to improve the quality of life far beyond those I am close to.  Programmers are the modern day rockstars and superheros of the future.  Imagination and technical skills give developers the superpowers to affect the daily lives of the entire planet, whether through the creation of social media tools, smart home security systems, personal banking, embedded systems in lifesaving medical equipment, or government surveillance, just to name a few. Computers touch every aspect of our lives from personal to politics.  Even toddlers these days effortlessly navigate an Ipad to their chosen games and shows with frightful expediency. Where else is there a skill such as this, that is so widely able to access any field and all aspects of life. Then there are the obvious perks as a developer: decent pay, employability, positive job growth outlook, plus it looks great on a business card, but to me, there is so much more to it.  Programming is the art of solving tangible problems through effective abstract algorithms. What could be more creative than that?  It's a way of thinking.  How can I solve this problem most effectively, with the least amount of effort while incorporating the knowledge and tools of my predecessors?  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G1aIvAPq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://1a6da9xan5u49y7t5a2i1m1d.wpengine.netdna-cdn.com/wp-content/uploads/2014/10/Superhero-Leader-JPG-300x275.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G1aIvAPq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://1a6da9xan5u49y7t5a2i1m1d.wpengine.netdna-cdn.com/wp-content/uploads/2014/10/Superhero-Leader-JPG-300x275.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Tech industry is limitless, constantly evolving, challenging our ideas about ourselves and the world, improving our lives in one way or another on a global scale and I'm happy to say that with these qualities I've finally met my match.&lt;/p&gt;


</description>
      <category>programming</category>
      <category>computerscience</category>
      <category>womenwhocode</category>
      <category>atxrenegade</category>
    </item>
    <item>
      <title>Nevertheless, Harleigh Abel Coded</title>
      <dc:creator>Harleigh Abel</dc:creator>
      <pubDate>Wed, 08 Mar 2017 07:57:03 +0000</pubDate>
      <link>https://dev.to/atxrenegade/nevertheless-harleigh-abel-coded</link>
      <guid>https://dev.to/atxrenegade/nevertheless-harleigh-abel-coded</guid>
      <description>&lt;h2&gt;
  
  
  I began coding because...
&lt;/h2&gt;

&lt;p&gt;Well... I started when I was 8, and I did it to write my own computer games, we didnt have a lot of options then. I picked it back up in my 30's because I fell in love with it again after stumbling across an "hour of code" challenge. I realized that modern programming wasn't that different from the languages I worked with as a child. I really began to pursue it for several reasons. It is an opportunity to work remotely and continue to travel. It is challenging and engaging. Coding is a tool that has the power to change the world while building something from nothing. Programming is an in-demand skill that created an opportunity to move from being under employed and under paid into a position that matched my abilities, salary expectations, and work ethic.  &lt;/p&gt;

&lt;h2&gt;
  
  
  I'm currently hacking on...
&lt;/h2&gt;

&lt;p&gt;refining and building my skills as a full stack web developer at Flatiron School&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm excited about...
&lt;/h2&gt;

&lt;p&gt;Learning to combine my web development skills, c language knowledge, and design skills with embedded systems to create IOT (internet of things) devices.(ie, smart homes, smart appliances, a refrigerator that can order it's own groceries, etc.)&lt;/p&gt;

&lt;h2&gt;
  
  
  My advice for other women who code is...
&lt;/h2&gt;

&lt;p&gt;Follow your passion, don't be intimidated. If you are interested in a non-traditional field stick with it and follow it through, the world needs more female influence and insight in science, engineering, and technology. &lt;/p&gt;

&lt;p&gt;Perseverance is the key to success.  Anyone can learn if put your mind to it, hard work and tenacity often beat out natural born abilities in the end. &lt;/p&gt;

&lt;p&gt;I was an English major, and terrible math student and it did not hinder my ability to learn programming. If I can do it, you can do it.&lt;/p&gt;

&lt;p&gt;From the outside the world of programming may look dry but from the inside it looks magical. &lt;/p&gt;

&lt;h2&gt;
  
  
  #SheCoded
&lt;/h2&gt;

</description>
      <category>wecoded</category>
    </item>
  </channel>
</rss>
