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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>I wrote a blog post for <a href="https://jaeyson.dev/blog/Infinite-scroll-with-liveview" rel="noopener nofollow ugc">creating a simple infinitescroll</a> page using LiveView, Intersection Observer API and JS interop using phx-hook.</p>
</blockquote>
<p>Here’s the <a href="https://fly.io/phoenix-files/infinitely-scroll-images-in-liveview/" rel="noopener nofollow ugc">working/canonical link</a> for building simple infinite scroll using LiveView (and in less than 30 lines of JS).</p> 
	            </div>

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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I wrote a blog post on how we used the Observer to debug some weird memory spikes in our Elixir gateway app. It includes some pretty interesting learnings about how SSL certs are handled in processes. It was a fun debug adventure <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://newrelic.com/blog/infrastructure-monitoring/memory-spikes-erlang?has_gdpr=true">
  <header class="source">
      <img src="https://newrelic.com/themes/custom/erno/assets/images/metadata/favicon.ico" class="site-icon" alt="" width="48" height="48">

      <a href="https://newrelic.com/blog/infrastructure-monitoring/memory-spikes-erlang?has_gdpr=true" target="_blank" rel="noopener nofollow ugc">New Relic</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/362;"><img src="https://newrelic.com/sites/default/files/styles/og_image/public/2021-07/25047c44fc6cd8ecf3c8eeabd4d0f28c116e46b0_cloudmonitoring_bestpractices_prismicimage_small.jpg?h=237b8c85&amp;itok=2ZMgWxT5" class="thumbnail" alt="" width="690" height="362"></div>

<h3><a href="https://newrelic.com/blog/infrastructure-monitoring/memory-spikes-erlang?has_gdpr=true" target="_blank" rel="noopener nofollow ugc">Hunting Memory Spikes in the Erlang BEAM</a></h3>

  <p>Learn how our Unified API team used the Erlang Observer to troubleshoot issues in the Erlang BEAM.</p>

  <p>
    <span class="label1">Est. reading time: 9 min read</span>
  </p>

  </article>

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

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

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="263821" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/elixir-blog-posts/150/860">Post #859</a>
	                </div>
	            </div>
              <div id="likers-container-263821" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="263821"
                     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 #859"></div>
  </section>
</div>
    <div class="postbit" id="263939" data-post-id="263939">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Wrote a blog post on SQL injection in Phoenix. Covers how Ecto really discourages you from writing insecure code, what a vulnerable function looks like, and using Sobelow to detect this.</p>
<p><a href="https://paraxial.io/blog/sql-injection" rel="noopener nofollow ugc">Detecting SQL Injection in Phoenix with Sobelow</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="263939" 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/861">Post #860</a>
	                </div>
	            </div>
              <div id="likers-container-263939" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="263939"
                     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 #860"></div>
  </section>
</div>
    <div class="postbit" id="264033" data-post-id="264033">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>In this post, I will introduce you to the world of cybersecurity and tell you how Elixir programming language works in this environment.<br>
<strong><a href="https://curiosum.com/blog/elixir-cybersecurity-safe-technology" rel="noopener nofollow ugc">Elixir vs Cybersecurity - is Elixir Language a Safe Technology?</a></strong></p> 
	            </div>

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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="PJUllrich" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/PJUllrich/120/15944_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  PJUllrich
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Building Table Views with Phoenix LiveView</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Today’s blog post is about exclusion constraints in Postgres and how to prevent double-bookings of appointments with them. It’s a nice dive into how to execute custom SQL code in your migrations and how timestamp ranges work in Posgres.</p>
<p>You can use this if you want to prevent any double-bookings of e.g. appointments, schedules, meetings, etc.</p>
<p><a href="https://www.peterullrich.com/prevent-overlapping-schedules-with-ecto-and-postgres" class="onebox" target="_blank" rel="noopener nofollow ugc">https://www.peterullrich.com/prevent-overlapping-schedules-with-ecto-and-postgres</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="264221" 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/863">Post #862</a>
	                </div>
	            </div>
              <div id="likers-container-264221" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="264221"
                     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 #862"></div>
  </section>
