<?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: user01010011</title>
    <description>The latest articles on DEV Community by user01010011 (@user01010011).</description>
    <link>https://dev.to/user01010011</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%2F631566%2F9964da3f-fc3a-400c-ac79-b03c7efd3b73.png</url>
      <title>DEV Community: user01010011</title>
      <link>https://dev.to/user01010011</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/user01010011"/>
    <language>en</language>
    <item>
      <title>FS Blog #7: What I Learned From The FS Full Stack Web Dev Program</title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Wed, 30 Jun 2021 03:11:12 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-7-what-i-learned-from-the-fs-full-stack-web-dev-program-13oe</link>
      <guid>https://dev.to/user01010011/fs-blog-7-what-i-learned-from-the-fs-full-stack-web-dev-program-13oe</guid>
      <description>&lt;p&gt;After a very intense two months, my spring-to-finish for the Flatiron School Full Stack Online Software Engineering Program is finally coming to an end. It feels surreal, as I have been working very intense and very long hours to finish the program before its legacy learning platform retires, in part to make up for the previous months where I did not devote as much time to the program as an online self-paced student. Although these past two months has been challenging, it feels amazing to be able to go through the amount of lessons, labs, projects, materials, study groups, and learning a ton along the way. As the program is ending, here are some of the things I have learned from the program: &lt;/p&gt;

&lt;p&gt;Compared with before I started the program, where I only knew HTML, CSS, and some JavaScript, I now know &lt;strong&gt;Command Line, Git, Ruby, Sinatra, Rack, Rails, SQL, ActiveRecord, more HTML, more CSS, Rails, more JavaScript, React, Redux,&lt;/strong&gt; etc. It's pretty incredible how the program helped me learn so much in such a short amount of time, and can actually use what I learn to build functional web applications. If you are new to programming or a beginner, I would highly recommend you join a bootcamp if you want to jumpstart on programming, and start building projects. I also learned the importance of your environment and tools. Setting up the right environment and installing the right tools is essential to programming. To me it is the single biggest barrier to entry to any one who wants to learn programming. I actually feel that your software/tech/app stack and your environment, and using the right ones and the right version of the right tool to use is more important than the coding, because the right tools can help you so much and save you so much time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mrJL27UI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1572882724878-e17d310e6a74%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mrJL27UI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1572882724878-e17d310e6a74%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1572882724878-e17d310e6a74?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to learning technical skills and concepts, I also learned many other things that are not only essential programming but also in general: 1) ask a lot of questions - be curious and ask questions, this is the best way to fully understand and learn something; 2) Google - the internet is an amazing place, you can find almost everything on anything, there are a ton of good resources, materials, articles, videos on every aspect of programming, it's a wealth of knowledge ; 3) use forums like Stackoverflow - chances are, any issues or bugs that you have, someone else had them too, or similar ones. Stackoverflow has a ton of great answers to questions and solutions to bugs and issues ranging from the most simple and common ones to very complex ones;  4) test-driven development - build your projects and products using test-driven development, because it set up targets and parameters for what your project can do, and measure your code according to it. And it might be counter initiative, but fail fast is the quickest way to build a project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_m58IqLK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1623018035782-b269248df916%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_m58IqLK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1623018035782-b269248df916%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1623018035782-b269248df916?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FS Blog #6:  - My React/Redux Final Project</title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Tue, 29 Jun 2021 21:43:37 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-6-my-react-redux-project-265j</link>
      <guid>https://dev.to/user01010011/fs-blog-6-my-react-redux-project-265j</guid>
      <description>&lt;p&gt;For my React/Redux final project, I'm building Job Searcher, a web application and social platform that let users find, like, and save job postings. Users will be able to create accounts, login and log out of their accounts, search, filter, like, and save job postings base on location, company, keywords, etc. &lt;/p&gt;

&lt;p&gt;This project uses Rails API for the backend, and React, Redux, JavaScript, HTML and CSS for the frontend.  Since this is the final project of the program, I will also be using things I have learned in previous lessons, labs, and projects as well.  Hopefully the completed product will feel like an advance version of my previous projects. &lt;/p&gt;

