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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have been spending a little bit of time configuring Doom Emacs for Elixir development.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="329029" 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/what-elixir-related-stuff-are-you-doing/113/743">Post #742</a>
	                </div>
	            </div>
              <div id="likers-container-329029" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="329029"
                     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 #742"></div>
  </section>
</div>
    <div class="postbit" id="334071" data-post-id="334071">
  <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>Made a trailer for <a href="http://Paraxial.io" rel="noopener nofollow ugc">Paraxial.io</a>:</p>
<div class="youtube-onebox lazy-video-container" data-video-id="BdslgfKSNTE" data-video-title="Paraxial.io in 1 minute" data-video-start-time="" data-provider-name="youtube">
  <a href="https://www.youtube.com/watch?v=BdslgfKSNTE" target="_blank" class="video-thumbnail" rel="noopener nofollow ugc">
    <img class="youtube-thumbnail" src="https://img.youtube.com/vi/BdslgfKSNTE/maxresdefault.jpg" title="Paraxial.io in 1 minute" width="690" height="388">
  </a>
</div>

<p>The repo shown is Potion Shop - <a href="https://github.com/securityelixir/potion_shop" class="inline-onebox" rel="noopener nofollow ugc">GitHub - securityelixir/potion_shop: A vulnerable Elixir and Phoenix application for learning web security · GitHub</a> If your curious how everyone does that zoom-screen effect the software is called Screen Studio, it’s pretty good - <a href="https://www.screen.studio/" rel="noopener nofollow ugc">https://www.screen.studio/</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="334071" 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/what-elixir-related-stuff-are-you-doing/113/744">Post #743</a>
	                </div>
	            </div>
              <div id="likers-container-334071" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="334071"
                     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 #743"></div>
  </section>
</div>
    <div class="postbit" id="334249" data-post-id="334249">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>For work I’m converting an existing sales application to multi-tenancy.  On the side I’ve been working on a little project where you can send letters to people.  It’s called PostalBox and it does exactly what it says: you type a letter in, provide an address and pay for a stamp, a few days to weeks later (depending on the post) your letter will be delivered to said address.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://postalbox.xyz/">
  <header class="source">

      <a href="https://postalbox.xyz/" target="_blank" rel="noopener nofollow ugc">postalbox.xyz</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://postalbox.xyz/" target="_blank" rel="noopener nofollow ugc">Email meets snailmail
    | Postalbox</a></h3>



  </article>

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

  <div style="clear: both"></div>
</aside>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/4/b/4bdb0929199fd2c896c934a5f429b5d2b025d767.jpeg" data-download-href="https://forum.elixirforum.com/uploads/default/4bdb0929199fd2c896c934a5f429b5d2b025d767" title="Screenshot 2024-07-11 at 08.36.51" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/3X/4/b/4bdb0929199fd2c896c934a5f429b5d2b025d767.jpeg" alt="Screenshot 2024-07-11 at 08.36.51" data-base62-sha1="aP35IKaktFZFrQFHT5yIYkmd9nV" width="690" height="434" data-dominant-color="EDECEC"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">Screenshot 2024-07-11 at 08.36.51</span><span class="informations">1200×755 41.4 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="334249" 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/what-elixir-related-stuff-are-you-doing/113/745">Post #744</a>
	                </div>
	            </div>
              <div id="likers-container-334249" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="334249"
                     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 #744"></div>
  </section>
</div>
    <div class="postbit" id="335441" data-post-id="335441">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>learning ecto these days</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="335441" 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/what-elixir-related-stuff-are-you-doing/113/746">Post #745</a>
	                </div>
	            </div>
              <div id="likers-container-335441" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="335441"
                     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 #745"></div>
  </section>
</div>
    <div class="postbit" id="336539" data-post-id="336539">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m new to Elixir and so far, I have been trying to learn the language and the Phoenix Framework and having my eyes on the Ash Framework so there will be lots to learn.</p>
<p>I have been looking into LiveView and what UI libraries exist. (Sadly not many on this front).</p>
<p>I would eventually like to build a reusable data table extension with sorting/filtering/pagination/import/export.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="336539" 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/what-elixir-related-stuff-are-you-doing/113/747">Post #746</a>
	                </div>
	            </div>
              <div id="likers-container-336539" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="336539"
                     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 #746"></div>
  </section>
