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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="31" data-topic="73889">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>But in the process they somewhat accidentally created a tool which is useful for incrementalizing <em>application code</em>. So even if you get rid of the (useless) DOM, something like React is still meaningful.</p>
</blockquote>
</aside>
<p>Interested in an example here.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381357" 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/funx-adding-the-optic-traversal/73889/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-381357" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381357"
                     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 #31"></div>
  </section>
</div>
    <div class="postbit" id="381358" data-post-id="381358">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="tfwright" data-post="29" data-topic="73889">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tfwright/48/20299_2.png" class="avatar"> tfwright:</div>
<blockquote>
<p>The definition you’re getting out is more promising, and maybe I need to read through some of this material more closely, but this still sounds a bit too general and too specific at the same time.</p>
</blockquote>
</aside>
<p>It is just very hard to put into words. If you spend time deliberately <em>trying</em> to write complex software with complex features (not accidentally complex, genuine complexity) then you will probably make the same mistakes detailed by Wittens and others. Certainly I did, and I am thankful they took the time to actually <em>write down what you’re supposed to do</em> so that I could learn. Morally, this obligates me to do the same.</p>
<aside class="quote no-group" data-username="tfwright" data-post="29" data-topic="73889">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tfwright/48/20299_2.png" class="avatar"> tfwright:</div>
<blockquote>
<p>yes in the last decade or two the pursuit of more UI features has made the web a lot more complex on the FE</p>
</blockquote>
</aside>
<p>This is a common perspective, but let me offer a different one. Desktop software roughly 20 years ago was <em>really good</em>. Things worked well, there were fewer bugs, and people put more effort into UI and UX. And I hate to keep bringing it up, but, like, we had undo/redo. I want my undo/redo.</p>
<p>The web ruined all of this, sort of by accident. REST APIs and forms are not a good user experience. Eventually we got React and its clones, which helped, but it seems like there was some deskilling in the meantime that has left webdev totally broken. I am worried LLMs are only going to make this worse.</p>
<p>React, and here I do not literally mean React but anything similar, is a tool for making declarative programming easier and more efficient. It is entirely possible to use this tool incorrectly (by writing imperative code), and if you do then it will not seem very useful at all. But if used <em>properly</em> it makes it much easier to do all of that stuff which otherwise appears too complex.</p>
<aside class="quote no-group" data-username="tfwright" data-post="29" data-topic="73889">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tfwright/48/20299_2.png" class="avatar"> tfwright:</div>
<blockquote>
<p>but I’ve really like the spirit of what I’ve seen of htmx</p>
</blockquote>
</aside>
<p>Me too. I don’t really have any interest in HTMX, but I respect the author a lot. It seems like a fine library for what it’s meant for, and they are honest about that, so I have nothing to complain about.</p>
<p>It is important to separate the wheat from the chaff. The JS/NPM ecosystem is an unmitigated disaster. But React is pretty good. The cool thing about software is you can just take the parts you like. My React clone is in progress <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p><a href="https://acko.net/blog/get-in-zoomer-we-re-saving-react/" rel="noopener nofollow ugc">You should have no trouble guessing <em>my</em> favorite software manifesto, though</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="381358" 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/funx-adding-the-optic-traversal/73889/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-381358" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381358"
                     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 #32"></div>
  </section>
</div>
    <div class="postbit" id="381359" data-post-id="381359">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="32" data-topic="73889">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>Interested in an example here.</p>
</blockquote>
</aside>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://acko.net/blog/the-case-for-use-gpu/">
  <header class="source">
      <img src="https://acko.net/favicon.ico" class="site-icon" alt="" width="64" height="64">

      <a href="https://acko.net/blog/the-case-for-use-gpu/" target="_blank" rel="noopener nofollow ugc">Acko.net</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/388;"><img src="https://acko.net/files/burrito-gpu/cover.jpg" class="thumbnail" alt="" width="690" height="388"></div>

<h3><a href="https://acko.net/blog/the-case-for-use-gpu/" target="_blank" rel="noopener nofollow ugc">The Case for Use.GPU</a></h3>

  <p>Reinventing rendering one shader at a time</p>


  </article>

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

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

<aside class="onebox allowlistedgeneric" data-onebox-src="https://raphlinus.github.io/rust/gui/2022/05/07/ui-architecture.html">
  <header class="source">

      <a href="https://raphlinus.github.io/rust/gui/2022/05/07/ui-architecture.html" target="_blank" rel="noopener nofollow ugc" title="03:17PM - 07 May 2022">Raph Levien’s blog – 7 May 22</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://raphlinus.github.io/rust/gui/2022/05/07/ui-architecture.html" target="_blank" rel="noopener nofollow ugc">Xilem: an architecture for UI in Rust</a></h3>

  <p>Rust is an appealing language for building user interfaces for a variety of reasons, especially the promise of delivering both performance and safety. However, finding a good architecture is challenging. Architectures that work well in other...</p>


  </article>

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

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

<p>This is a topic where there are no simple examples, only complex ones. Because simple cases do not necessitate this approach.</p>
<p>Note that React-likes are generally concerned with free-flowing, <em>unstructured</em> incrementalization. If you want structured incrementalization have a look at Differential Dataflow and DBSP/Feldera.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="381359" 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/funx-adding-the-optic-traversal/73889/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-381359" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="381359"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>