&lt;p&gt;As I have learned from building my previous projects, a good practice is before start building a project is to first think through the user story, and design the user experience, then map out the models, classes and relationships, and with entity and function flow charts, then design your app including the logic, function and features, libraries/tools/resources/gems/dependencies you might need, then start building. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app's user story is someone who is looking for a tech job that is personalized to their skills and with their preferred location, company, and salary range.&lt;/li&gt;
&lt;li&gt;The app's models are User, Job, and Skill. User has many skills, user has many jobs through skills,  and to simplify: job belongs to skill, job belongs to user through skills, skill has many jobs, and skill belongs to user.&lt;/li&gt;
&lt;li&gt;The app uses React, Redux, JavaScript, Rails API, Postgresql, etc. as its tech stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yGww4dTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yGww4dTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FS Blog #5: Social Poster - My JavaScript Project </title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Fri, 25 Jun 2021 21:48:36 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-5-social-poster-my-javascript-project-2k5l</link>
      <guid>https://dev.to/user01010011/fs-blog-5-social-poster-my-javascript-project-2k5l</guid>
      <description>&lt;p&gt;For my JavaScript project, I'm building Social Poster, a web application and social platform that let users create, edit, and delete posts, as well as like and save posts. Users can create, edit/update, and view their posts, as well as view, and edit other user's posts. They would also be able to see all community posts and view all posts by category. &lt;/p&gt;

&lt;p&gt;This project uses Rails API for the backend, and JavaScript for the frontend. This was a natural progression from the last Rails project, where we used Rails views/.erb files only for rendering. This feels even more like a real world application, where JavaScript is often used for building the frontend of a web application. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c9MTBmUH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1527443195645-1133f7f28990%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c9MTBmUH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1527443195645-1133f7f28990%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1527443195645-1133f7f28990?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before I started building the app, I first wrote out the user story and designed the model/class relationships: my app was simple, I had two models, Post and Category. The category has_many posts, and post belongs_to category. The category has attributes like category name and category description, and the post has attributes like title, content, media url, and category. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sS6wNLLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1600096194534-95cf5ece04cf%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sS6wNLLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1600096194534-95cf5ece04cf%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1600096194534-95cf5ece04cf?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Behind Social Poster
&lt;/h2&gt;

&lt;p&gt;After drawing out a flow chart for the app, I then start setting up the app environment and structure. As a part of the project requirement, I'm using Rails API for the app's backend, and JavaScript (and HTM &amp;amp; CSS) for the frontend. &lt;/p&gt;

&lt;h3&gt;
  
  
  Part 1: The Environment &amp;amp; Setup:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rails API&lt;/strong&gt; - This app uses the Rails API for the backend. To setup the app and generate the structure of the app, I used rails new commands:

&lt;ul&gt;
&lt;li&gt;rails new js-social-poster-api —api - this command creates the project with rails API (not the full rails).&lt;/li&gt;
&lt;li&gt;rails g resource  - this command generates the project file structure, including the controllers, models, migration files, views, etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Some of the Gems &amp;amp; Languages used:

&lt;ul&gt;
&lt;li&gt;Ruby&lt;/li&gt;
&lt;li&gt;Rails&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Debugger&lt;/li&gt;
&lt;li&gt;Sqlite3&lt;/li&gt;
&lt;li&gt;Puma&lt;/li&gt;
&lt;li&gt;Bootsnap&lt;/li&gt;
&lt;li&gt;Rack-cors&lt;/li&gt;
&lt;li&gt;Faker&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Part 2: The Programming &amp;amp; Concepts:
&lt;/h3&gt;

&lt;p&gt;Coming from Ruby, Sinatra, and Rails, diving into JavaScript felt very different. There were a lot of similarities between Ruby and JavaScript (or between programming languages in general),  but there were a lot of differences as well. As a part of the project requirement, in addition to cover the project requirements, I tried to use as many concepts as I learned about JavaScript in the app, while still keeping the app as a very simple MVP. &lt;/p&gt;

