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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Plenty of algorithms lack straight forward parallel implementations. State of the art for quite a lot of algorithms is a single threaded C or C++ implementation.</p>
<p>This isn’t even necessarily a problem, as in production it’s often easy to just run multiple jobs in parallel.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="49589" 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/suitability-of-elixir-to-math-oriented-apps/1981/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-49589" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="49589"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="49618" data-post-id="49618">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="flajann2" data-post="21" data-topic="1981" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/flajann2/48/6535_2.png" class="avatar"> flajann2:</div>
<blockquote>
<p>I took a brief look at Julia, and from what I could tell it did not support or leverage multicore computers. How can it be “high performance” if it only runs on a single core? Or did I miss something?</p>
</blockquote>
</aside>
<p>Yes, you did. Julia does not do <em>concurrency</em> (which is performing multiple separate tasks at the same time), but it does allow <em>parallellism</em> (which is performing the same or similar tasks, such as the same calculation on multiple pieces of data at the same time).</p>
<p>Elixir is great at the former, which makes it work consistently even when under high loads. Julia (and some other environments) have the latter, which allow it to have ‘high performance’ when doing number crunching.</p>
<p>I believe using the <code>@parallel</code>-keyword in combination with a loop is enough to let it divide work across your processors. <a href="http://www.admin-magazine.com/HPC/Articles/Parallel-Julia-Jumping-Right-In" rel="noopener nofollow ugc">Short explanation can be found here</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="49618" 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/suitability-of-elixir-to-math-oriented-apps/1981/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-49618" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="49618"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="83524" data-post-id="83524">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I heard that Elixir is not good at number crunching, but I didn’t expect it to be this bad! I tried to solve <a href="https://projecteuler.net/problem=14" rel="noopener nofollow ugc">Problem #14 on Project Euler</a> using both Ruby and Elixir. Ruby gave me the correct answer in 1.5s on my Macbook, while Elixir just letted me wait and wait and wait until I lost my patience and pressed Ctrl + C.</p>
<p>Here is the Ruby code:</p>
<pre data-code-wrap="ruby"><code class="lang-ruby">class Collatz
  def initialize               
    @cache = {}             
  end

  def longest(upperbound)      
    1.upto(upperbound).map{|n| [n, sequence_length(n)]}.max_by{|_, len| len}
  end
  
  def sequence_length(n)       
    return 1 if n == 1         
    len = @cache[n]            
    if len
      len
    elsif n.odd?
      @cache[n] = sequence_length(3 * n + 1) + 1
    else
      @cache[n] = sequence_length(n / 2) + 1
    end
  end
end

require 'benchmark'

collatz = Collatz.new
puts Benchmark.measure {
  p collatz.longest(1_000_000)
}
</code></pre>
<p>And here is the Elixir code, which is not optimized to tail recursion (I’m still struggling how to do tail recursion with cache):</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Collatz do           
                               
  use Agent
  require Integer

  def start_link do
    Agent.start_link(fn -&gt; %{} end, name: __MODULE__)
  end
  
  def longest(upperbound) do   
    Stream.interval(1)         
    |&gt; Stream.map(fn n -&gt; {n + 1, sequence_length(n + 1)} end) 
    |&gt; Stream.take(upperbound) 
    |&gt; Enum.max_by(fn {_, len} -&gt; len end)
  end

  def sequence_length(1), do: 1

  def sequence_length(n) do
    len = Agent.get(__MODULE__, &amp;Map.get(&amp;1, n))
    
    cond do
      len != nil -&gt; 
        len
      Integer.is_odd(n) -&gt;
        new_len = sequence_length(3 * n + 1) + 1
        Agent.update(__MODULE__, &amp;Map.put(&amp;1, n, new_len))
        new_len
      true -&gt;
        new_len = sequence_length(div(n, 2)) + 1
        Agent.update(__MODULE__, &amp;Map.put(&amp;1, n, new_len))
        new_len
    end
  end
end

Collatz.start_link()

