<?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: José Córdova</title>
    <description>The latest articles on DEV Community by José Córdova (@jfernancordova).</description>
    <link>https://dev.to/jfernancordova</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%2F53986%2F300f3474-af11-4fa4-a578-20aa46825793.jpeg</url>
      <title>DEV Community: José Córdova</title>
      <link>https://dev.to/jfernancordova</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jfernancordova"/>
    <language>en</language>
    <item>
      <title>Quick Guide To Big O Notation</title>
      <dc:creator>José Córdova</dc:creator>
      <pubDate>Sat, 31 Dec 2022 15:46:17 +0000</pubDate>
      <link>https://dev.to/jfernancordova/quick-guide-to-big-o-notation-acb</link>
      <guid>https://dev.to/jfernancordova/quick-guide-to-big-o-notation-acb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When we develop a feature, there are many alternatives that may be complex or demand a deeper knowledge, therefore we tend to build any solution in order to complete the requirement, we are quite certain it will work because all the uses cases we implement are testeable and reliable. &lt;br&gt;
However, when this feature is released, everything appears to be fine, as the company/startup/client you work for grows and the input size grows due to the new users, the application suddenly becomes very slow, the SRE's or DevOps's discover the bug and it appears that there is a feature whose performance is poor.&lt;/p&gt;

&lt;p&gt;When this type of issue arises, we begin learning about new concepts related computer science and software engineering, we ask ourselves something like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How could we know if any feature we implement is fast and it is going to be ok if the input size grows?&lt;/li&gt;
&lt;li&gt;How could we know the complexity of an algorithm?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simple answer is &lt;strong&gt;Big O notation&lt;/strong&gt;, before we go any further. I'd like to share this quote: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pragmatic Programmers estimate the resources that algorithms use—time, processor, memory, and so on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Chapter 3: The Basic Tools&lt;/strong&gt; from &lt;a href="https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052" rel="noopener noreferrer"&gt;The Pragmatic Programmer&lt;/a&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  What is Big O Notation?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It is a tool used to compare the efficiency of different algorithms.&lt;/li&gt;
&lt;li&gt;It helps us to describe the complexity of an algorithm. &lt;/li&gt;
&lt;li&gt;It gives us a estimation of an algorithm's running time.&lt;/li&gt;
&lt;li&gt;It describes the &lt;strong&gt;worst case scenario&lt;/strong&gt; which measures the maximum amount of time that an algorithm will take to execute, given the largest possible input.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key concepts:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Complexity Analysis:&lt;/em&gt; Describes how efficient an algorithm is (time + space).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Time Complexity:&lt;/em&gt; Measures how fast an algorithm is.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Space Complexity:&lt;/em&gt; Measures how much memory will take up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key rules:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Ignore the constants:&lt;/em&gt; constant values are ignored because it doesn't affect the growth rate of the function as the input size becomes very large.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Complexities
&lt;/h2&gt;

&lt;p&gt;I'll include some golang snippets to help clarify them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;h3&gt;
  
  
  O(1): Constant Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time is independent of the size of the input. No matter how large the input is for this complexity. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;em&gt;accessing a value with an array index.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;A quick problem:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        Given two non-negative integers low and high. 
        Return the count of odd numbers between low and high (inclusive).

        O(1) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;countOdds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;high&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;low&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;h3&gt;
  
  
  O(n): Linear Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time of our algorithms is proportional to the size of the input.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;em&gt;Loop to print out the values of an array&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;A quick problem:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        Given a string s, find the first non-repeating character in 
        it and return its index. If it does not exist, return -1.

        O(n) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;firstUniqChar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;nonRepeated&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;rune&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;char&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;nonRepeated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;char&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;char&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;range&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;nonRepeated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;char&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;h3&gt;
  
  
  O(n^2): Cuadratic Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time is proportional to the square of the size of the input.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Bubble_sort" rel="noopener noreferrer"&gt;Bubble Sort&lt;/a&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;A quick problem:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        Bubble Sort is the simplest sorting algorithm that works 
        by repeatedly swapping the adjacent elements 
        if they are in the wrong order.

        O(n^2) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;isSorted&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
        &lt;span class="n"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isSorted&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;isSorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                    &lt;span class="n"&gt;isSorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;h3&gt;
  
  
  O(log n): Logarithmic Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time grows at a slower rate as the size of the input grows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Binary_search_algorithm" rel="noopener noreferrer"&gt;Binary Search&lt;/a&gt;&lt;/em&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        Given an array of integers nums which is sorted in ascending order, 
        and an integer target, write a function to search
        target in nums. If target exists, then return its index. 
        Otherwise, return -1.

        O(log(n)) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;middle&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;middle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;middle&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;middle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;middle&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;middle&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;h3&gt;
  
  
  O(n log n): Logarithmic Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time is O(log n) plus a linear operation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Merge_sort" rel="noopener noreferrer"&gt;Merge sort&lt;/a&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;A quick problem:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        Given an integer array nums, return the largest perimeter of a triangle 
        with a non-zero area, formed from three of these
        lengths. If it is impossible to form any triangle of a 
        non-zero area, return 0.

        O(nlog(n)) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;largestPerimeter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Ints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;h3&gt;
  
  
  O(2^n): Exponential Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time increases exponentially as the input size increases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Fibonacci_number" rel="noopener noreferrer"&gt;Fibonacci&lt;/a&gt;&lt;/em&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        The Fibonacci numbers, commonly denoted F(n) form a sequence, 
        called the Fibonacci sequence, such that each number is
        the sum of the two preceding ones, starting from 0 and 1.

        O(2^n) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;h3&gt;
  
  
  O(n!): Factorial Time