&lt;p&gt;Concepts I used: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AJAX:&lt;/strong&gt; "asynchronous JavaScript and XML", it's the process used to make requests to the server and update the DOM without loading the web page. AJAX allows use to get data from multiple sources and allows us to pull in dynamic content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON:&lt;/strong&gt; "JavaScript Object Notation"(JSON) is a String that JavaScript knows how to turn into a object. Using JavaScript, we can access the JSON returned by the server and use it to update the DOM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ES6:&lt;/strong&gt; "ECMAScript 6"(ES6), or ECMAScript 2015, was the 2nd major revision to JavaScript. Some of the most important new features of ES6: let, const, Arrow Functions, For/of, Classes, Promises, Symbol, Default Parameters, Function Rest Parameter, Array.find(), Array.findIndex(), new math methods, new number properties, new number methods, new global methods, Modules, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS:&lt;/strong&gt; "Cross-Origin Resource Sharing" (CORS) is designed to prevent scripts like fetch() from one origin accessing a resource from a different origin unless that resource specifically states that it expects to share. (By using the --api flag, the Gemfile was altered to include the rack-cors gem. The gem will be commented out intially and we need to uncomment the gem and run bundle install.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fetch()&lt;/strong&gt; - fetch() is like a mini browser in your browser, you tell fetch() to go to a URL by passing it an argument, and it makes a network request. You chain calls to fetch() with then(). Each then() call takes a callback function as its argument. Based on actions in the callback function, we can display or update content in the DOM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arrow function⇒&lt;/strong&gt; Arrow function is a compact alternative to a traditional function expression, but is limited and can't be used in all situations. It is a way to write functions in a very short way (using an arrow =&amp;gt;). It builds on the syntax of the function expression. (ex: let add = (parameter1, parameter2) =&amp;gt; parameter1 + parameter2; let twoAdder = x =&amp;gt; x+2) It lists the parameter, separated by comma, inside of (). If the arrow function has only one parameter, the () become optional around the parameter.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>FS Blog #4: Skiller - My Rails Project</title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Sun, 20 Jun 2021 14:08:33 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-4-skiller-my-rails-project-2g2k</link>
      <guid>https://dev.to/user01010011/fs-blog-4-skiller-my-rails-project-2g2k</guid>
      <description>&lt;p&gt;For my Rails project, I'm building Skiller, a web application that helps students to learn technical skills through relevant courses. Students can use Skiller to sign up/create user accounts, log in and log out of their accounts, including 3rd party authentication, add and edit/update skills they want to learn and/or have already learned, add and edit/update courses they are taking or have taken in order to gain those skills. They would also be able to filter courses for specific skills, search for skills and courses, and rank their courses by importance or progress. By using Skiller, students will be able to better track and manage their technical skills and courses.&lt;/p&gt;

&lt;p&gt;This is a lot more complex and dynamic web application than my previous very simple Sinatra project Course Tracker, where the students can only manage their courses, in addition to the basic sign in, log in, log out, validations, etc.  For the Rails project, there needs to be at least 3 models, with several relationships, including one has_many relationship, one belongs_to relationship, two has_many through relationships,  and one many_to_many relationship. There was also requirements for 3rd party signup/login, user authentication, validations for attributes, ActiveRecord scope method using ActiveRecord Query methods, nested resources with RESTful URLs, displaying validate errors, etc.&lt;/p&gt;

&lt;p&gt;Building this project took me much longer than the Sinatra project, and there were many more challenges and and bug fixes. But the project and the process of building it was exciting, as I felt it was getting closer and closer to a fully functional real world application, compared with my previous two projects. I also loved figuring things out and debugging the code, because the feedback was immediate: the web app was either working or not working after I made changes to the code, and I could instantly see and interact with it. As the developer and a beta "user", this was pretty amazing. :) &lt;/p&gt;

