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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-Erlang-Core-Team" data-username="bjorng" data-post="59" data-topic="63088">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bjorng/48/13187_2.png" class="avatar"> bjorng:</div>
<blockquote>
<ul>
<li>Is there any practical difference between putting an implementation inside or outside a module?</li>
<li>What is best praxis for putting a protocol implementation for your own data structure? Inside the module for the data structure? Outside in the same source file? In a separate file?</li>
</ul>
</blockquote>
</aside>
<p>I think a major reason to separate the protocol implementation into its own file would be to minimize recompilation of other files that depend on the file that defines the actual module, so you can make independent changes to the protocol definition.<br>
<a href="https://hexdocs.pm/mix/Mix.Tasks.Xref.html#module-dependency-types" rel="noopener nofollow ugc">https://hexdocs.pm/mix/Mix.Tasks.Xref.html#module-dependency-types</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="329742" 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/elixir-in-action-book-club/63088/62">Post #61</a>
	                </div>
	            </div>
              <div id="likers-container-329742" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329742"
                     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 #61"></div>
  </section>
</div>
    <div class="postbit" id="329913" data-post-id="329913">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>OK, I had been playing catch-up with the general group, and had decided to make a write-up once I was caught up.</p>
<p>To give a little bit of my context: I have been using Elixir for the past 8 months coming from a mostly Python + JS background, therefore my ramp up has been as much about learning the language, as to how to write (mostly) functional programs.</p>
<p>To begin learning about Elixir I went through the official documentation and the first 4 Chapters of the 2nd edition of this book. On both accounts I was able to retain the basic elements, especially as I started putting them in practice on simple Phoenix apps.</p>
<p>So coming back to this book has been great, as I can move on from the basics to more intricate elements of Elixir/BEAM.</p>
<p>I will focus on those points that have stood out for me and I wish to fully keep in my mind as I work:</p>
<p><strong>Chapter 2</strong></p>
<ul>
<li>Aliases are always atoms (this really clarified some function calls with module references)</li>
<li>The distinction of when to use the different access functions for Maps:
<ul>
<li>%{map | update_key: update_value} when keys are not dynamic, Map.put/3 when they are</li>
<li>map.key when the keys are atoms and not dynamic</li>
<li>map[key] along with Map.get/3 when the keys are dynamic (or the keys are not atoms)</li>
<li>finally Map.fetch/2 when they are dynamic and you want more certainty on whether the key existed or not</li>
</ul>
</li>
<li><strong>NOTE</strong> On Strings I would have added how to use the <code>&lt;&gt;</code> operator to split a very long string into multiple lines (without inserting the newline char… for the longest time I was constantly forgetting this and googling it <img src="https://forum.elixirforum.com/images/emoji/apple/face_in_clouds.png?v=15" title=":face_in_clouds:" class="emoji" alt=":face_in_clouds:" loading="lazy" width="20" height="20"> )</li>
<li>IO lists are super interesting… and I have the feeling at some point in my Elixir life they will be relevant (just not sure when or why <img src="https://forum.elixirforum.com/images/emoji/apple/laughing.png?v=15" title=":laughing:" class="emoji" alt=":laughing:" loading="lazy" width="20" height="20">)</li>
</ul>
<p><strong>Chapter 3</strong></p>
<ul>
<li>Even binding variables to values is pattern matching (just a special case of it)</li>
<li>On an <code>if</code> statement if there is no <code>else</code> branch and the main branch is not executed then <code>nil</code> is returned</li>
<li>I had completely forgotten about <code>cond</code> branching</li>
<li>I had completely forgotten about tail recursion</li>
<li>The capture <code>&amp;</code> operator can be used to reference an existing function - via module name, function name, arity - <strong>or</strong> to shorten a lambda definition</li>
</ul>
<p><strong>Chapter 4</strong></p>
<ul>
<li>When the time comes to implement <code>protocols</code> I should remember that there is an example here that I can reference</li>
</ul>
<p><strong>Chapter 5</strong></p>
<ul>
<li>BEAM processes are completely isolated and independent from each other, which means they keep their own copy of their context (so any data passed to them will be deep copied)</li>
<li>A process’ mailbox will operate on FIFO</li>
<li>A <code>receive</code> expression is blocking unless there is an <code>after</code> clause</li>
<li>In general be aware that lambda parameters may not be executed where they are declared! The example of using <code>self()</code> within lambdas was amazing to illustrate this point!</li>
</ul>
<p>OK, this is all for now.</p>
<p>P.S. I’m already curious how this list will change the third time I go through this book <img src="https://forum.elixirforum.com/images/emoji/apple/joy.png?v=15" title=":joy:" class="emoji" alt=":joy:" 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="329913" data-batch-url="/posts/batch_likers">
                        5
                      </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/elixir-in-action-book-club/63088/63">Post #62</a>
	                </div>
	            </div>
              <div id="likers-container-329913" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329913"
                     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 #62"></div>
  </section>
