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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a href="https://www.jackmarchant.com/articles/using-protocols-to-decouple-implementation-details" class="onebox" target="_blank" rel="noopener nofollow ugc">https://www.jackmarchant.com/articles/using-protocols-to-decouple-implementation-details</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="98346" 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-blog-posts/150/399">Post #398</a>
	                </div>
	            </div>
              <div id="likers-container-98346" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98346"
                     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 #398"></div>
  </section>
</div>
    <div class="postbit" id="98575" data-post-id="98575">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have blogged about configuration &amp; Elixir here:</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://www.amberbit.com/blog/2018/9/27/elixir-runtime-vs-compile-time-configuration/">
  <header class="source">
      <img src="https://www.amberbit.com/images/favicon-4d6915a6b5af28e4e6e246321aadce4a.png?vsn=d" class="site-icon" alt="" width="171" height="200">

      <a href="https://www.amberbit.com/blog/2018/9/27/elixir-runtime-vs-compile-time-configuration/" target="_blank" rel="noopener nofollow ugc">amberbit.com</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/360;"><img src="https://www.amberbit.com/blog/2018/9/27/elixir-runtime-vs-compile-time-configuration/preview.png" class="thumbnail" alt="" width="690" height="360"></div>

<h3><a href="https://www.amberbit.com/blog/2018/9/27/elixir-runtime-vs-compile-time-configuration/" target="_blank" rel="noopener nofollow ugc">Elixir: Runtime vs. compile time configuration</a></h3>

  <p>Digging into runtime and compile-time configuration variables.</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>that builds upon some discussions we’ve been having here, most notably:</p><aside class="quote quote-modified" data-post="12" data-topic="1975">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar">
    <div class="quote-title__text-content">
      <a href="https://forum.elixirforum.com/t/what-is-the-difference-between-using-system-port-and-system-get-env-port-in-deployment/1975/12" rel="nofollow">What is the difference between using {:system, "PORT"} and System.get_env("PORT") in deployment?</a> <a class="badge-category__wrapper " href="/c/questions-help/questions/53" rel="nofollow"><span data-category-id="53" style="--category-badge-color: #C14BFB; --category-badge-text-color: #000000; --parent-category-badge-color: #C14BFB;" data-parent-category-id="171" data-drop-close="true" class="badge-category --style-square --has-parent" title="Elixir Questions / Help"><span class="badge-category__name">Questions</span></span></a>
    </div>
  </div>
  <blockquote>
    I want to update this old discussion and thread to say we have come up with a mechanism that no longer requires {:system, ...} and it is slowly being deprecated from Phoenix, Plug and Ecto. 
James Fish pointed out the best place to do configuration is inside init/1. Doing it before calling start_link is an issue because then it won’t work with hot code reloading. Therefore with Phoenix v1.3, we are going to push dynamic configuration, such as the ones loaded from the environment, to the init fun…
  </blockquote>
</aside>
<aside class="quote quote-modified" data-post="1" data-topic="14302">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar">
    <div class="quote-title__text-content">
      <a href="https://forum.elixirforum.com/t/proposal-moving-towards-discoverable-config-files/14302" rel="nofollow">Proposal: moving towards discoverable config files</a> <a class="badge-category__wrapper " href="/c/elixir-news-announcements/official-proposals/134" rel="nofollow"><span data-category-id="134" style="--category-badge-color: #7C1A9C; --category-badge-text-color: #FFFFFF; --parent-category-badge-color: #7C1A9C;" data-parent-category-id="132" data-drop-close="true" class="badge-category --style-square --has-parent"><span class="badge-category__name">Official Proposals</span></span></a>
    </div>
  </div>
  <blockquote>
    One of the major differences between running your application as a release and as a Mix project is the differences in configuration. Mix evaluates the configuration right before the application starts, releases evaluates the configuration when your application is compiled. 
This implies in a large mismatch of how those two environments are used. For releases, environment variables (read by System.get_env/1) need to be set when the application is compiled and such information may not be available…
  </blockquote>