&lt;p&gt;For the building the Rails app, I primarily used Rails, the Ruby on Rails framework, ActiveRecord, Sqlite3, Omniauth, Puma, HTML, CSS, Bycrpt, and Byebug.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_MUtVAwj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://image.flaticon.com/icons/png/512/862/862528.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_MUtVAwj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://image.flaticon.com/icons/png/512/862/862528.png" alt="https://image.flaticon.com/icons/png/512/862/862528.png"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FS Blog #3: Course Tracker - My Sinatra Project</title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Wed, 09 Jun 2021 07:27:51 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-3-course-tracker-my-sinatra-project-1h5e</link>
      <guid>https://dev.to/user01010011/fs-blog-3-course-tracker-my-sinatra-project-1h5e</guid>
      <description>&lt;p&gt;For my Sinatra project, I'm building Course Tracker, a web application that helps students to manage and track the online courses they are taking. The idea is that the students can use Course Tracker to sign up/create user accounts, log in and log out of their accounts, and can add, edit, and delete the online courses they are taking to their Course Tracker account, including course name, course status, course url, etc. to better manage their online courses and their learning progress.&lt;/p&gt;

&lt;p&gt;When users log in to their accounts, they will be able to view all of the online courses that they are tracking at any given time, they then can check each course's status, add new courses, edit or update existing course's name and status, delete courses they are no longer taking, and go to the course websites from their Course Tracker account or course dashboard. &lt;/p&gt;

&lt;p&gt;This is a very simple MVP, built using the knowledge I have learned so far from the curriculum on Sinatra and other topics including ActiveRecord, HTML, CSS, etc. Even though it is a very bare-boned app, I still spend many hours building it, fixing environmental/technical issues, and debugging codes. However, I really enjoyed building it, and it was exciting because it is my first fully-functional web app, and it feels like I was tying together "frontend" and "backend" together for the first time, especially after the first CLI Data Gem project. This is only my second coding project, and there are so many features and improvements I would have liked to have (especially the styling and CSS!), but for now, this is a good start as a basic MVP project. :)  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9HkVPXa_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1529465230221-a0d10e46fcbb%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9HkVPXa_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1529465230221-a0d10e46fcbb%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1529465230221-a0d10e46fcbb?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo Credit: David Rangel, Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For the project, I used Sinatra, ActiveRecord, Ruby &amp;amp; HTML, Pry, Corneal, and other Ruby Gems.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FS Blog #2: Tech Skills Bot - My CLI Data Gem Project</title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Fri, 28 May 2021 02:49:52 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-2-tech-skills-bot-my-cli-data-gem-project-1p6</link>
      <guid>https://dev.to/user01010011/fs-blog-2-tech-skills-bot-my-cli-data-gem-project-1p6</guid>
      <description>&lt;h1&gt;
  
  
  FS Blog #2: Tech Skills Bot - My CLI Data Gem Project
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p9k918YM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1485827404703-89b55fcc595e%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p9k918YM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1485827404703-89b55fcc595e%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1485827404703-89b55fcc595e?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo Credit: Unsplash - &lt;a href="https://unsplash.com/photos/2EJCSULRwC8"&gt;Alex Knight&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Skills Bot
&lt;/h2&gt;

&lt;p&gt;For my CLI Data Gem project, I'm building a Tech Skills Bot, Al (a smaller, newer upgraded version of Hal9000:)) to help students to plan their tech careers by learning more about the most in-demand tech skills. &lt;/p&gt;

&lt;p&gt;The idea is that students would interact with Al via CLI (Command Line Interface), and at Al's prompt, could enter input to see a list of in-demand tech skills, and then if they want to learn more, enter input to learn more about the skills including average salary, growth potential, and opportunities at top tech companies.  &lt;/p&gt;