&lt;/h3&gt;

&lt;p&gt;It means that the running time which grows as the factorial of the input size.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A quick problem:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight go"&gt;&lt;code&gt;    &lt;span class="c"&gt;/*
        O(n!) time | O(1) space
    */&lt;/span&gt;
    &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;nRuntime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;nRuntime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sequence:
&lt;/h3&gt;

&lt;p&gt;Once we understand these complexities, we must be certain of the sequence from dreadful to good:&lt;/p&gt;


&lt;p&gt;&lt;br&gt;
&lt;code&gt;O(1) &amp;lt; O(logn) &amp;lt; O(n) &amp;lt; O(nlogn) &amp;lt; O(n^2) &amp;lt; O (2^n) &amp;lt; O(n!)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Key concept:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Size of the input:&lt;/em&gt; Number of items that our algorithm will process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phone Book Example
&lt;/h2&gt;

&lt;p&gt;This is a clever example of how to use these complexities; it may be the most human-friendly explanation; I strongly recommend that you read it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/a/2307314/8333846" rel="noopener noreferrer"&gt;The Yellow Pages&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Big-O Cheat Sheet
&lt;/h2&gt;

&lt;p&gt;All of these concepts are difficult to grasp, thus this &lt;a href="https://www.bigocheatsheet.com/" rel="noopener noreferrer"&gt;Cheat Sheet&lt;/a&gt; is the finest resource I've discovered for refreshing our memory every time we need to utilize it.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>programming</category>
      <category>computerscience</category>
      <category>go</category>
    </item>
    <item>
      <title>First Hacktoberfest Experience</title>
      <dc:creator>José Córdova</dc:creator>
      <pubDate>Sun, 25 Oct 2020 20:41:17 +0000</pubDate>
      <link>https://dev.to/jfernancordova/my-first-hacktoberfest-experience-37ik</link>
      <guid>https://dev.to/jfernancordova/my-first-hacktoberfest-experience-37ik</guid>
      <description>&lt;h2&gt;
  
  
  Experience
&lt;/h2&gt;

&lt;p&gt;I participated for the first time and, I could say, &lt;strong&gt;it was amazing&lt;/strong&gt;.  I'm so happy to contribute to this great community and help to solve challenges. &lt;/p&gt;

&lt;h3&gt;
  
  
  Contributions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/CapitanFindusFI/carbonsh-cli/pull/3" rel="noopener noreferrer"&gt;Carbon.sh CLI | Removing APIs and dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/laminas/laminas-validator/pull/75" rel="noopener noreferrer"&gt;laminas-validator | PHP 8.0 support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Devsome/silkroad-laravel/pull/73" rel="noopener noreferrer"&gt;Silkroad Laravel | Upgrade to Laravel 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/offline-agency/laravel-fatture-in-cloud/pull/26" rel="noopener noreferrer"&gt;Laravel integration with Fatture in Cloud | Add Laravel 8 support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/graycoreio/mage2docker/pull/12" rel="noopener noreferrer"&gt;Mage2Docker | Add a mailhog container by default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/phpsu/phpsu/pull/167" rel="noopener noreferrer"&gt;Phpsu: Synchronisation Utility: File and Database | 