</div>
    <div class="postbit" id="336557" data-post-id="336557">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Welcome!  There is indeed a lot to learn but I wouldn’t feel pressure to learn Ash out of the gate.  I’ve been doing Elixir for 5 years and haven’t used Ash, unless their is something about the framework that interests you or it’s required for a project your doing I’d take it slow and go with just Elixir/Phoenix.</p>
<p>While there may not be a lot of LV/UI libraries one of the things I love about Elixir is the ethos of doing more with less.  I’ve found I’m far less likely to reach for an external library in Elixir than Ruby because it’s normally trivial to write my own.  (That said UI libraries can get complex fast so writing your own may not equate to a single afternoon of putting some logic into a module and calling it good)!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="336557" 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/what-elixir-related-stuff-are-you-doing/113/748">Post #747</a>
	                </div>
	            </div>
              <div id="likers-container-336557" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="336557"
                     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 #747"></div>
  </section>
</div>
    <div class="postbit" id="336558" data-post-id="336558">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hello and welcome!</p>
<aside class="quote no-group" data-username="Almusamim" data-post="747" data-topic="113">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/almusamim/48/35458_2.png" class="avatar"> Almusamim:</div>
<blockquote>
<p>I would eventually like to build a reusable data table extension with sorting/filtering/pagination/import/export.</p>
</blockquote>
</aside>
<p>There is already a great library called <a href="https://hexdocs.pm/flop/readme.html" rel="noopener nofollow ugc">Flop</a> (and its sibling, <a href="https://hexdocs.pm/flop_phoenix/readme.html" rel="noopener nofollow ugc">Flop Phoenix</a>) that does a lot of that.  It doesn’t include import/export, but depending on how general you are looking to make this, uploads are trivial with <a href="https://hexdocs.pm/phoenix_live_view/uploads.html" rel="noopener nofollow ugc">LiveView Uploads</a>.  I’m unsure if there is a package for exporting in a handful of different formats.  If not, that would be quite useful.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="336558" 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/what-elixir-related-stuff-are-you-doing/113/749">Post #748</a>
	                </div>
	            </div>
              <div id="likers-container-336558" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="336558"
                     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 #748"></div>
  </section>
</div>
    <div class="postbit" id="336574" data-post-id="336574">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="travisf" data-post="748" data-topic="113" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/travisf/48/18564_2.png" class="avatar"> travisf:</div>
<blockquote>
<p>Welcome! There is indeed a lot to learn but I wouldn’t feel pressure to learn Ash out of the gate. I’ve been doing Elixir for 5 years and haven’t used Ash, unless their is something about the framework that interests you or it’s required for a project your doing I’d take it slow and go with just Elixir/Phoenix.</p>
<p>While there may not be a lot of LV/UI libraries one of the things I love about Elixir is the ethos of doing more with less. I’ve found I’m far less likely to reach for an external library in Elixir than Ruby because it’s normally trivial to write my own. (That said UI libraries can get complex fast so writing your own may not equate to a single afternoon of putting some logic into a module and calling it good)!</p>
</blockquote>
</aside>
<p>Thanks for the welcome! <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>In the beginning, I’ll be focusing on learning Elixir and Phoenix.</p>
<p>I watched some talks by the creator of Ash, where he showcased Ash Resources. It looked neat and minimal when it comes to coding. Ash also seems to be more opinionated, which might be good for a newbie like me. For example, Ash helps with structuring my Phoenix project. I am mainly interested in Ash for its resources, authorization policies, and multitenancy to build a SaaS project.</p>
<p>Elixir, as a BEAM language, seems like a perfect choice for a SaaS project. Coming from a PHP/Laravel background, I have to get used to a functional programming mindset, which I’m told is very different from OOP.</p>
<p>My plan is to undergo intensive learning for 3 months, focusing on Elixir, Phoenix, LiveView, and Ecto. After that, I aim to start building a SaaS project for a client and finish it within a year. This means about 15 months of learning, but I’m not sure how realistic my plan is.</p>
<p>In the worst-case scenario, if I don’t manage to do it, I can use the Petal Framework, as it already has most of what I need. However, I won’t go with it without first trying to learn as much as I can.</p>
<p>As for UI frameworks, I’m still in the early stages and haven’t explored much yet. I’m not sure what the real issues are with using JS frameworks and LiveView. From what I see, JS is still a must-have to handle client-side interactions like modals and menus; it makes no sense to do that from the server side.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="336574" 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/what-elixir-related-stuff-are-you-doing/113/750">Post #749</a>
	                </div>
	            </div>
              <div id="likers-container-336574" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="336574"
                     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 #749"></div>
  </section>