</aside>
<aside class="quote quote-modified" data-post="1" data-topic="16039">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/h/94ad74/48.png" class="avatar">
    <div class="quote-title__text-content">
      <a href="https://forum.elixirforum.com/t/distillery-2-0-has-been-released/16039" rel="nofollow">Distillery 2.0 has been released</a> <a class="badge-category__wrapper " href="/c/chat-discussions/chat-discussions/167" rel="nofollow"><span data-category-id="167" style="--category-badge-color: #cca771; --category-badge-text-color: #FFFFFF; --parent-category-badge-color: #cca771;" data-parent-category-id="165" data-drop-close="true" class="badge-category --style-square --has-parent"><span class="badge-category__name">Discussions</span></span></a>
    </div>
  </div>
  <blockquote>
    <a href="https://dockyard.com/blog/2018/08/23/announcing-distillery-2-0" class="onebox" target="_blank" rel="noopener nofollow ugc">https://dockyard.com/blog/2018/08/23/announcing-distillery-2-0</a> 

Here’s a quick overview of the major changes: 

A solution to the problem of runtime configuration
Improved experience around hot upgrades/downgrades, namely better support for custom <a href="http://erlang.org/doc/man/appup.html" rel="nofollow">appups</a> and programmatically modifying them
Out of the box support for generating PID files
Better and more consistent primitives for custom commands and hooks
Improved errors and better feedback from the CLI
Major improvements to the documentation: ne…
  </blockquote>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98575" 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-blog-posts/150/400">Post #399</a>
	                </div>
	            </div>
              <div id="likers-container-98575" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98575"
                     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 #399"></div>
  </section>
</div>
    <div class="postbit" id="98677" data-post-id="98677">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think your post also assumes that the build happens on the production or production-like server that also contains the secrets. Am I reading it right?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98677" 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-blog-posts/150/401">Post #400</a>
	                </div>
	            </div>
              <div id="likers-container-98677" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98677"
                     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 #400"></div>
  </section>
</div>
    <div class="postbit" id="98706" data-post-id="98706">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>No, hmm not at all. You can use distillery 2.0 and read them at runtime as I show a the end of post.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98706" 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-blog-posts/150/402">Post #401</a>
	                </div>
	            </div>
              <div id="likers-container-98706" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98706"
                     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 #401"></div>
  </section>
</div>
    <div class="postbit" id="98712" data-post-id="98712">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nice! Ya I misread that!  Guess I’m so used to there being caveats but ya, Distillery 2.0 with mix config providers is really nice. Thanks for the great post. I might have to redo how I have my app configured now with this in mind. I’m still using the <code>REPLACE_OS_VARS</code> style.</p>
<p>I think this is where I got tripped up:</p>
<blockquote>
<p>Since config providers only execute pre-boot, you must restart the release to pick up configuration changes. If using hot upgrades, the config providers will run during the upgrade, and so will pick up any config changes at that time. <a href="https://hexdocs.pm/distillery/extensibility/config_providers.html" class="inline-onebox" rel="noopener nofollow ugc">Config Providers - Distillery Documentation</a></p>
</blockquote>
<p>So, even though it’s technically read at runtime, it might still feel like compile-time since the app has to reboot to get changed environment variables. (don’t actually have to recompile the app-- just reboot).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98712" 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-blog-posts/150/403">Post #402</a>
	                </div>
	            </div>
              <div id="likers-container-98712" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98712"
                     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 #402"></div>
  </section>
</div>
    <div class="postbit" id="100302" data-post-id="100302">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="josevalim" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/120/1787_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  josevalim
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Crowdhailer" data-post="295" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/crowdhailer/48/2438_2.png" class="avatar"> Crowdhailer:</div>
<blockquote>
<p>We had to we write the parser. hardly a good example of compose-able.</p>
</blockquote>
</aside>
<p>Yet this problem is completely addressed in more recent versions. Now you can tell Plug.Parsers how to read the body or tell it to not read it at all in certain cases. The PR was a 2LOC change on each existing parser. No software is perfect, they will all have limitations that need to be addressed. It is amazing what can be achieved when folks approach a weird behaviour as an opportunity to improve things rather than point fingers.</p>
<p>I also want to point out that even a data structure of the request would be bound to “hardly a good example of composa-able”. All that is necessary is for a “middleware” upstream to rewrite a request in a way it is incompatible for downstream. For example, a middleware may discard the request body to save memory (think large file uploads). If another middleware expects the request body to always be there, it will now break. Alternatively you can say it is not possible to discard the request body but then you are opening your application up to easier to pull attack vectors.</p>
<p>So those decisions are not tied to the architectural choice of the project but rather a design decision which could have gone both ways. Plug aims to put stronger emphasis over when the request is read and the response is sent. I would rather read the request body once and make sure to derive all of the properties I need from it in a single place rather than passing the request body around the whole stack in the off chance something else need it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="100302" 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-blog-posts/150/404">Post #403</a>
	                </div>
	            </div>
              <div id="likers-container-100302" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="100302"
                     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 #403"></div>
  </section>