:timer.tc(fn -&gt;
  Collatz.longest(1_000_000)
end)
</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="83524" 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/suitability-of-elixir-to-math-oriented-apps/1981/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-83524" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83524"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="83546" data-post-id="83546">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The Elixir code you’ve got isn’t a particularly suitable adaptation, which isn’t particularly that uncommon when folks are getting going. By way of comparison <a href="https://github.com/sorentwo/euler/blob/master/lib/euler_014.exs" class="inline-onebox" rel="nofollow">euler/lib/euler_014.exs at master · sorentwo/euler · GitHub</a> runs in ~4.7 seconds on my computer and it doesn’t even have any caching.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="83546" 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/suitability-of-elixir-to-math-oriented-apps/1981/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-83546" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83546"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="83548" data-post-id="83548">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>That’s interesting. After I removed caching, the performance gets much better (~3.4s). Then after I introduced tail recursion, the performance gets a little better (~3.2s), so non-tail recursion isn’t the cause of low performance. When I did the same thing in Ruby code (well, Ruby doesn’t optimize tail call so I didn’t do tail recursion in Ruby), the performance gets worse (~8.5s). So the performance of Elixir isn’t that bad. My fault. It seems that the worst part of my former Elixir code is the use of <code>Stream</code> (but why?).</p>
<p>But again, I’m still wondering how to do tail recursion with cache. I counted how many steps are saved with caching in Ruby, and it saved 130,265,812 steps, only 2,168,610 steps are actually calculated. When I added caching back to Elixir code, though this time it didn’t make me wait forever, the performance still got worse (~13s), but how can this be if it saved so many steps?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="83548" 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/suitability-of-elixir-to-math-oriented-apps/1981/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-83548" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83548"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="83549" data-post-id="83549">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Instead of using an agent for cache, can’t you pass a map around?<br>
*Edit, I’m on my phone right now, but if you don’t know what I mean I can show you</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="83549" 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/suitability-of-elixir-to-math-oriented-apps/1981/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-83549" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83549"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="83550" data-post-id="83550">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I understand what you say. I just need some time to arrange the code if I need to passing and returning a map across all function calls. This is gonna be error-prone.</p>
<p><strong>UPDATE</strong></p>
<p>OK, I managed to do as what you said, but the performance (~3.7s) is still worse than no cache.</p>
<p>Here’s the new Elixir code:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Collatz do           
                               
  require Integer              

  def longest(upperbound) do   
    (1 .. upperbound)          
    |&gt; Enum.reduce({0, 0, %{}}, fn(n, {m, max_len, cache}) -&gt;
      case sequence_length(n, cache) do
        {len, new_cache} when len &gt; max_len -&gt;
          {n, len, new_cache}  
        {_len, new_cache} -&gt;   
          {m, max_len, new_cache}         
      end
    end)
    |&gt; elem(0)
  end

  def sequence_length(1, cache), do: {1, cache}

  def sequence_length(n, cache) do
    len = Map.get(cache, n)
    {new_len, new_cache} = cond do  
      len -&gt;
        {len, cache}
      Integer.is_even(n) -&gt;
        sequence_length(div(n, 2), cache)
      true -&gt;
        sequence_length(3 * n + 1, cache)
    end
    {new_len + 1, Map.put(new_cache, n, new_len + 1)}
  end

end
</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="83550" 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/suitability-of-elixir-to-math-oriented-apps/1981/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-83550" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83550"
                     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 #27"></div>
  </section>
</div>
    <div class="postbit" id="83575" data-post-id="83575">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="aethereus" data-post="28" data-topic="1981">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/ea666f/48.png" class="avatar"> aethereus:</div>
<blockquote>
<p>still worse than no cache.</p>
</blockquote>
</aside>
<p>Try using an <a href="http://erlang.org/doc/man/ets.html" rel="nofollow">ets</a> table for <a href="https://forum.elixirforum.com/t/implementing-recursion-and-tail-recursion/12464/8" rel="nofollow">caching</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="83575" 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/suitability-of-elixir-to-math-oriented-apps/1981/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-83575" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83575"
                     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 #28"></div>
  </section>
</div>
    <div class="postbit" id="83577" data-post-id="83577">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m skeptical that any data store external to the process will perform well. <code>ets</code> is great when you need a cache shared between processes, but within a single process a map or the process dictionary should be faster.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="83577" 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/suitability-of-elixir-to-math-oriented-apps/1981/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-83577" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83577"
                     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 #29"></div>
  </section>
</div>
    <div class="postbit" id="83579" data-post-id="83579">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Update: the ets code is using a <a href="http://erlang.org/doc/man/ets.html#insert-2" rel="nofollow">bulk insert</a> (a list of tuples) - giving it the <em>apparent</em> edge over the map code. <a href="https://forum.elixirforum.com/t/implementing-recursion-and-tail-recursion/12464/9" rel="nofollow">Replacing individual <code>Map.put/3</code> calls with a consolidated <code>maps:merge/2</code> call</a> improved matters for the <em>map as a cache</em> case.</p>
<aside class="quote no-group">
<blockquote>
<p>With the <a href="https://forum.elixirforum.com/t/implementing-recursion-and-tail-recursion/12464/8" rel="nofollow">Fib example</a> ets outperformed a map significantly - but still didn’t quite catch up to the last call optimized version. The results seemed to imply that ets tables as a BEAM artifact are optimized enough to have better lookup and write performance - though that may be a function of size.</p>
</blockquote>
</aside>
<p>For the process dictionary approach see:<br>
<a href="https://forum.elixirforum.com/t/improving-a-slow-solution-for-longest-collatz-sequence/6865/3" rel="nofollow">Improving a slow solution for Longest Collatz Sequence </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="83579" 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/suitability-of-elixir-to-math-oriented-apps/1981/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-83579" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="83579"
                     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 #30"></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/1981/load_more?page=4">Load more posts (1 remaining)</a>
</div></template></turbo-stream>