<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Milan Zivkovic</title>
    <description>The latest articles on Forem by Milan Zivkovic (@zicna).</description>
    <link>https://forem.com/zicna</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%2F544119%2F90187465-aa8f-4c18-bd04-d800ba8c4216.jpg</url>
      <title>Forem: Milan Zivkovic</title>
      <link>https://forem.com/zicna</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zicna"/>
    <language>en</language>
    <item>
      <title>Path to better README.md through Markdown syntax </title>
      <dc:creator>Milan Zivkovic</dc:creator>
      <pubDate>Sun, 12 Dec 2021 21:48:55 +0000</pubDate>
      <link>https://forem.com/zicna/path-to-better-readmemd-through-markdown-syntax-42hd</link>
      <guid>https://forem.com/zicna/path-to-better-readmemd-through-markdown-syntax-42hd</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;As my journey at FlatIron school comes to a final phase and having a few projects built, I look back and I see a common thing in all of them: bad readme files! Now when I go back to my first &lt;em&gt;CLI&lt;/em&gt; I am having hard time starting it without diving into code files. Idea of writing this blog is to serve as reference and help for Markdown syntax used to write README files.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What you will find in this blog&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;About README&lt;/li&gt;
&lt;li&gt;About Markdown&lt;/li&gt;
&lt;li&gt;Useful VS Code extensions&lt;/li&gt;
&lt;li&gt;Markdown syntax (links, headings, tables, code snippets)&lt;/li&gt;
&lt;li&gt;References&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  README
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;README&lt;/em&gt; is a text file used to describe the creators idea behind the application, the problem they are trying to solve, a way to intrigue possible users, help them with installation and usage, and leave them a place where they can point to some bugs or possible improvements of application.&lt;br&gt;
The most common language used for writing &lt;em&gt;README&lt;/em&gt; is Markdown.&lt;/p&gt;


&lt;h2&gt;
  
  
  Markdown
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Markdown&lt;/em&gt; is a lightweight markup language that you can use to add formatting elements to plaintext text documents.Markdown is platform independent. You can create Markdown-formatted text on any device running any operating system. There are several online Markdown editors that you can use to try writing in Markdown. &lt;a href="https://dillinger.io/"&gt;Dillinger&lt;/a&gt; is one of the best online Markdown editors.&lt;/p&gt;


&lt;h2&gt;
  
  
  VS Code extensions
&lt;/h2&gt;

&lt;p&gt;Adding extensions to VS code setup can be of great use if you choose right ones. In your VS Code window open &lt;em&gt;extensions&lt;/em&gt;(&lt;code&gt;shift&lt;/code&gt;+&lt;code&gt;command&lt;/code&gt;+&lt;code&gt;X&lt;/code&gt; for Mac or &lt;code&gt;shift&lt;/code&gt;+&lt;code&gt;command&lt;/code&gt;+&lt;code&gt;X&lt;/code&gt; for windows) and find ones you need through search bar.&lt;/p&gt;

&lt;p&gt;In the search bar type &lt;code&gt;Markdown&lt;/code&gt; and you will see plenty of extensions for Markdown language. &lt;br&gt;
&lt;strong&gt;Markdown All in One&lt;/strong&gt;&lt;br&gt;
This is the one I use most often.&lt;br&gt;
This extension will give you keyboard shortcuts, a table of content, and best of all auto preview. Make sure to scroll down and check out their animations and notes how to best utilize this extension.&lt;br&gt;
&lt;strong&gt;Markdown Theme Kit&lt;/strong&gt;&lt;br&gt;
I use this one to set difference for code snippets as it can set themes which will look not only good but also emphasize importance of code snippets you add in &lt;em&gt;README.md&lt;/em&gt; file.&lt;br&gt;
Other useful extensions: &lt;em&gt;markdownlint&lt;/em&gt;, &lt;em&gt;Markdown Emoji&lt;/em&gt; &lt;/p&gt;


&lt;h2&gt;
  
  
  Markdown syntax
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Comments&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- this is comment--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Headings&lt;/strong&gt;&lt;br&gt;
Similar to HTML, Markdown has different headings which should be used for different importance and not as styling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Heading 1

## Heading 2

### Heading 3

#### Heading 4

##### Heading 5