&lt;p&gt;Tech Skills Bot is a very simple MVP, as this is my very first project: first time using VS Code for an actual/live project, first time programming with Ruby (or any actual programming language for that matter), first time publishing "committing/pushing" to GitHub(!), ...etc. Even though the app is super simple, it was still a lot of work. I learned a lot through the process, and was able to use a lot of the concepts that I learned from lessons and labs I've done so far, which I detailed below. As I learn more through out the program, I would love to add more functionalities and features!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Building Tech Skills Bot:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To build my app using Ruby, I first setup my local environment, including setting up and connecting my local and remote repos, creating project file structure and files, and adding gems, dependencies, and the requirements in my app and files.&lt;/li&gt;
&lt;li&gt;I then code a Scraper to get the data from a public website about the top in-demand tech skills and their detailed information, using a Ruby Gem Nokogiri to parse the HTML of the website with specific CSS Selectors, then code a Skill class to store these data, and finally, code a CLI that incorporates the Scraper and the Skill classes to sequence out the potential interactions with the student, including different methods for different input scenarios.&lt;/li&gt;
&lt;li&gt;The Ruby gems I used for the app are: &lt;strong&gt;Nokogiri&lt;/strong&gt;, &lt;strong&gt;Open-URI&lt;/strong&gt;, and &lt;strong&gt;Pry&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is the details behind the tech in my building process:&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Behind The Tech Skills Bot:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Part 1: The Environment (&amp;amp; app's main files):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;bundler -&lt;/strong&gt; handles the app's code dependencies &amp;amp; keeps all requirements in one place (in gemfile), keeps environment consistent by tracking and installing the exact gems &amp;amp; versions needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gems&lt;/strong&gt; - the app's ****Ruby external code libraries, installed by running gem install (gem name).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;config&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;environment.rb&lt;/strong&gt;  - specifies load information including gems and database dependencies to configure load path/load order so that nothing breaks in the app.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bin&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;run.rb&lt;/strong&gt; - file that will start the app, requires the config/environment.rb file.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lib&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;scraper.rb&lt;/strong&gt;  - where the app's Scraper class codes live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;skill.rb&lt;/strong&gt; - where the app's Skill class codes live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI.rb&lt;/strong&gt; - where the app's CLI codes live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;version.rb&lt;/strong&gt; - keeps track of the version of the app.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gemfile&lt;/strong&gt; - file inside of the app that lists all of the gems the app uses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gemfile.lock&lt;/strong&gt; - keeps track of all of the app's path, gems, platforms, dependencies and their versions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README&lt;/strong&gt; - a brief documentation of the app, with a short description of the app, install instructions, contributor's guide, and a link to the license of the app's code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LICENSE&lt;/strong&gt; - the app is under The MIT License (with free copyright and "AS IS" statements with warranty and liability waiver).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;While setting up my file structure and files, here are some things I've learned:&lt;/em&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;**Version matters!:&lt;/em&gt;* the correct versions and the consistency of your Ruby and Ruby Gems and dependencies matter.*&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;**Load order matters!:&lt;/em&gt;* load gems, dependencies and requirements first before your codes.*&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;**require  -&lt;/em&gt;* absolute path for the filename (in the directory from which the app is being run)*&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;**require_relative&lt;/em&gt;*  - relative path to the file in which the require statement is called (relative to the file being run)*&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Part 2: The Programming &amp;amp; Concepts:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;General:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt; - &lt;strong&gt;"Hyper Text Markup Language",&lt;/strong&gt; is the standard markup language for documents or contents to be displayed in a web browser. The app uses a scraper to parse the HTML data from the website.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS - "Cascading Style Sheets"&lt;/strong&gt; is language for the presentation or styling of web pages, with rules that define how browsers present HTML, customizing for the content's look and feel, including margins, colors, layout, etc. The app uses a scraper with the help of the CSS Selectors to select the relevant HTML data of the website.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS Selectors&lt;/strong&gt; - used to select (or find) elements from the HTML that matches elements by name, type, attribute, etc., including element, id, class.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI&lt;/strong&gt; - &lt;strong&gt;"Command Line Interface"&lt;/strong&gt; are programs that users can interact with entirely through a computer/system's terminal and shell. There is no graphics or visual interfaces and can only interact with the user through accepting ASCII entered into a prompt and communicate via ASCII output. The app only uses CLI for its user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ruby Essentials:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic control flow - "if" statements&lt;/strong&gt; - "if" statements (and its associated "else", "elsif" and "end" statements) are a type of control flows that tell the app what code to execute conditionally. They are one of the most common ways to enact control flow (along with "while" and "case" statements and "loops") - the codes that follow the "if" statement get evaluated, or read and enacted by the computer, and if the statement results in "true", then the codes through to the associated end statement will run, if the statement results in "false", then the computer goes to the "else" or "elsif" statement, and evaluate the codes follow those statements, and depends on the results of those statement are "true" or "false", the computer either runs the codes that follow those statements or is redirected to the next statements. The app uses "if" statements and "while" statement for the CLI's menu method, where student's inputs were made into "if" statements based on different scenarios, and the Bot's responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variables &amp;amp; variable scopes&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Variables&lt;/strong&gt; - variables stores information, and has a value, type  (starts with a lowercase letter, variable with an uppercase letter is known as a constant and has different characteristics). Can be created with "=" (assignment operator)

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local variables&lt;/strong&gt; - can only be accessed in a specific, local environment. A local variable that is defined inside one method can not be accessed by another method. (We can use instance variable to get around this limitation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance variables&lt;/strong&gt; - can be accessible in any instance method in a particular instance of a class. A variable that has an instance scope, or instance variable is responsible for holding information regarding and instance of a class and is accessible only to that instance of the class.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Class variables -&lt;/strong&gt; A variable that has a class scope  class variable&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Object instantiation&lt;/strong&gt;: &lt;strong&gt;new&lt;/strong&gt; and &lt;strong&gt;Initialize&lt;/strong&gt; - &lt;em&gt;All Ruby objects are bundles of data and logic, or attributes and behavior.&lt;/em&gt; A Ruby class can create new instances of an object in that class via the &lt;strong&gt;.new&lt;/strong&gt; method, whether or not that class has an initialize method. However if we want each instance of the class to be created with certain attributes, there must be a defined initialized method. (An initialize method is called automatically whenever .new is used.) The &lt;strong&gt;initialize&lt;/strong&gt; method instantiates an object and can be used to assign a new object and assign a new object with certain attributes upon it being called. The app uses the initialize method for the Skill class, where each of the new skill scraped from the website is instantiated with name and info, and saved into the Skill class.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The meaning of the "self"&lt;/strong&gt; - In Object-Oriented Programming, there is a concept of "self": when we create a class, each new instance of the class is considered to be an object, and the object is aware of itself and can refer to its methods as self.methods. In another word, the object can operate on itself and is aware of its attributes, behaviors, etc. The app uses the concept of self in its Scraper and Skill classes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Method Types - Class vs. Instance Methods:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classe Methods&lt;/strong&gt; - classes act as a factory for objects, capable of instantiating new instances.  Class Methods are methods that live inside of the object class, with behaviors and functions that can be accessed by objects in that class. The app has three classes: Skills, Scraper, CLI, each with its own &lt;strong&gt;Class Methods&lt;/strong&gt; for each to operate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance Methods&lt;/strong&gt; - instances are instances of behaviors or objects. Instance Methods are methods that belong to any instance of a class. The app uses both Class Methods and Instance Methods that creates instances, behaviors, functionalities for each class and class objects.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Method Return Types&lt;/strong&gt; - what methods return - the app uses both explicit return and implicit return for the methods uses

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Explicit return&lt;/strong&gt; - puts (short for "out"puts"tring") and print commands tell the program to display specific information explicitly;

&lt;ul&gt;
&lt;li&gt;puts adds a new line after executing, and print does not&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implicit return&lt;/strong&gt; - Ruby is an implicit language, if there are no explicit return, the program will return the last code executed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterating Through Collections - .each with a block&lt;/strong&gt; - .each with a block is a Ruby method that calls block with two arguments, the item and its index, for each item in enum, and given arguments are passed through to each(). the app's scraper uses ".each_with_index" to iterate through scraped data from the website to create new Skill objects with the skill names and skill info as attributes, and return each Skill object with an index number.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gems:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pry&lt;/strong&gt; - a Ruby Gem and a type of REPL (Read, Evaluate, Print, Loop) that is used for debugging the app (by calling binding.pry in the app's code, that line gets interpreted at runtime as the program is executed, and when the interpreter hits that line, the program freezes and the terminal of the program turns into a REPL in the middle of the program for checking if the codes are working)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nokogiri&lt;/strong&gt; - a Ruby Gem that the app uses to parse and read the website's HTML in Ruby.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open URI&lt;/strong&gt; - a Ruby module that the app uses to programmatically make HTTP requests of the website.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's my Tech Skills Bot app in a nutshell! Hope this helps anyone who is interested in building a CLI app. I really enjoyed building my first app and learning every step along the way. I look forward to learning more so I can add more to the app and/or build more fun and complex apps! &lt;/p&gt;

&lt;p&gt;Also, aside from the project, It really amazes me that anyone can open up any webpage and see all of their HTML and CSS data. The internet is a pretty amazing place! :)&lt;/p&gt;

