<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="151277" data-post-id="151277">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wolfiton" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wolfiton/120/15884_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wolfiton
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks i will watch it and come back with my impressions, if that is alright.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151277" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-151277" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151277"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="151282" data-post-id="151282">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wolfiton" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wolfiton/120/15884_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wolfiton
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><strong>I will update this as I am watching because it’s a lot of info to cover:</strong></p>
<p><strong>This is my personal opinion on the video provided by <a class="mention" href="/u/kokolegorille" rel="nofollow">@kokolegorille</a> with the title Functional Design Patterns</strong></p>
<p><strong>Also feel free to offer feedback on this as i am editing thanks.</strong></p>
<p>So I like very much how the gentleman Scott Wlaschin uses a Summary for his presentation and explains what to expect from his talk and what not. Then he uses familiar concepts to present what you can learn and how much deep, he will cover the topics that were in the summary.</p>
<p><strong>Summary of the talk:</strong></p>
<ul>
<li>
<p><strong>Core principles of Functional Programming design</strong></p>
<ul>
<li>Functions types and composition</li>
</ul>
</li>
<li>
<p><strong>Functions as parameters</strong></p>
<ul>
<li>Functions as interfaces</li>
<li>Partial application &amp; dependency injection</li>
<li>Continuations, chaining &amp; the pyramid of doom</li>
</ul>
</li>
<li>
<p><strong>Monads</strong></p>
<ul>
<li>Error handling, Async</li>
</ul>
</li>
<li>
<p><strong>Maps</strong></p>
<ul>
<li>Dealing with wrapped data</li>
</ul>
</li>
<li>
<p><strong>Monoids</strong></p>
<ul>
<li>Aggregating data and operations</li>
</ul>
</li>
</ul>
<p>So let’s start with the first part of the summary:</p>
<p><strong>Core principles of Functional Programming design</strong></p>
<ul>
<li>Functions types and composition</li>
</ul>
<p>The introduction to functions and the possibility of using them as input and an output was made very easy by using the analogy of fruits and also by providing an real world example later on.</p>
<p>Also the use of diagrams to represent the functions and how the data flows helped me understand better the principles of function composition.</p>
<p>Thus the following quote is born:</p>
<blockquote>
<p><strong>Composition can only be achieved using a single parameter function</strong></p>
</blockquote>
<p>The real world example was how an web application can be built from multiple functions that were composited together to form the final application.</p>
<p>I think a good analogy to composition would be building a snow man from snow. You can make different parts and then glue them together. Too form the whole snow man.</p>
<p>Types can also be put together or composited in a single big function and the analogy of the salad made this very easy to understand the function of <strong>AND</strong>. The <strong>OR</strong> function was also easy to grasp when the analogy of the snack was used to show the difference between the two.</p>
<p>The use case of <strong>OR</strong> and <strong>AND</strong> was present in a real world example related to card processing scenario which made the whole theory go into practice really nice.</p>
<p>Then we go to <strong>THE DESIGN BY TOTALITY</strong></p>
<p>Using the types to enforce some rules really helped me to see the usefulness of guards from elixir here and also the need of constraints on data to handle each possible scenario so that my application doesn’t return unexpected results.</p>
<p>The second part:</p>
<ul>
<li><strong>Functions as parameters</strong>
<ul>
<li>Functions as interfaces</li>
<li>Partial application &amp; dependency injection</li>
<li>Continuations, chaining &amp; the pyramid of doom</li>
</ul>
</li>
</ul>
<p>Creating function using generic and parameter-ize everything for a dry code really impressed me and offered a good example of what decoupling can do.As a result the function become much more flexible and the DRY principle took charge.</p>
<p>The functions as interfaces part really change the way I was thinking about sharing the same functions with other functions. Basically if we have multiple functions that need the same data types then an interface is a good way to keep the code DRY. Probably that the equivalent in elixir for this part would be the behaviors specifications.</p>
<p>Then we go to  <strong>THE STRATEGY PATTERN</strong></p>
<p>That adds and extra parameter to function that leads to another function that contains the strategy.</p>
<p>Then we go to  <strong>THE DECORATOR PATTERN</strong></p>
<p>That makes sure that the first function and the last function keep there expect types. An example offered in this talk was like this</p>
<p>int is_even bool</p>
<p>So between the int there is a function is_even and it expects a result in a type of the bool true or false. But it’s can’t return a result of a different type like string or int.</p>
<p>And no matter how many compositions o function i make the input should be an int and the result should also be returned as a bool.</p>
<p>I think this part is similar to guard in elixir where only certain types can be returned.</p>
<blockquote>
<p><strong>So every function is a single parameter function in functional programming</strong></p>
</blockquote>
<p>Then the author provides some examples to prove that what he stated above is true and the following qoute is born:</p>
<blockquote>
<p><strong>Every multiple parameter function can be converted into a single parameter function</strong></p>
</blockquote>
<p>Then we go to  <strong>THE PARTIAL APPLICATION PATTERN &amp; DEPENDENCY INJECTION</strong></p>
<p>Chunks of the function are taken out and converted once again into a <strong>SINGLE PARAMETER FUNCTION</strong></p>
<p>Then to demonstrate this pattern in a real example using  the retrieval of a customer from the database.</p>
<p>Also in this example appears the <strong>PERSISTENCE IGNORANCE</strong>, which can be translated as I don’t care from which source my data comes. In our example we don’t care if the <strong>Customer</strong> <strong>comes from server or a cache</strong>.<br>
As far as i know elixir doesn’t have something similar for dependency injection. The closest Thing i could find was this post <a href="https://forum.elixirforum.com/t/how-to-use-dependency-injection-pattern-in-elixir/3202/3" class="inline-onebox" rel="nofollow">How to use dependency injection pattern in Elixir? - #3 by kostonstyle</a>.</p>
<p>Then we go to the sow on the road with   <strong>THE HOLLYWOOD PRINCIPLE’*': continuation PATTERN</strong></p>
<p>Also known as <strong>DON’T CALL US WILL CALL YOU</strong></p>
<p>Then we visit the pyramids of doom, doesn’t sound like dungeon of the game, weird right? But it is not game, it’s the multiple null check hell or nested null. In elixir we use a monad every time when we define a module or a function and that is the… you guessed it the <strong>DO</strong>.</p>
<p>Also monads can be defined as chaining continuation.</p>
<p>Then this hit me in the video:</p>
<blockquote>
<p><strong>How do we combine mismatch functions?</strong></p>
</blockquote>
<blockquote>
<p><strong>We glue them together using bind</strong></p>
</blockquote>
<blockquote>
<p><strong>Bind all the things</strong></p>
</blockquote>
<p>So transforming a one input and 2 outputs in match of 2 inputs and 2 outputs will allow us to convert the pyramid of doom into single parameter function. <strong>Well that is good but what do we do in elixir, we don;t have bind could we use cond?</strong></p>
<p>Then the author goes in demonstrating this principle using an error validation on certain database transactions.</p>
<p>OK so now we go on a train ride because this type of solving this particular problem is called by the author <strong>Railway Oriented  Programming</strong></p>
<p>So what can I say as an ending. Definitely a nice talk in an easy and fun way to look at <strong>FP principles and some patterns</strong> that could be used in different situations.</p>
<p>A must see video for an easy introduction to <strong>FP(Functional Programming) Programming</strong></p>
<p>Thanks <a class="mention" href="/u/kokolegorille" rel="nofollow">@kokolegorille</a> for showing to me this video.</p>
<p>Also If i made some mistakes let me know and i will correct them.</p>
<p>Time for me to fly, I hope that my insight would be enjoyed by others.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151282" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-151282" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151282"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="151291" data-post-id="151291">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wolfiton" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wolfiton/120/15884_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wolfiton
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Also if someone can point out the elixir equivalents in this talk i would be very grateful.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151291" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-151291" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151291"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="151301" data-post-id="151301">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="kokolegorille" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/kokolegorille/120/4784_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  kokolegorille
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The author of the talk is also the author of…</p>
<aside class="quote quote-modified" data-post="1" data-topic="6150">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mkunikow/48/235_2.png" class="avatar">
    <div class="quote-title__text-content">
      <a href="https://forum.elixirforum.com/t/functional-programming-domain-modeling-made-functional-pragprog-f/6150" rel="nofollow">[Functional Programming] Domain Modeling Made Functional (Pragprog) (F#)</a> <a class="badge-category__wrapper " href="/c/general-programming-archived/17" rel="nofollow"><span data-category-id="17" style="--category-badge-color: #9A7773; --category-badge-text-color: #FFFFFF;" data-drop-close="true" class="badge-category --style-square " title="Now archived - please use the new polyglot forum…"><span class="badge-category__name">General Prog (Archived)</span></span></a>
    </div>
  </div>
  <blockquote>
    <a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/c/c57607d0c0ff2e2b77b3ea19bbf42c8ff7792664.jpg" data-download-href="https://forum.elixirforum.com/uploads/default/c57607d0c0ff2e2b77b3ea19bbf42c8ff7792664" title="swdddf.jpg" rel="nofollow">[image]</a> 

by Scott Wlaschin 
You want increased customer satisfaction, faster development cycles, and less wasted work. Domain-driven design (DDD) combined with functional programming is the innovative combo that will get you there. In this pragmatic, down-to-earth guide, you’ll see how applying the core principles of functional programming can result in software designs that model real-world requirements both elegantly and concisely—often more so than an object-oriented approach. Practical exa…
  </blockquote>
</aside>

<p>After watching this talk, I bought the book, even if it has only F# code</p>
<p>I tried to translate types in this post <a href="https://forum.elixirforum.com/t/type-and-spec-dialyzer-not-detecting-error/6608" class="inline-onebox" rel="nofollow">Type and spec - Dialyzer not detecting error</a></p>
<p>But it’s hard to compare type_spec with F# type system <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151301" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-151301" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151301"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="151303" data-post-id="151303">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wolfiton" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wolfiton/120/15884_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wolfiton
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for the link explaining the types of F# and also the book link</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151303" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-151303" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151303"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="151305" data-post-id="151305">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mkunikow" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mkunikow/120/235_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mkunikow
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>yes typed language is typed language … <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"><br>
specially like ML languages</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151305" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-151305" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151305"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="151307" data-post-id="151307">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="kokolegorille" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/kokolegorille/120/4784_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  kokolegorille
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="wolfiton" data-post="13" data-topic="26949">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wolfiton/48/15884_2.png" class="avatar"> wolfiton:</div>
<blockquote>
<p><strong>Well that is good but what do we do in elixir, we don;t have bind could we use cond?</strong></p>
</blockquote>
</aside>
<p>We don’t <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>the Elixir way is to use <strong>with do… end</strong></p>
<p>As mentionned, F# belongs to ML family, while Erlang is FP only to facilitate CSP.</p>
<p>To quote Joe Armstrong in a previous post, <strong>Forget about monads</strong>, at least in Erlang/Elixir.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151307" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-151307" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151307"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="151720" data-post-id="151720">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dch" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dch/120/2682_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dch
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The most significant thing I have learned is to understand the <em>concurrent</em> flow of data through your system – a common mistake is to throw GenThingies at every piece of data; Elixir is not an OOP environment.</p>
<p>So, for example, data flows into your system from HTTP request, or from some database call. At this point, your DB layer or HTTP server will probably have a function invocation per request.</p>
<p>Ensure that each request can be processed through as many <em>functions</em> as possible – not <em>processes</em> as possible. Each move of data between processes, and possibly GenServers, is another opportunity for copying data, moving things into mailboxes (a singleton queue), and slows you down.</p>
<p>Make sure you know what each function is doing, for example ConCache is excellent, but you need to be aware that it is using ETS tables behind the scenes. ETS requires copying data in    &amp; out of the heap. Other modules will have GenServers with a functional interface - usually for good reason, but again, another opportunity to block things in mailboxes/queues if that GenServer is handling multiple user requests itself.</p>
<p>If all your data flows smoothly through functions, minimising process changes, then this allows the BEAM to maximise its performance without needing to shuffle data around in memory.</p>
<blockquote>
<p>Make it work, then make it beautiful, then if you really, really have to, make it fast. 90% of the time, if you make it beautiful, it will already be fast. So really, just make it beautiful!<br>
—Joe Armstrong</p>
</blockquote>
<p>Wiser words than that are harder to find around here.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151720" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-151720" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151720"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="151734" data-post-id="151734">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wolfiton" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wolfiton/120/15884_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wolfiton
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for providing your experience and suggestions to this discussion</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="151734" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/performance-guide-and-a-design-pattern-learning-path/26949/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-151734" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151734"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>