###### Heading 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Italic, Bold, Strikethrough&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_this text is italic_
*this is also italic*
__this text is bold__
**this is also bold**
~~this text~~ is strikethrough
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Horizontal rule&lt;/strong&gt;&lt;br&gt;
Three hyphens or three underscores in line, no spaces.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
___
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Unordered list&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Item 1
- Item 2
 - nested Item 1
 - nested Item 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ordered list&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Item 1
1. Item 2
1. Item 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;External links&lt;/strong&gt;&lt;br&gt;
In square brackets we will write what we want to be shown on README.md as hyperlink and in parentheses will be the link where it will re-direct us. Extra attribute can be placed after link in parentheses separated with white space and quotations. This will appear when we hover over our link.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[link](https://something/something/... "resources")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Same page links&lt;/strong&gt;&lt;br&gt;
This is very useful for &lt;em&gt;Table of content&lt;/em&gt; part of &lt;em&gt;REDAME.md&lt;/em&gt; so the user can easily navigate through file. Square brackets content will appear as link and in parentheses after it (no spaces) we will have &lt;strong&gt;#&lt;/strong&gt; and heading exactly as it is in file. For multi word headings use hyphen to connect the words.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. [&amp;lt;Heading that will appear as link&amp;gt;](#heading-in-your-file)
2. [How to install](#how-to-install)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Images&lt;/strong&gt;&lt;br&gt;
Images of file structure, database diagram, or else will make your README.md better and easier for user to understand, navigate, use, and install your application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![&amp;lt;alt tag&amp;gt;](&amp;lt;image link&amp;gt;)
![cute cat](https://cats/one/...)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Inline code blocks&lt;/strong&gt;&lt;br&gt;
Open with single backtick and close with same, all in one line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`&amp;lt;p&amp;gt;this is paragraph&amp;lt;/p&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Multi line code blocks&lt;/strong&gt;&lt;br&gt;
Open/close with three backticks(no spaces between) with possible additional 'attribute' where we can specify in what language code snippet is written in. Different languages will have different highlighting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;` ` ` javascript
const myFunction = (){
   console.log('Hello World')
}
 ` ` `
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tables&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|first name|last name|email|
|----------|---------|-----|
|John| Do|jd@example.com|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Task List&lt;/strong&gt;&lt;br&gt;
Task lists can be used for part of README.md reserved for listings of future upgrades. We can check them out as we go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- [x] Task 1
- [ ] Task 2
- [X] Task 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Probably the first file someone will see when they come to your application is &lt;em&gt;README.md&lt;/em&gt;, this is the right place to &lt;em&gt;hook&lt;/em&gt; them to stay and dive into your application. &lt;br&gt;
&lt;em&gt;README.md&lt;/em&gt; in your application is about presenting your product (and yourself) with 'user manual', recipe, idea behind it and much more and &lt;em&gt;Markdown&lt;/em&gt; give us power not to stress about &lt;em&gt;'how'&lt;/em&gt; so we can focus on &lt;em&gt;'what'&lt;/em&gt; to write. Plain text is good but utilizing Markdown's features will make our &lt;em&gt;README.md&lt;/em&gt; more appealing and easier to understand. &lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.makeareadme.com/"&gt;About README.md&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=HUBNt18RFbo&amp;amp;t=2s&amp;amp;ab_channel=TraversyMedia"&gt;Traversy media about Markdown&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.markdownguide.org/getting-started/"&gt;About markdown&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dillinger.io/"&gt;Dillinger- online markdown editor&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>markdown</category>
      <category>programming</category>
      <category>readme</category>
    </item>
    <item>
      <title>Database setup and associations for simple quiz app</title>
      <dc:creator>Milan Zivkovic</dc:creator>
      <pubDate>Mon, 11 Oct 2021 06:05:53 +0000</pubDate>
      <link>https://forem.com/zicna/database-setup-and-associations-for-simple-quiz-app-13cn</link>
      <guid>https://forem.com/zicna/database-setup-and-associations-for-simple-quiz-app-13cn</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Building a simple quiz application started with a blank diagram and cognition that my SQL knowledge is fading (if I ever had any).  I'll just say that I had to refresh on lectures on join tables (inner join tables to be precise).&lt;/p&gt;

&lt;h2&gt;
  
  
  What you will find in this blog
&lt;/h2&gt;

&lt;p&gt;Here you will find the database diagram and model associations. I hope it will give you guidance for your quiz application. Worth mentioning  is that backend side was created in Rails with &lt;code&gt;--api&lt;/code&gt; flag (generators will not create &lt;em&gt;views&lt;/em&gt; folder, frontend side will be written separately )&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eo47iuh3tq6e77kkluh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eo47iuh3tq6e77kkluh.png" alt="Database scheme"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Models
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Quiz&lt;/li&gt;
&lt;li&gt;Question&lt;/li&gt;
&lt;li&gt;Option&lt;/li&gt;
&lt;li&gt;User&lt;/li&gt;
&lt;li&gt;Take&lt;/li&gt;
&lt;li&gt;Response&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Model Associations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quiz
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;has_many :questions
has_many :takes
has_many :users, through: :takes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Question
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;belongs_to :quiz
has_many :options
has_many :responses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Option
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;belongs_to :question
has_many :responses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  User (with basic validations)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;has_many :takes
has_many :quizzes, through: :takes
validates :username, presence: true
validates :email, presence: true
validates :email, uniqueness: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Take
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;belongs_to :user
belongs_to :quiz
has_many :responses, dependent: :destroy

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Response
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;belongs_to :take
belongs_to :option
belongs_to :question
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Having &lt;strong&gt;Takes&lt;/strong&gt; table as a join table between &lt;strong&gt;Users&lt;/strong&gt; and &lt;strong&gt;Quizzes&lt;/strong&gt; will give as an option that user can retake the quiz as many times as he/she wants. &lt;br&gt;
Each response will belong to take, question and option. Here we can distinguish responses for the same question with the same option selected but that happens it different takes.  &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>rails</category>
      <category>api</category>
      <category>database</category>
    </item>
    <item>
      <title>Before sessions and cookies: HTTP request and response</title>
      <dc:creator>Milan Zivkovic</dc:creator>
      <pubDate>Fri, 13 Aug 2021 03:04:55 +0000</pubDate>
      <link>https://forem.com/zicna/before-sessions-and-cookies-http-request-and-response-2paf</link>
      <guid>https://forem.com/zicna/before-sessions-and-cookies-http-request-and-response-2paf</guid>
      <description>&lt;h3&gt;
  
  
  INTRO
&lt;/h3&gt;

&lt;p&gt;Rails authentication is all about sessions and cookies. But before that I needed little refresh on HTTP requests and responses. It all sounded familiar but I wanted to have it all in one place as a reference when (not if) I need it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Finding HTTP requests/responses
&lt;/h2&gt;

&lt;p&gt;It's always good to see what are we talking about. Please see instructions hot to see HTTP requests/responses for Chrome browser:&lt;br&gt;
  *Navigate to page (anyone you like)&lt;br&gt;
  *Right click and hit 'Inspect'&lt;br&gt;
  *Select 'Network'&lt;br&gt;
  *Select any HTTP request on left side (panel named 'name') and headers will be displayed on right side &lt;/p&gt;




&lt;h2&gt;
  
  
  HTTP(Hypertext Transfer Protocol) request
&lt;/h2&gt;

&lt;p&gt;HTTP request is a message that one computer sends to another using the HTTP protocol. It’s made by a client of ours API to our API. &lt;/p&gt;

&lt;h4&gt;
  
  
  Structure:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1. The Request line&lt;/strong&gt; of the HTTP protocol (has three parts):&lt;br&gt;
Example 1. &lt;em&gt;GET /books HTTP/1.1&lt;/em&gt;&lt;br&gt;
Example 2. &lt;em&gt;POST /form.html HTTP/1.1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.1 HTTP Method&lt;/strong&gt;- indicate what kind of action our client wants to perform&lt;br&gt;
&lt;em&gt;GET&lt;/em&gt;- user wants to “read” a resource (example 1.)&lt;br&gt;
&lt;em&gt;POST&lt;/em&gt;- user wants to send us something (example 2.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.2 URI of request&lt;/strong&gt;- refers to the address where the resource is located&lt;br&gt;
Example 1. The user wants to “read”(GET) resources located at &lt;em&gt;/books&lt;/em&gt;&lt;br&gt;
Example 2. The user wants to send(POST) something (form.html), we will find this in the body of the HTTP request &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.3 HTTP protocol&lt;/strong&gt;- there are several versions of HTTP (example &lt;em&gt;HTTP/1.1&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The headers of the HTTP request&lt;/strong&gt; are metadata that are sent in requests to provide information about the request.&lt;br&gt;
Each header is specified with a name, then two points, and then followed by the value of that header. The header can be composed of several individual headers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;metadata&lt;/strong&gt; in HTTP request- when we retrieve page the server sends with it various bits of information about the thing you are retrieving (metadata).&lt;br&gt;
&lt;strong&gt;metadata in general&lt;/strong&gt;- data that provide information about other data. Metadata summarizes basic information about data, making finding and working with particular instances of data easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The body of HTTP request&lt;/strong&gt; place where we put additional information we want is going to send to the server. We can put whatever we want in the body of the request. The body represents (in many cases) content that we want to transmit.&lt;br&gt;
GET requests do not use a body since it’s not sending many complex data when reading information. In the case of the POST method, we use the body of the request to send data to the server (sign in forms for example).&lt;/p&gt;




&lt;h2&gt;
  
  
  HTTP Response
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Structure:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1. Status line&lt;/strong&gt;&lt;br&gt;
The request status is indicated in the response status line. If there are errors, if it was successful or if it is required some additional actions.&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/List_of_HTTP_status_codes"&gt;Read more about HTTP status code.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The response header&lt;/strong&gt;&lt;br&gt;
Is set of one or many headers (just like in HTTP request)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The body of the response&lt;/strong&gt;&lt;br&gt;
This part is optional, used when the server wants to transmit data to the user (for a web page it would be HTML (hypertext markup language)  document)&lt;/p&gt;

&lt;p&gt;sources: &lt;br&gt;
&lt;a href="https://www.w3.org/International/questions/qa-http-and-lang"&gt;HTTP headers, meta elements and language information&lt;/a&gt;&lt;br&gt;
&lt;a href="https://gavilan.blog/2019/01/03/anatomy-of-an-http-request/"&gt;Anatomy of an HTTP request&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.opendatasoft.com/blog/2016/08/25/what-is-metadata-and-why-is-it-important-data"&gt;about metadata&lt;/a&gt;&lt;br&gt;
&lt;a href="https://mkyong.com/computer-tips/how-to-view-http-headers-in-google-chrome/"&gt;how to see HTTP headers&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flatiron</category>
      <category>rails</category>
      <category>sessions</category>
      <category>cookies</category>
    </item>
    <item>
      <title>User authentification and validation for Sinatra project</title>
      <dc:creator>Milan Zivkovic</dc:creator>
      <pubDate>Mon, 05 Apr 2021 00:45:23 +0000</pubDate>
      <link>https://forem.com/zicna/user-authentification-and-validation-for-sinatra-project-1c25</link>
      <guid>https://forem.com/zicna/user-authentification-and-validation-for-sinatra-project-1c25</guid>
      <description>&lt;p&gt;Here I would like to share the process of building user authentication and validation in my Sinatra project as well as share resources I found helpful on this subject. &lt;/p&gt;

&lt;p&gt;Sinatra project for phase two of Flatiron boot camp among other functionality should be able to keep track of whoever uses our web application, keep track of it,  refuse user without proper username and password, and unable certain parts depending on the current user. &lt;/p&gt;

&lt;h3&gt;
  
  
  Building model for our User
&lt;/h3&gt;

&lt;p&gt;(in this project it will be Dispatcher)&lt;/p&gt;

&lt;p&gt;‘./models/dispatcher.rb’&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LLWJAKRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ca5a36kafwe3p3kkvxik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LLWJAKRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ca5a36kafwe3p3kkvxik.png" alt="Alt Text" width="880" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Validations on the model:&lt;/p&gt;

&lt;p&gt;Main attributes of class Dispatcher: username, passwords, and email must be passed when we are creating one. Also, they need to be unique and for email, a certain format must be followed. &lt;/p&gt;

&lt;h3&gt;
  
  
  Creating migration
&lt;/h3&gt;

&lt;p&gt;for our Dispatcher class&lt;/p&gt;

&lt;p&gt;'./schema.rb'&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Apx-b_ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k4seoz5vnic4b8gyzxp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Apx-b_ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k4seoz5vnic4b8gyzxp9.png" alt="Alt Text" width="880" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Session and cookies
&lt;/h3&gt;

&lt;p&gt;Requests come to our Sinatra app through HTTP which is a stateless protocol, each request is treated as an independent transaction that is unable to use information from any previous requests. This means our app will never be able to keep track of requests and responses. The only thing it will do is to match requests sent from browser with the right route in our &lt;em&gt;ApplicationController&lt;/em&gt;. And this can be a problem since we don't want to have everything open for every user. This is where sessions come in handy, to keep track of users, through session objects.&lt;br&gt;
The first step to do this is to enable sessions in our &lt;em&gt;ApplicationController:&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J6Y_fRU8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvrsa97159caqiaii2e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J6Y_fRU8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvrsa97159caqiaii2e9.png" alt="Alt Text" width="880" height="221"&gt;&lt;/a&gt;&lt;br&gt;
Now session object is available to us in every route of our Application through cookies. Sessions and cookies go hand in hand. Sessions as cookies are hash-like objects that store data. Sessions on the server-side and cookies on the user side (in browser). The client-side cookie data will be compared to the server-side session data to help the application what step to take.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sign up
&lt;/h3&gt;

&lt;p&gt;Before we use a session our dispatcher needs to sign up or log in to our application. This will come as a request that will be matched with the route in our &lt;em&gt;ApplicationController&lt;/em&gt;. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3eHWhd-C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6f6riwgjd7tc4fjvu650.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3eHWhd-C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6f6riwgjd7tc4fjvu650.png" alt="Alt Text" width="880" height="133"&gt;&lt;/a&gt;&lt;br&gt;
Here you can see the &lt;em&gt;logged_in&lt;/em&gt; helper method but we will get to them later. Next, we will create an instance of a Dispatcher class based on the params hash our &lt;em&gt;ApplicationController&lt;/em&gt; received via &lt;em&gt;post&lt;/em&gt; request. And finally, we will use 'id' of that instance created to store it in session hash to keep track of the current user in our app. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_jpgOs1n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhby0ypxb7rr1id5g499.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_jpgOs1n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhby0ypxb7rr1id5g499.png" alt="Alt Text" width="880" height="288"&gt;&lt;/a&gt;&lt;br&gt;
This is what the session would look like and how we can authenticate our current user:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vTJs9eo---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1knxfgc7psiup7cwatmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vTJs9eo---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1knxfgc7psiup7cwatmg.png" alt="Alt Text" width="880" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Log in
&lt;/h3&gt;

&lt;p&gt;On the log-in route, we will do something different. Instead of creating a new instance, we would need to find one by username and if one is found we will need to check if the password in params matches one stored in our database. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pMk2WEyI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uu7as1258h4439b2h11p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pMk2WEyI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uu7as1258h4439b2h11p.png" alt="Alt Text" width="880" height="162"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Helper methods
&lt;/h3&gt;

&lt;p&gt;We were using helpers methods to check if anyone logged in and to see who is our current user.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m7K7hLDi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xatvmnqm7iru5hs1l2ac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m7K7hLDi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xatvmnqm7iru5hs1l2ac.png" alt="Alt Text" width="880" height="210"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;logged_in&lt;/strong&gt; will give us the boolean value of session[:user_id]. Remember that falsy values in Ruby are 'nil' and 'false' all others are truthy (even empty arrays or strings). Therefore if no one is logged in we wouldn't set session[:user_id].&lt;/p&gt;

&lt;p&gt;&lt;em&gt;session[:user_id]=@something.id&lt;/em&gt;&lt;br&gt;
&lt;em&gt;#=&amp;gt; nil&lt;/em&gt;&lt;br&gt;
&lt;em&gt;!session[:user_id]=@something.id&lt;/em&gt;&lt;br&gt;
&lt;em&gt;#=&amp;gt; true&lt;/em&gt;&lt;br&gt;
&lt;em&gt;!!session[:user_id]=@something.id&lt;/em&gt;&lt;br&gt;
&lt;em&gt;#=&amp;gt; false&lt;/em&gt;&lt;br&gt;
if someone is logged in:&lt;br&gt;
&lt;em&gt;!!session[:user_id]=@something.id&lt;/em&gt;&lt;br&gt;
&lt;em&gt;#=&amp;gt; true&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;current_user&lt;/strong&gt; will use &lt;em&gt;find_by&lt;/em&gt; method to match 'id' any instance of Dispatcher object with &lt;em&gt;session[:user_id]&lt;/em&gt; &lt;br&gt;
If &lt;em&gt;current_user&lt;/em&gt; is true it will return found instance which we can later use to grant or denied access from certain parts of our application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clearing sessions
&lt;/h3&gt;

&lt;p&gt;Log out from our application will be done by clearing sessions or setting &lt;em&gt;session[:user_id]&lt;/em&gt; to &lt;strong&gt;nil&lt;/strong&gt;. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UOQWtx5h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swnfxnb750n8fb8dkt2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UOQWtx5h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swnfxnb750n8fb8dkt2e.png" alt="Alt Text" width="880" height="96"&gt;&lt;/a&gt;&lt;br&gt;
Our application (session) is ready for new users to be logged in. &lt;/p&gt;

</description>
      <category>sinatra</category>
      <category>flatiron</category>
      <category>session</category>
    </item>
    <item>
      <title>Phase_one, CLI project</title>
      <dc:creator>Milan Zivkovic</dc:creator>
      <pubDate>Sat, 06 Feb 2021 22:37:54 +0000</pubDate>
      <link>https://forem.com/zicna/phaseone-cli-project-f90</link>
      <guid>https://forem.com/zicna/phaseone-cli-project-f90</guid>
      <description>&lt;p&gt;Phase One in my Software engineering course at Flatiron is coming to an end. The final two weeks are scheduled for building the CLI project. To be perfectly honest I was behind with lessons and labs and project weeks started for me with two labs left undone. Luckily our cohort leader was very encouraging and point me in the right direction and that I can go back and finish those labs later on. &lt;/p&gt;

&lt;p&gt;Missing my group lectures meant there was a lot of reading and watching to do. Search for free Apis' with no key required was a bit harder than I thought at first but again, our cohort leader helped us on this matter too. Finally, I got one that looked usable to me, Repl was the next stop. I was going through Api to see what info I could use for my project and how hard (complicated) would it be to extract the info I might need. &lt;br&gt;
After the init-Repl phase, I had a list of all keys I could use in every object build from Api. Now it was time to make a story of my command-line interfaces (CLI) and this was where I made more than one misstep. Thinking that it would be too simple for my application to do "just that" I overcomplicated it which put me on a sidetrack and cost me a whole evening of work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Story of my Cli application:&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Welcome our new user, and offer him to take a look at our beer selection.&lt;/li&gt;
&lt;li&gt;Ask the user would he/she like to know more about any beer from our list (here we would offer the option to "exit" the app).&lt;/li&gt;
&lt;li&gt;If he chooses to know more about a certain beer we would confirm that we "heard" right and output a short description about the beer he desired.&lt;/li&gt;
&lt;li&gt;We would offer him all other information about his/her selection if the user wishes to know more or to go back to the beer list.&lt;/li&gt;
&lt;li&gt;Steps 3. and 4. could be repeated as many time user would like.&lt;/li&gt;
&lt;li&gt;At the end before the user leaves our application we would output all his selections and greet him on the way out.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Application buildup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Test ground&lt;/strong&gt; - Cli application would be built around 3 classes. &lt;em&gt;Api&lt;/em&gt; class - would be responsible to fetch all data from open source and transform it into a usable hash.&lt;br&gt;
&lt;em&gt;Beer&lt;/em&gt; class - would receive a hash from Api class and create attributes.&lt;br&gt;
&lt;em&gt;Cli&lt;/em&gt; class - would communicate with the user by main #call method.&lt;br&gt;
&lt;strong&gt;test.rb&lt;/strong&gt; - the place where 3 classes would first see the "light of a day". The focus was on making it work without worrying about file communication. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.rubyguides.com/2018/09/ruby-gems-gemfiles-bundler/"&gt;Bundle install&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;$mkdir folder_name&lt;/em&gt;&lt;br&gt;
=&amp;gt; create a new folder for your project&lt;br&gt;
&lt;em&gt;$cd folder_name&lt;/em&gt;&lt;br&gt;
=&amp;gt; change the current working directory to folder build for your new project&lt;br&gt;
&lt;em&gt;$pwd&lt;/em&gt;&lt;br&gt;
=&amp;gt; print Current Working Directory, just to check are you in the right one &lt;br&gt;
&lt;em&gt;$ bundle gem project_name&lt;/em&gt;&lt;br&gt;
=&amp;gt; creates a whole structure with files and folders&lt;br&gt;
=&amp;gt; &lt;a href="https://guides.rubygems.org/name-your-gem/"&gt;naming your gem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;bin folder&lt;/strong&gt; - This would be the entering point of our program, this is where you will create your run file.&lt;br&gt;
&lt;em&gt;$touch beer_projet&lt;/em&gt;&lt;br&gt;
=&amp;gt; this will create a new file in our bin folder&lt;br&gt;
&lt;em&gt;$ls -lah&lt;/em&gt;&lt;br&gt;
=&amp;gt; list of all files (example: drwxr--r-- file_name), where we can see if it is executable or not&lt;br&gt;
=&amp;gt;file that we made will not have "x" which means it doesn't have  "executable permission". &lt;br&gt;
&lt;em&gt;$chmod +x beer_project&lt;/em&gt;&lt;br&gt;
=&amp;gt; add "executable permission".&lt;br&gt;
  &lt;strong&gt;./bin/beer_project&lt;/strong&gt;&lt;br&gt;
line 1. &lt;em&gt;#!/usr/bin/env ruby&lt;/em&gt; - this will tell our file in what environment he needs to run it (since there is no file extension this is needed).&lt;br&gt;
line 5. the "run" file needs to "look" only at your environment file by "require_relative" it.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rrag3lVn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r2we8hhlzv6lot9t0prn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rrag3lVn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r2we8hhlzv6lot9t0prn.png" alt="Alt Text" width="880" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;lib folder&lt;/strong&gt;&lt;br&gt;
Place of your &lt;em&gt;environment.rb&lt;/em&gt; file (originally it was named &lt;em&gt;beer_project.rb&lt;/em&gt;) and folder that will contain all our classes in separate files.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FWdz15vH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bqqusn6qb7az02fy38og.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FWdz15vH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bqqusn6qb7az02fy38og.png" alt="Alt Text" width="880" height="577"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Api class&lt;/strong&gt;&lt;br&gt;
Is responsible to "fetch" data from provided &lt;em&gt;url&lt;/em&gt; with help of &lt;em&gt;&lt;a href="https://rubygems.org/gems/httparty/versions/0.13.7"&gt;httparty gem&lt;/a&gt;&lt;/em&gt; and convert it into a usable hash that will be forwarded to Beer class.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nJjZyQwo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6xov9o7e004ywt8u50d3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nJjZyQwo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6xov9o7e004ywt8u50d3.png" alt="" width="880" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Beer class&lt;/strong&gt;&lt;br&gt;
Every time beer_hash is created in Api class it will instantiate Beer class to create a new instance with attributes provided by beer_hash.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fKoEGr7f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7038kpwxsggjp4ax4rei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fKoEGr7f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7038kpwxsggjp4ax4rei.png" alt="Alt Text" width="880" height="270"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Cli class&lt;/strong&gt;&lt;br&gt;
Creating a call method was something that gave me a lot of headaches. &lt;em&gt;binding.pry&lt;/em&gt; was really helpful but in the end, I went back to &lt;em&gt;&lt;a href="https://repl.it/@MilanZivkovic/First-project-Cli-class-call#main.rb"&gt;Repl&lt;/a&gt;&lt;/em&gt; to build a skeleton for the main method. It was faster to test concepts and there was less distraction. Here I used and abused the idea of helper methods which gave me a better approach for debugging my call method. &lt;br&gt;
&lt;strong&gt;Git&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;$git status&lt;/em&gt; =&amp;gt; checking if we have a git already build if no then we can run:&lt;br&gt;
&lt;em&gt;$pwd&lt;/em&gt; =&amp;gt; if we are in the right folder&lt;br&gt;
&lt;em&gt;$git init&lt;/em&gt; =&amp;gt; create git &lt;br&gt;
&lt;em&gt;$git status&lt;/em&gt; =&amp;gt; show us all altered files &lt;br&gt;
&lt;em&gt;$git add .&lt;/em&gt; =&amp;gt; add all files to the staging area, where we can also go by folder name if we want to add only a specific file&lt;br&gt;
&lt;em&gt;$git commit -m "message"&lt;/em&gt; =&amp;gt; commit files from staging area to our local git with a message of choice &lt;br&gt;
&lt;strong&gt;Github&lt;/strong&gt;&lt;br&gt;
On my Github page, I create a new repository named "beer_project".&lt;br&gt;
Back in terminal(all these commands will be offered on your Github):&lt;br&gt;
&lt;em&gt;$git remote and origin "github.com..."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;$git branch -M main&lt;/em&gt;&lt;br&gt;
&lt;em&gt;$git push -u origin main&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These were the main steps for my first CLI project after which fine-tuning came in place (resolving a few "bugs" along with typos which I am sure can be found here as well).&lt;br&gt;
Anyway, for the very first time since starting the Flatiron software engineering course, I was in front of a whiteboard that needed to become a command-line interface application. It felt more than once overwhelming but going back to the lessons and videos provided by FI was big help. Our cohort leader and those open hours were great resources that helped me more than once to bring this phase and project to an end.&lt;/p&gt;

</description>
      <category>flatiron</category>
      <category>cli</category>
      <category>ruby</category>
    </item>
    <item>
      <title>First-mile blog </title>
      <dc:creator>Milan Zivkovic</dc:creator>
      <pubDate>Sun, 20 Dec 2020 21:26:08 +0000</pubDate>
      <link>https://forem.com/zicna/first-mile-blog-36e4</link>
      <guid>https://forem.com/zicna/first-mile-blog-36e4</guid>
      <description>&lt;p&gt;Reminiscing &lt;br&gt;
    The only subject in high school that I didn’t have a problem with was Math. The reason for this was that it felt like training. Some light warming up, a bit of reading, one more set on ergometer, one more set in the gym, one more problem to solve…the more time you spend running, reading,  rowing, studying,  biking,... the better you will be, really keeps you on track.&lt;/p&gt;

&lt;p&gt;Wrong track&lt;br&gt;
    A few years later it’s time to go to college. Not knowing what I wanted to do I ended up hopping on the wrong “train”. No matter how long you ride it, all the stations you pass along seem wrong. Biology, Ecology, Chemistry were nice but nothing that I would get hung upon. To be perfectly honest, I only stayed for scholarships and dorms, and those were not given easily. You had to keep your grades high since the evaluation was every year.  It was my way to be independent in a “big” city. Looking back I wish I had exited the first station and hitchhiked back not caring what anybody would say. But that would mean to “get out of the box”.&lt;/p&gt;

&lt;p&gt;Is it wrong if it feels right?&lt;br&gt;
       Fast forward a few years and I am M.S. in the Faculty of Science with no clue what to do next. When the position of teaching assistant at my university came as an option I grabbed it with both hands. This was a very productive time. People around me were very open and helpful. Working in a group, project deadline, and daily work in the lab with students was challenging as much as rewarding. After two years I felt it was the right time to try myself in a new field.&lt;/p&gt;

&lt;p&gt;“The Real” world&lt;br&gt;
       Performance pressure was something that I encountered here for the first time since exams in College.  This time it was about money! Weekly and monthly statistics about team performance, scoreboard, gross/net were new tests to pass and ace! It was definitely out of my comfort zone at the time. For over 7 years in logistics in almost all positions in the company (but CEO, :) ) I witnessed job shifting toward new technologies. As time went by people had to learn and adapt to new software and less manual work. More and more companies were looking for software engineers to solve problems they had or to upgrade their business. &lt;/p&gt;

&lt;p&gt;Research&lt;br&gt;
        Learning how new software is working, getting faster at it was part of the job but how it’s built was picking my brain. FreeCodeCamp was the first place I stumbled upon, then came Udemy and a lot of tutorials on YT. It felt nice learning new things but the sound of a squeaky brain was so annoying. It took me a while before I learned enough JS syntax to solve my first coding challenge and even more to build my first web app. It was a simple calculator converting running pace to projected finish time on a race. Nothing much but it’s a handy tool that I am still using before or after every run. Knowing how much better you become by running with a group, how someone can give you a push or that you can pull someone if he is slipping brought me to Flatiron.&lt;/p&gt;

&lt;p&gt;“The right train”&lt;br&gt;
         Now I am a Flatiron student on a software engineering course, learning about Ruby, discussing code with others, and feeling really good about this road we all started. The first station is just around the corner and this genuinely feels like the right train for me! &lt;/p&gt;

</description>
      <category>firstpost</category>
      <category>flatiron</category>
    </item>
  </channel>
</rss>