</description>
      <category>ruby</category>
    </item>
    <item>
      <title>FS Blog #1: A Beginner's Guide to Programming, Step 1: Command Lines </title>
      <dc:creator>user01010011</dc:creator>
      <pubDate>Mon, 24 May 2021 06:12:37 +0000</pubDate>
      <link>https://dev.to/user01010011/fs-blog-1-a-beginner-s-guide-to-programming-step-1-command-lines-2f99</link>
      <guid>https://dev.to/user01010011/fs-blog-1-a-beginner-s-guide-to-programming-step-1-command-lines-2f99</guid>
      <description>&lt;p&gt;For my blogs for Flatiron School's Full Stack Web Development Program, I want to write about some of the things I have learned in the program. The goal of this blog and the follow blogs as a blog series is to track my learning progress through writing about the technical knowledge I am learning from the program, and projects that I am working on using the technical knowledge I have learned. Hopefully this will also help other beginner programers or people who are interested in learning more about programming and web development. &lt;/p&gt;

&lt;p&gt;Learning programming, as with learning any new languages or skills, the best way to do it is to immerse yourself fully in the new world and get familiar with all of its environments and components. However, as a beginner with little previous background, diving into the world of programming can be overwhelming. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ctqdx_-O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1502101872923-d48509bff386%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ctqdx_-O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1502101872923-d48509bff386%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb" alt="https://images.unsplash.com/photo-1502101872923-d48509bff386?ixlib=rb-1.2.1&amp;amp;q=85&amp;amp;fm=jpg&amp;amp;crop=entropy&amp;amp;cs=srgb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;"千里之行，始于足下" - 老子。&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“A journey of a thousand miles begins with a single step." - Laozi.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Thanks to the Chinese sage philosopher Laozi (a.k.a Lao Tzu), whose words have inspired and continue to inspire people all over the world still thousands years later. “A journey of a thousand miles begins with a single step." The meaning behind these simple words and seemingly obvious statement is extremely powerful. Yet to me, a more accurate and more powerful translation is: &lt;strong&gt;"A journey of a thousand &lt;em&gt;Li&lt;/em&gt; (&lt;em&gt;Chinese miles&lt;/em&gt;) starts beneath one's feet."&lt;/strong&gt; They both convey the same message, but the emphasis of the latter is not on the step, but on the &lt;strong&gt;awareness:&lt;/strong&gt; &lt;em&gt;the path is already beneath your feet. You are already on your path. You just might not realize it.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;People often think that they must "take" the first "step" toward their journey, without realizing that the path has already been and has always been beneath their feet. Don't get me wrong, the "take" and "step" are very important too, but to me, the awareness of the path already beneath your feet is the real game changer, and what generates momentum for you and send you off on your journey.  &lt;/p&gt;