</div>
    <div class="postbit" id="336576" data-post-id="336576">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="749" data-topic="113">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>There is already a great library called <a href="https://hexdocs.pm/flop/readme.html" rel="noopener nofollow ugc">Flop </a> (and its sibling, <a href="https://hexdocs.pm/flop_phoenix/readme.html" rel="noopener nofollow ugc">Flop Phoenix</a>) that does a lot of that. It doesn’t include import/export, but depending on how general you are looking to make this, uploads are trivial with <a href="https://hexdocs.pm/phoenix_live_view/uploads.html" rel="noopener nofollow ugc">LiveView Uploads</a>. I’m unsure if there is a package for exporting in a handful of different formats. If not, that would be quite useful.</p>
</blockquote>
</aside>
<p>Hello <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>Thanks for letting me know about Flop; it looks really good for sorting and filtering.</p>
<p>I have seen some tutorials for exporting using Elixir <code>Stream.resource()</code> to handle large data sets. There’s also this article on <a href="https://www.poeticoding.com/processing-large-csv-files-with-elixir-streams/?utm_source=reddit&amp;utm_medium=reddit_elixir_149" rel="noopener nofollow ugc">processing large CSV files with Elixir Streams</a> that covers importing large data.</p>
<p>It would be nice to make a reusable data table Phoenix component with all these features, including actions and multi-select rows, etc.</p>
<p>I haven’t seen any library data table featuring all these features other than Petal pro.<br>
Would be nice to have an open-source library eventually.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="336576" 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/what-elixir-related-stuff-are-you-doing/113/751">Post #750</a>
	                </div>
	            </div>
              <div id="likers-container-336576" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="336576"
                     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 #750"></div>
  </section>
</div>
    <div class="postbit" id="336581" data-post-id="336581">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve been working on getting the TUI framework <a href="https://github.com/ndreynolds/ratatouille" rel="noopener nofollow ugc">ratatouille</a> working over SSH (via the erlang <a href="https://www.erlang.org/doc/apps/ssh/ssh.html" rel="nofollow">ssh</a> application).</p>
<p>It uses the View/Renderer support in <code>ratatouille</code> to produce a logical render and then implements its own back-buffer combined with an optimised encoding, to produce pretty minimal escape sequences to the terminal. This means the <code>ex_termbox</code> NIF is not required, and each client gets their ‘own’ terminal. The terminal the vm is attached to is not affected.</p>
<p>I’m just working on the terminal support right now - I only need a handful of escape sequences - but for the widest possible terminal support, I opted to write a ‘terminfo to elixir’ generator, which translates a terminfo spec into an Elixir module e.g. for xterm-* terminals, ‘move cursor to position’ (cup) is defined as <code>\E[%i%p1%d;%p2%dH</code>, which translates to:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">def cup(p1, p2) do
  &lt;&lt;27, 91, Integer.to_string(p1 + 1), 59, Integer.to_string(p2 + 1), 72&gt;&gt;
end
</code></pre>
<p>(the weird escape sequences are a simple stack-machine language)</p>
<p>I’m not promising absolute compatibility with existing <code>ratatouille</code> apps (I probably will implement commands/subscriptions differently and keyboard mnemonics will likely follow the terminfo standard) but all the magic in the View support will be the same.</p>
<p>Hopefully will have something concrete to share in a few days.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="336581" data-batch-url="/posts/batch_likers">
                        4
                      </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/what-elixir-related-stuff-are-you-doing/113/752">Post #751</a>
	                </div>
	            </div>
              <div id="likers-container-336581" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="336581"
                     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 #751"></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/113/load_more?page=75">Load more posts (177 remaining)</a>
</div></template></turbo-stream>