</div>
    <div class="postbit" id="100306" data-post-id="100306">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Crowdhailer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Crowdhailer/120/2438_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Crowdhailer
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Raxx</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="404" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>The PR was a 2LOC change on each existing parser.</p>
</blockquote>
</aside>
<p>I had been following the PR and am pleased that it is now fixed.</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="404" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>No software is perfect</p>
</blockquote>
</aside>
<p>Never tried to imply I was expecting that, I personally spent quite a long time in Plug source looking for a solution.</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="404" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>rather than point fingers.</p>
</blockquote>
</aside>
<p>I can’t quite believe I’m saying this again, but this is really not my intention.</p>
<p>In functional programming it can be valuable to have as much code as possible pure.<br>
I also recognise that in some cases this goal of purity is not practical.<br>
Plug has made very sensible choices here for it’s model.<br>
However reading and writing a body in plug just is impure in some cases.</p>
<p>My own experiments (Raxx) was never meant to be more than an attempt to see if I could increase the amount of the interface that was pure.<br>
In the end I came up with a solution that I quite like.</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="404" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>pull attack vectors</p>
</blockquote>
</aside>
<p>I couldn’t quickly google what pull attack vectors are, so I’m not sure what is being said here.</p>
<p>I would just say that Raxx has evolved quite a lot from it’s Rack based inspiration. Arbitrarily large request bodies will not just gut pushed into a data structure .</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="100306" 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-blog-posts/150/405">Post #404</a>
	                </div>
	            </div>
              <div id="likers-container-100306" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="100306"
                     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 #404"></div>
  </section>
</div>
    <div class="postbit" id="100307" data-post-id="100307">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="josevalim" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/120/1787_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  josevalim
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Crowdhailer" data-post="405" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/crowdhailer/48/2438_2.png" class="avatar"> Crowdhailer:</div>
<blockquote>
<p>Never tried to imply I was expecting that, I personally spent quite a long time in Plug source looking for a solution.</p>
</blockquote>
</aside>
<p>Hopefully nobody expects software to be perfect. However, when a small and fixable issue is taken as an indicative of a bigger problem, when it is not, the lasting impression is that we don’t have a lot of space for making mistakes (exactly because small mistakes will be taken as an indicative of a bigger problem, when they are not, so we need to make sure everything is fail proof).</p>
<aside class="quote no-group" data-username="Crowdhailer" data-post="405" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/crowdhailer/48/2438_2.png" class="avatar"> Crowdhailer:</div>
<blockquote>
<p>However reading and writing a body in plug just is impure in some cases.</p>
</blockquote>
</aside>
<p>Reading and writing a body is always impure. You can’t escape from the real world. The question is how and when you handle it. If you choose to not expose it to your users at all, with a completely pure data driven approach of the request and response with no callbacks, then you are removing runtime capabilities from your users in terms of connection and memory management.</p>
<p>A callback based approach can be made of pure callbacks but the model is still impure and some of the callbacks are likely dictated by the impure nature of the model. For example, in a GenServer you still have <code>GenServer.reply/2</code>, which is an impure operation, because otherwise certain patterns are impossible to implement.</p>
<p>I am not saying one approach is better than the other. My point is that because the domain modelled here is inherently impure, concessions have to be made at some point (in Erlang/Elixir at least).</p>
<aside class="quote no-group" data-username="Crowdhailer" data-post="405" data-topic="150">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/crowdhailer/48/2438_2.png" class="avatar"> Crowdhailer:</div>
<blockquote>
<p>I couldn’t quickly google what pull attack vectors are, so I’m not sure what is being said here.</p>
</blockquote>
</aside>
<p>Attacks like slowloris are easier to pull off when the body is being kept in memory, especially because the body size limit is typically way higher than the headers one.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="100307" 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-blog-posts/150/406">Post #405</a>
	                </div>
	            </div>
              <div id="likers-container-100307" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="100307"
                     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 #405"></div>
  </section>