&lt;p&gt;This is the case for me when I learned about &lt;strong&gt;Command Lines.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Command Lines
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;As author &lt;strong&gt;Neal Stephenson&lt;/strong&gt; famously put it, &lt;strong&gt;“In the Beginning… Was the Command Line.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What are Command Lines? Command Lines are texts-based (keyboard characters) or ASCII instructions you can send to your computer through its built-in Terminal, and get responses back from your computer. If you are using any modern computer, it already has a built-in Terminal and Command Line functions, whether you have a Mac, Windows, etc. &lt;em&gt;(If you are using a Mac, when you open you desktop/iMac or laptop/Macbook, you can find your Terminal in your Applications folder, it is a black rounded square icon with a &amp;gt;_ on the left corner.)&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Using Command Lines, you can ask your computer to list all of its folders and files, make new folders and files, delete folders and files, open and close apps, perform certain tasks... etc. How amazing is that?! You can already instruct a computer to do things without learning computer programming or software development - essentially, "program" a computer by writing "codes"! &lt;/p&gt;

&lt;p&gt;When I learned about Command Lines, it felt as if though I have always had the ability to program my computer, but just didn't realize it. &lt;em&gt;The path has always been beneath me.&lt;/em&gt; I know, I know - knowing how to use Command Lines is still far away from actual computer programming, software development, and making amazing software or apps, and the "path" beneath me was actually paved brick by brick by the hard work of those legends who walked before me, who built the computers, wrote the first algorithms, and programmed the source codes that made it possible to communicate with the modern computer via Command Lines, and sure, Command Lines have its own vocabulary that you still need to learn (it doesn't just take ANY text), but once I am aware that "programming" a computer has always been there and so easily accessible, it made learning programming that much more exciting for me. &lt;/p&gt;

