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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Vlahunter" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Vlahunter
                    <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>So this box will act as a beefy edge compute box. Imagine multiple different master controllers connected on the end via network switch. It’s job will be to collect data (from the registers) save some of them (was thinking Timescale or Influx for TS and Postgres for the rest) then batch process some of them (daily, weekly, monthly) but on top of all it should be able to handle the Real time aspects very well (alarms, notifications) coming from the PLCs. Just for reference, from previous experience, a normal master controller can hold easily more than 2000 data points (ofc not all of them needed). Now regarding Go, yes indeed in case I would go that road I would need to build this module by module (for modbus connectivity, saving data and all the rest) plus use docker and Kubernetes for the orchestration and fault tolerance part (which I don’t feel confident) and all the rest scripts and tools in the same manner.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250253" 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/elixir-language-potential-evaluation/47623/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-250253" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250253"
                     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="250267" data-post-id="250267">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I dunno what industry you’re working with but we often jam much more than 2000 tags per PLC.</p>
<p>You’d run Docker and Kubernetes on that edge box?  Have you looked at <a href="https://github.com/ergo-services/ergo" rel="noopener nofollow ugc">erlgo</a>?  I think someone mentioned it earlier.</p>
<p>For reference, I have a system that processes events (only ~600,000/day) I suck out of SCADA servers on an 8 core/8GB server and it barely touches the sides.  I calculate metrics on the fly when a user accesses the page for that period and it is quick enough to calculate the metrics for a month on the fly. It makes good use of the CPU when it does though <img src="https://forum.elixirforum.com/images/emoji/apple/smile.png?v=15" title=":smile:" class="emoji" alt=":smile:" loading="lazy" width="20" height="20">.  All the performance issues I’ve run into so far have all been to do with database.</p>
<p>Another great thing about the BEAM is that you can jump on and inspect the system when things are going wrong.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250267" 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-language-potential-evaluation/47623/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-250267" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250267"
                     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="250270" data-post-id="250270">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Vlahunter" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Vlahunter
                    <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>Yes, normally a PLC can have many more than 2000 data points but on average I could say 2000 is a good reference number. As you will know not all of them matter, only a fraction of it actually. Truth is that the bottlenecks in these systems as far as I can tell is indeed in some cases the DBs and the actual controller, it’s a good practice for example to request up to 200 registers for most controllers in case of polling, otherwise the controller can have a stroke which is a terrible scenario, now add on top of that the possibility to have 10 or 30 or more Masters. Regarding Ergo.services, I took an initial look in to it but not yet in depth. May I ask if you used Elixir/otp for the mentioned PLC projects? Should I assume your feedback/experience is positive when it comes to the ecosystem/libraries and overall system stability?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250270" 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/elixir-language-potential-evaluation/47623/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-250270" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250270"
                     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="250280" data-post-id="250280">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Well, yes.  I only talk to SCADA though, no PLCs.  I do dream of writing a SCADA system in Elixir just for fun <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">.  I tried out a bunch of languages but modelling a system with lots of moving parts didn’t click until I came upon the BEAM, the land of processes, message passing and supervision trees.</p>