</div>
    <div class="postbit" id="264770" data-post-id="264770">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>New post describing how to implement a scrolling data table without running out of memory in Phoenix LiveView</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://dev.to/christianalexander/efficient-bidirectional-infinite-scroll-in-phoenix-liveview-3epd">
  <header class="source">
      <img src="https://media2.dev.to/dynamic/image/width=32,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png" class="site-icon" alt="" width="32" height="32">

      <a href="https://dev.to/christianalexander/efficient-bidirectional-infinite-scroll-in-phoenix-liveview-3epd" target="_blank" rel="noopener nofollow ugc">DEV Community</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/345;"><img src="https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazdazrrze8u96d3hnhqs.png" class="thumbnail" alt="" width="690" height="345"></div>

<h3><a href="https://dev.to/christianalexander/efficient-bidirectional-infinite-scroll-in-phoenix-liveview-3epd" target="_blank" rel="noopener nofollow ugc">Efficient bidirectional infinite scroll in Phoenix LiveView</a></h3>

  <p>Implementing an infinitely-scrolling page that streams in new events.</p>


  </article>

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

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

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="264770" 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/864">Post #863</a>
	                </div>
	            </div>
              <div id="likers-container-264770" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="264770"
                     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 #863"></div>
  </section>
</div>
    <div class="postbit" id="264842" data-post-id="264842">
  <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>Is there not a limit to how many items the browser is happy to render? If you throw 1,000,000 items into your page, what happens?</p> 
	            </div>

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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>There is probably a <em>practical</em> limit to how many items you can shove into the DOM of a page, but the focus here was to minimize the per-connection server memory utilization.</p>
<p>In situations where millions of items should be rendered, it might be worth using a custom hook or some other client-side code to virtualize or GC the list.</p>
<p>I actually think <a href="http://fly.io" rel="noopener nofollow ugc">fly.io</a> uses <code>phx-update="append"</code> in their container logs page, which is much higher volume than anything I’ve ever shipped. As far as I can tell, they don’t do anything to clean up the entries. Worst-case, the user can always refresh the page or a filtering UI can be added.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="264852" 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/866">Post #865</a>
	                </div>
	            </div>
              <div id="likers-container-264852" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="264852"
                     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 #865"></div>
  </section>
</div>
    <div class="postbit" id="264866" data-post-id="264866">
  <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>Don’t mind me, I have a personal vendetta against “infinite scroll”. I have a somewhat lacklustre implementation of truly infinite scrolling so I always read posts about it with interest. Sadly, it always turns out to be finite scroll. It should be called “load a bit more until the browser collapses scroll” or “generally sufficient amount of items scroll”.</p>
<p>AFAIK if you want actual infinite scroll, you need virtual scrolling.</p>
<blockquote>
<p>we knew that browsers start struggling with more than 20k log lines</p>
</blockquote>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://github.blog/engineering/how-github-actions-renders-large-scale-logs/">
  <header class="source">
      <img src="https://github.githubassets.com/favicon.ico" class="site-icon" alt="" width="32" height="32">

      <a href="https://github.blog/engineering/how-github-actions-renders-large-scale-logs/" target="_blank" rel="noopener nofollow ugc" title="04:28PM - 25 March 2021">The GitHub Blog – 25 Mar 21</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/361;"><img src="https://github.blog/wp-content/uploads/2019/03/engineering-social.png?fit=1201%2C630" class="thumbnail" alt="" width="690" height="361"></div>

<h3><a href="https://github.blog/engineering/how-github-actions-renders-large-scale-logs/" target="_blank" rel="noopener nofollow ugc">How GitHub Actions renders large-scale logs</a></h3>

  <p>Rendering logs in a web UI might seem simple: they are just lines of plain text. However, there are a lot of additional features that make them more useful to our users.</p>

  <p>
    <span class="label1">Est. reading time: 7 minutes</span>
  </p>

  </article>

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

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

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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="PJUllrich" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/PJUllrich/120/15944_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  PJUllrich
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Building Table Views with Phoenix LiveView</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>How do you efficiently search through millions of names in Postgres and Ecto? This blog post dives into Postgres’ <code>ILIKE</code> and <code>SIMILARITY</code> operators and their important caveats.</p>
<p>Also included: The most in-depth explanation of how Postgres calculates the SIMILARITY score ever!</p>
<p><a href="https://www.peterullrich.com/efficient-name-search-with-postgres-and-ecto" class="onebox" target="_blank" rel="noopener nofollow ugc">https://www.peterullrich.com/efficient-name-search-with-postgres-and-ecto</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="265031" 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/868">Post #867</a>
	                </div>
	            </div>
              <div id="likers-container-265031" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="265031"
                     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 #867"></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=82">Load more posts (411 remaining)</a>
</div></template></turbo-stream>