&lt;p&gt;An experienced programer (or anyone else) might not think Command Lines are a big deal, but for me, they were a huge deal. When I first used Command Lines with my computer, it gave me WarGame(1983) and Hal9000(2001:Space Odyssey) vibes. And for a moment, I kind of get the guy in Her(2013). (I quickly realized the limitations of Command Lines and computers in general ... but still excited for the possibilities within the limits though! And hopefully one day I can help to expand the limits.)&lt;/p&gt;

&lt;p&gt;If you want to learn more about Command Lines, there is no shortage of content written about them - you can find a lot of posts, articles, books, and resources on the internet, but I wish there is a list of clear, concise, short, and sweet one-liners or phrases that explained what all of the most commonly used Command Line commands did without all of the details, examples, and backgrounds. I couldn't find a list that I liked (so many of them have ones that I don't use and don't see myself using in the future), so I put together my own short list below, as a start. This is only a working list. And again, there are many, many more Command Line commands our there, I've only listed the ones used most frequently by beginner programmers: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mkdir&lt;/strong&gt;  - make a new directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;touch&lt;/strong&gt; (filename)  - make a new file/folder inside a directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cd .&lt;/strong&gt; or cd ./  - go to current directory/folder ("cd" stands for change directory, and "." indicates current folder/directory)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cd ..&lt;/strong&gt; or cd ../  - go to previous directory/go back a directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pwd  -&lt;/strong&gt; path to working folder/directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tab  -&lt;/strong&gt; autocomplete typing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ls&lt;/strong&gt;  - list the file(s) inside a folder/directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ls - lah&lt;/strong&gt;  - list of everything in a folder/directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mv&lt;/strong&gt;  - move file/folder&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rm&lt;/strong&gt;  - deletes file/folder&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Up Arrow&lt;/strong&gt; - the last command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Boom. With these Command Lines, you can now have simple communications with your computer, and "program" it with simple "codes". You are welcome. :)&lt;/p&gt;

&lt;p&gt;Remember, even if you don't know how to program, if you are reading this post, you are already well on your path to learning programming. :)&lt;/p&gt;

&lt;p&gt;Thank you for reading. &lt;/p&gt;

&lt;p&gt;S.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