<p>For data processing pipelines there is Flow, GenStage and Broadway.  Modelling your connections can be done with state machines, of which you have several options.  If you need to use something from another language you can write a Port (I have one in F# that calls a DLL for me).  A lot of it you can write yourself using OTP.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250280" 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/elixir-language-potential-evaluation/47623/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-250280" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250280"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="250285" data-post-id="250285">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Vlahunter" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Vlahunter
                    <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>That sounds super helpful. I haven’t thought about this that far cause now I spend some time to think how to solve the first step which is to be able to connect to multiple PLCs, find a way to reload configurations dynamically in order to add/remove controllers cause I am not sure it could be possible to be fully automated in a native way. After that step I should persist, as I mentioned above and of course the final step would be to build data pipelines as you kindly suggest flow, broadway and genStage. Regarding the state_machines that you mentioned though, I am trying to understand how and why I should go that route, I mean in theory I have an expectation on specific ReadRegs for example, I should expect a specific number of values in their corresponding expected data type which means that I could potentially model it with dynamically created objects per different type of controller, am I seeing this wrong here? And would a state machine help in the modeling part? Cause in my head a state machine would be awesome for the case I would need to Write a register (send a command back to the PLC) or when I would like to keep a state in the case of an alarm for example.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250285" 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/elixir-language-potential-evaluation/47623/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-250285" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250285"
                     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="250287" data-post-id="250287">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Imagine you have a process for each PLC - a <code>GenServer</code> or a <code>gen_statem</code> (or some other state machine representation).  Thought you might end up implementing your own controller <code>behaviour</code> that wraps a <code>GenServer</code>.</p>
<p>If you model the connection using a state machine you might have the states <code>disconnected</code> and <code>connected</code>.  If you’re connected, you poll the PLC for updates, check what you get back is what you’re expecting and persist it, send it on or whatever.  If you’re disconnected, you retry connecting every now and then.</p>
<p>If you want to modify the tags read from that PLC, you send a message to that PLC’s process with the new list (of maps or tuples… e.g.<code>%{tag: "SOME_TAG", type: :dint}</code>).  If you want to add another PLC, you add it under a <code>DynamicSupervisor</code>.</p>
<p>You could keep the alarms in <code>:ets</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="250287" 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/elixir-language-potential-evaluation/47623/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-250287" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250287"
                     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="250289" data-post-id="250289">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Vlahunter" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Vlahunter
                    <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>Woah!! i am not experienced in Elixir so i ll need to keep digging to understand exactly how these work, but if the way you describe is doable then it could potentially help in a lot of different aspects (basically all the ones i mentioned in my previous comment) .</p>
<p>Thanks a ton for these ideas, i have a lot of research to do and docs to read <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue.png?v=15" title=":stuck_out_tongue:" class="emoji" alt=":stuck_out_tongue:" 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="250289" 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/elixir-language-potential-evaluation/47623/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-250289" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250289"
                     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="250292" data-post-id="250292">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve never had cause to use it, but FWIW Erlang has a substantial SNMP implementation built-in:</p>
<p><a href="https://www.erlang.org/doc/apps/snmp/users_guide.html" class="onebox" target="_blank" rel="noopener nofollow">https://www.erlang.org/doc/apps/snmp/users_guide.html</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="250292" 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/elixir-language-potential-evaluation/47623/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-250292" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250292"
                     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="250295" data-post-id="250295">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Vlahunter" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Vlahunter
                    <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>Never used <strong>SNMP</strong>, as i see in the docs this is protocol works over <strong>UDP</strong>. Normally (in the previous project i have been working) i would connect over <strong>TCP</strong> (Modbus TCP) and have my client read/write according to the task.</p>
<p>As most things Erlang, i love the fact that they have a whole huge PDF explaining this. Thanks for sharing this. I definitely need some time to consume it.</p>
<p>Not sure if i would be able to use it (with an initial search, i see that a given PLC should also support this protocol) but as i see the concepts in this protocol seem to be really industrial grade, also, as i see in such a Network many different HW/SW devices can be connected and managed which is crucial.</p>
<p><strong>PS</strong> The more i dig in to this project the more i feel less competent, in the past i just worked my way through with simple small apps, one task at a time. Now that i have the desire to build this <em>correctly</em> as a prototype i see that there so many more things i was not aware of their existence.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250295" 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/elixir-language-potential-evaluation/47623/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-250295" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250295"
                     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="250304" data-post-id="250304">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>We are doing a very similar thing right now.</p>
<p>The system we have to replace is a RPi-CM based mini-server which</p>
<ul>
<li>serves a visualisation for a smarthome (HTTPS server, OAuth2)</li>
<li>connects to various field busses (RF and cable)</li>
<li>provides a Hub for those (similar to, but not as feature rich as: <a href="https://www.home-assistant.io/" rel="noopener nofollow ugc">https://www.home-assistant.io/</a>)</li>
<li>handles some hard-keys and LEDs</li>
<li>is OTA-updateable</li>
</ul>
<p>The current system uses:</p>
<ul>
<li>python (Hub, some scripts)</li>
<li>node (server)</li>
<li>C and Cpp (bus stacks)</li>
<li>.deb (updates)</li>
<li>bash (some scripts)</li>
<li>systemd</li>
<li>crazy test system</li>
<li>…more</li>
</ul>
<p>We decided to go for Elixir/Nerves for the next generation.<br>
<a class="mention" href="/u/mindok" rel="nofollow">@mindok</a> has very nicely summarized the reasons for that decision, but I want to point out:</p>
<ul>
<li>functional language (Elixir or Erlang is the only functional language I’d consider for an embedded system. Functional languages have great advantages I won’t go into here, but the biggest plus I expect is better testability)</li>
<li>we can do everything (but some fast-hard-realtime stuff) in one language. This is a big plus, especially for a small team.</li>
<li>possibility to run on small platforms like iMX6UL - even without Linux, see GRiSP2</li>
<li>erlang’s binary pattern matching is a game changer when implementing protocols (I did put Elixir to the test by implementing the part of the system I saw it least fit for: the KNX protocol stack. This turned out very nicely)</li>
<li>Nerves is a great tool for building embedded software systems and makes OTA updates simple. (Our current desktop-OS and .deb system is a pain in the ass with thousands of servers in the field)</li>
<li>OTP (Supervision tree kills systemd, we can create on (umbrella/poncho?) project for the whole system.)</li>
<li>Elixir is a great language, with a very good ecosystem including a great community. There are lots of people here, that are here because they’ve already seen some other stuff.</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="250304" 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-language-potential-evaluation/47623/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-250304" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="250304"
                     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/47623/load_more?page=4">Load more posts (21 remaining)</a>
</div></template></turbo-stream>