</div>
    <div class="postbit" id="329925" data-post-id="329925">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Chapter 4 completed.</p>
<p>I enjoyed working through the code and exercises, but have only this note.</p>
<p>Exercise: Deleting an entry</p>
<p>When I first implemented this, I replicated the Map.fetch pattern from update_entry, which validates existence of the id.  Then, I looked at the example code which simply calls Map.delete without that check.  That generates an error if the id does not exist.  Of course, that version would also save time on larger collections.  It had me curious as to when I may want to choose one pattern over another, choosing safety vs time savings.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="329925" data-batch-url="/posts/batch_likers">
                        2
                      </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/elixir-in-action-book-club/63088/64">Post #63</a>
	                </div>
	            </div>
              <div id="likers-container-329925" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329925"
                     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 #63"></div>
  </section>
</div>
    <div class="postbit" id="331007" data-post-id="331007">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Chapter 5 completed. Nice chapter - not too long <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>It’s amazing that with just <code>spawn/1</code>, <code>send/2</code> and <code>receive/1</code> and little more the amount that can be achieved!</p>
<p>I particularly enjoyed the part about the inner workings of the Scheduler, and the example of the infinite CPU bound loop which was proven not to block other jobs - it reminded me of the excellent talk from Saša from a few years ago…<br>
<a href="https://www.youtube.com/watch?v=JvBT4XBdoUE" rel="noopener nofollow ugc">The Soul of Erlang &amp; Elixir</a></p>
<p>Looking forward to formalising all this a bit more with <code>GenServer</code>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331007" data-batch-url="/posts/batch_likers">
                        5
                      </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/elixir-in-action-book-club/63088/65">Post #64</a>
	                </div>
	            </div>
              <div id="likers-container-331007" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331007"
                     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 #64"></div>
  </section>
</div>
    <div class="postbit" id="331009" data-post-id="331009">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Chapter 5, check <img src="https://forum.elixirforum.com/images/emoji/apple/white_check_mark.png?v=15" title=":white_check_mark:" class="emoji" alt=":white_check_mark:" loading="lazy" width="20" height="20"> !</p>
<p>Some points that I found to be excellent reminders about BEAM’s concurrency:</p>
<ul>
<li>Data is <em>usually</em> deep copied between processes. This has implications for memory usage considerations and garbage collection simplicity (per-process).</li>
<li>Data is <em>not always</em> deep copied, but instead can sometimes be copied by reference (binaries &gt;64 bytes, literals, :persistent_term). This can have implications for GC as well (e.g. changes in <code>:persistent_term</code>s lead to a heavy GC pass)</li>
<li>The execution window within a scheduler before preemption is around 2000 function calls</li>
<li>Dirty schedulers are kinds of schedulers that can handle long-running CPU-bound tasks (see: dirty NIFs, dirty BIFs, dirty GC)</li>
<li>Process mailboxes are only limited by available memory (!)</li>
</ul>
<p>All in all, I loved how this chapter dug deeper into the specifics of BEAM:s concurrency primitives and their use, such as by highlighting things like Erlang emulator flags. These are the things that one doesn’t typically need for day-to-day operations when working with Elixir, but are still very valuable pieces of information know about on occasion. Love the balance of detail with practicality!</p>
<p>How about others – how’s your Elixir In Action adventure going? <img src="https://forum.elixirforum.com/images/emoji/apple/slightly_smiling_face.png?v=15" title=":slightly_smiling_face:" class="emoji" alt=":slightly_smiling_face:" 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="331009" data-batch-url="/posts/batch_likers">
                        6
                      </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/elixir-in-action-book-club/63088/66">Post #65</a>
	                </div>
	            </div>
              <div id="likers-container-331009" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331009"
                     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 #65"></div>
  </section>