PHP 8.0 compatibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fontenele/php/pull/11" rel="noopener noreferrer"&gt;FonteSolutions | nginx + phpfpm docker image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I did not feel intimidated. Thanks to these challenges I could know, explore, and help other developers.&lt;/li&gt;
&lt;li&gt;Maintainers are friend. They suggested and advised my PRs.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hacktoberfest</category>
      <category>github</category>
      <category>opensource</category>
      <category>pushercontest</category>
    </item>
    <item>
      <title>Deploy a RESTful API using Laravel and Docker</title>
      <dc:creator>José Córdova</dc:creator>
      <pubDate>Sun, 13 May 2018 15:19:34 +0000</pubDate>
      <link>https://dev.to/jfernancordova/deploy-a-restful-api-using-laravel-and-docker-31a4</link>
      <guid>https://dev.to/jfernancordova/deploy-a-restful-api-using-laravel-and-docker-31a4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmiua4l9afyp6i49966z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmiua4l9afyp6i49966z8.png" alt="docker-laravel-api-dev" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;API Laravel Boilerplate 5.5&lt;/li&gt;
&lt;li&gt;Apache 2&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Xdebug&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can manage a RESTful API in the fastest, simplest and funniest way! and with open source code dependencies.&lt;/p&gt;

&lt;p&gt;However you can contribute for better performance, the goal is to focus on the code avoiding the configurations and having docker installed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/install/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;Docker Compose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Environments
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dev or Local Mode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;docker-compose-dev.yml: generate automatically folders and require-dev dependencies on your local workspace including Xdebug.
Note: the yaml file has a key called:"XDEBUG_MODE", this yaml by default has the value true (1) to install it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can appreciate the dependencies generated automatically on your workspace!&lt;/p&gt;

&lt;h3&gt;
  
  
  Play with Docker Mode
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://play-with-docker.com?stack=https://raw.githubusercontent.com/jfernancordova/docker-laravel-api-dev/master/docker-compose-pwd.yml" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2lk9iu6rhnut8ukgbc6.png" alt="Play With Docker" width="132" height="31"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;docker-compose-pwd.yml: you can use it to visualize this environment and test it, however, you should see the container lists to verify the HEALTHCHECK.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# container lists&lt;/span&gt;
docker ps
&lt;span class="c"&gt;# make sure that the docker dockerlaravelapidev_php_1 or php container is (healthy),&lt;/span&gt;
normally the process begins &lt;span class="k"&gt;in &lt;/span&gt;starting mode &lt;span class="o"&gt;(&lt;/span&gt;health: starting&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Production Mode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;docker-compose-prod.yml: if you are going to use this yaml, make sure to generate the migrations before!, you can modify the entrypoint to generate them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker Environments
&lt;/h3&gt;

&lt;p&gt;Clone this repository and run the following commands based on your orchestrator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Swarm Mode
&lt;/h3&gt;

&lt;p&gt;Clone this repository and run the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;docker-laravel-api-dev/
docker stack deploy &lt;span class="nt"&gt;-c&lt;/span&gt; docker-compose-dev.yml docker-laravel-api-dev
&lt;span class="c"&gt;# wait for the HEALTHCHECK in healthy mode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docker Compose
&lt;/h3&gt;

&lt;p&gt;Clone this repository and run the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;docker-laravel-api-dev/
docker-compose &lt;span class="nt"&gt;-f&lt;/span&gt; docker-compose-dev.yml up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; 
or to see the logs 
docker-compose &lt;span class="nt"&gt;-f&lt;/span&gt; docker-compose-dev.yml up 
&lt;span class="c"&gt;# wait for the HEALTHCHECK in healthy mode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running the tests
&lt;/h2&gt;

&lt;p&gt;You have a &lt;a href="https://travis-ci.org/" rel="noopener noreferrer"&gt;Travis&lt;/a&gt; Pipeline to apply Continous Integration, and other technology to test this environment.&lt;/p&gt;

&lt;p&gt;You can modify the runtests.sh from the &lt;a href="https://raw.githubusercontent.com/jfernancordova/docker-laravel-api-dev/master/scripts/runtests.sh" rel="noopener noreferrer"&gt;scripts folder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Insert jobs, instructions builds in &lt;a href="https://raw.githubusercontent.com/jfernancordova/docker-laravel-api-dev/master/.travis.yml" rel="noopener noreferrer"&gt;this pipeline&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Github Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jfernancordova/docker-laravel-api-dev" rel="noopener noreferrer"&gt;docker-laravel-api-dev&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  API Boilerplate Reference
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/francescomalatesta/laravel-api-boilerplate-jwt/blob/master/readme.md" rel="noopener noreferrer"&gt;laravel-api-boilerplate-jwt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Author
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jfernancordova" rel="noopener noreferrer"&gt;José Fernando Cordova&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;This project is licensed under the MIT License - see the &lt;a href="https://github.com/jfernancordova/docker-laravel-api-dev/blob/master/LICENSE.md" rel="noopener noreferrer"&gt;LICENSE.md&lt;/a&gt; file for more details.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>docker</category>
      <category>api</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