</div>
    <div class="postbit" id="101248" data-post-id="101248">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve shared 2 short posts on my first Nerves project on the nerves Slack channel and <a class="mention" href="/u/connorrigby" rel="nofollow">@ConnorRigby</a> reminded me that it could be shared here as well. So here we go:</p>
<p><a href="https://smdgrd.co/the-project-reading-temperatures-of-2-ds18b20-sensors/" class="onebox" target="_blank" rel="noopener nofollow ugc">https://smdgrd.co/the-project-reading-temperatures-of-2-ds18b20-sensors/</a><br>
<a href="https://smdgrd.co/my-first-nerves-project-pt-2/" class="onebox" target="_blank" rel="noopener nofollow ugc">https://smdgrd.co/my-first-nerves-project-pt-2/</a></p>
<p><img src="https://forum.elixirforum.com/images/emoji/apple/vulcan_salute.png?v=15" title=":vulcan_salute:" class="emoji only-emoji" alt=":vulcan_salute:" 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="101248" 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-blog-posts/150/407">Post #406</a>
	                </div>
	            </div>
              <div id="likers-container-101248" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="101248"
                     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 #406"></div>
  </section>
</div>
    <div class="postbit" id="102096" data-post-id="102096">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="onebox allowlistedgeneric" data-onebox-src="https://blog.appsignal.com/2018/10/16/elixir-alchemy-hot-code-reloading-in-elixir.html">
  <header class="source">
      <img src="https://blog.appsignal.com/favicon.ico" class="site-icon" alt="" width="32" height="32">

      <a href="https://blog.appsignal.com/2018/10/16/elixir-alchemy-hot-code-reloading-in-elixir.html" target="_blank" rel="noopener nofollow" title="12:00AM - 16 October 2018">blog.appsignal.com – 16 Oct 18</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/360;"><img src="https://ondemand.bannerbear.com/signedurl/vYR1M6Lyq22EAnXbgZ/image.jpg?modifications=W3sibmFtZSI6InRpdGxlIiwidGV4dCI6IkhvdCBDb2RlIFJlbG9hZGluZyBpbiBFbGl4aXIifSx7Im5hbWUiOiJpbWFnZSIsImltYWdlX3VybCI6Imh0dHBzOi8vYmxvZy5hcHBzaWduYWwuY29tL2ltYWdlcy9ibG9nLzIwMTgtMTAvaG90LWNvZGUtcmVsb2FkaW5nLmpwZyJ9LHsibmFtZSI6ImNhdGVnb3J5X2xvZ28iLCJpbWFnZV91cmwiOiJodHRwczovL2Jsb2cuYXBwc2lnbmFsLmNvbS9pbWFnZXMvbG9nb3MvZWxpeGlyLWxvZ28ucG5nIn1d&amp;s=f1231e142a168e7b7bb2ccd5e48d92cc82b64e406cb5b08e2dee89445af2a6aa" class="thumbnail" alt="" width="690" height="361"></div>

<h3><a href="https://blog.appsignal.com/2018/10/16/elixir-alchemy-hot-code-reloading-in-elixir.html" target="_blank" rel="noopener nofollow">Hot Code Reloading in Elixir | AppSignal Blog</a></h3>

  <p>How to upgrade code in a running Elixir application without restarting. 🏎</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<blockquote>
<p>Being one of Erlang’s most amazing features,  <em>hot code reloading</em>  is sometimes compared to replacing the wheels on a driving car…</p>
</blockquote>
<p>Nice way to put it <img src="https://forum.elixirforum.com/uploads/default/original/2X/7/776053aa22968f83c10e90c98b23aa0ddd5c9d47.gif?v=15" title=":lol:" class="emoji emoji-custom" alt=":lol:" 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="102096" 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-blog-posts/150/408">Post #407</a>
	                </div>
	            </div>
              <div id="likers-container-102096" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="102096"
                     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 #407"></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/150/load_more?page=38">Load more posts (851 remaining)</a>
</div></template></turbo-stream>