</div>
    <div class="postbit" id="331567" data-post-id="331567">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have completed chapter 5 also.  I didn’t make any notes this time, though I noticed many mentions of ‘later chapters’ to cover more details amount different topics.  I’m looking forward to getting there to see what they have to say.  On a tangent, <code>System.schedulers()</code> reported <code>12</code> for my M2 Max MacBook Pro.  This matches my 12 cores (8 performance and 4 efficiency).  I’m not sure if/how I could specify to use only one type vs the other.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331567" data-batch-url="/posts/batch_likers">
                        4
                      </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/elixir-in-action-book-club/63088/67">Post #66</a>
	                </div>
	            </div>
              <div id="likers-container-331567" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331567"
                     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 #66"></div>
  </section>
</div>
    <div class="postbit" id="331610" data-post-id="331610">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bjorng" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bjorng/120/13187_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bjorng
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Erlang Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have also completed chapter 5.</p>
<p>My only note this time is a suggestion for this part:</p>
<blockquote>
<p>Note that this isn’t efficient; you’re using Enum.at/2 to choose a random PID. Because you use a list to keep the processes, and a random lookup is an O(n) operation, selecting a random worker isn’t very performant. You could do better if you used a map with process indexes as keys and PIDs as values. There are also several alternative approaches, such as using a round-robin approach. But for now, let’s stick with this simple implementation.</p>
</blockquote>
<p>A simple and efficient way to randomly select a pid is to convert the list of pids to a tuple, and then use <code>elem/2</code> to extract a random element:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">            server_pid = elem(tuple_pool, :rand.uniform(100) - 1)
</code></pre>
<p>This approach is simpler and should be more efficient than using a map. If the example would be changed to use this approach, the example would still be fairly simple and the note about efficiency would not be needed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331610" data-batch-url="/posts/batch_likers">
                        9
                      </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/elixir-in-action-book-club/63088/68">Post #67</a>
	                </div>
	            </div>
              <div id="likers-container-331610" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331610"
                     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 #67"></div>
  </section>
</div>
    <div class="postbit" id="331782" data-post-id="331782">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Is the cost of converting to a tuple ever high enough where this wouldn’t be the case?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331782" 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/elixir-in-action-book-club/63088/69">Post #68</a>
	                </div>
	            </div>
              <div id="likers-container-331782" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331782"
                     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 #68"></div>
  </section>
</div>
    <div class="postbit" id="331803" data-post-id="331803">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="DidactMacros" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  DidactMacros
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I believe Map.delete returns the map passed as an argument, should there be no ID found.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(1)&gt; h Map.delete

  def delete(map, key)

  @spec delete(map(), key()) :: map()

Deletes the entry in map for a specific key.

If the key does not exist, returns map unchanged.

Inlined by the compiler.

## Examples

    iex&gt; Map.delete(%{a: 1, b: 2}, :a)
    %{b: 2}
    iex&gt; Map.delete(%{b: 2}, :a)
    %{b: 2}
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331803" data-batch-url="/posts/batch_likers">
                        2
                      </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/elixir-in-action-book-club/63088/70">Post #69</a>
	                </div>
	            </div>
              <div id="likers-container-331803" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331803"
                     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 #69"></div>
  </section>
</div>
    <div class="postbit" id="331819" data-post-id="331819">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bjorng" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bjorng/120/13187_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bjorng
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Erlang Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I did not consider the initial cost of setting up the pool, because that cost should be irrelevant because the pool is presumably used for many requests. Still, I would expect that creating a tuple should be faster than creating a map.</p>
<p>The reason for my “should” here and in my previous post is that I am generally careful when talking about performance based on my knowledge of the implementation alone (as opposed to having run benchmarks or performed some other measurements). Code that “should” be faster based on how it is implemented is not always faster in practice.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="331819" data-batch-url="/posts/batch_likers">
                        4
                      </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/elixir-in-action-book-club/63088/71">Post #70</a>
	                </div>
	            </div>
              <div id="likers-container-331819" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="331819"
                     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 #70"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/63088/load_more?page=8">Load more posts (26 remaining)</a>
</div></template></turbo-stream>