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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Jaypee" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Jaypee
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My “SFTP Server/Client” is now functional with “resume” (reget/reput to resume incomplete transfers), retries with timing (retry transfers n times, every x seconds), and integrity checks (checksums).<br>
Each transfer use streams to avoid too much memory consumption and to speed up the checksum checks (calculated at the same time as the transfer by using pipes) .<br>
I got rid of every SFTP client dependencies mentionned above (but they greatly inspired me) and the SSH/SFTP functions used are now Erlang :ssh_sftp calls.<br>
I only kept the <a href="https://github.com/zyro/elixir-uuid" rel="noopener nofollow ugc">elixir_uuid library</a>  (needed to generate unique ID for each transfer) and the <a href="https://github.com/onkel-dirtus/logger_file_backend" rel="noopener nofollow ugc">logger_file_backend library</a> to log to a file.<br>
I use ETS/DETS to keep track of failed tranfers.<br>
Unfortunately, I can’t publish my code on Github as it is part of a corporate application.<img src="https://forum.elixirforum.com/images/emoji/apple/disappointed.png?v=15" title=":disappointed:" class="emoji" alt=":disappointed:" 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="144573" 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/secure-files-transfers-servers-in-elixir/21119/55">Post #54</a>
	                </div>
	            </div>
              <div id="likers-container-144573" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144573"
                     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 #54"></div>
  </section>
</div>
    <div class="postbit" id="144581" data-post-id="144581">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Jaypee" data-post="55" data-topic="21119">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/j/f6c823/48.png" class="avatar"> Jaypee:</div>
<blockquote>
<p>Unfortunately, I can’t publish my code on Github as it is part of a corporate application.</p>
</blockquote>
</aside>
<p>Can’t you just put it into a library and sell it to the management as “giving back to the community”? Companies these days mostly use OSS software so it’s only fair to give back every now and then. It’s also great (and basically free) marketing, plus you get improvements and bug reports from the community.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144581" 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/secure-files-transfers-servers-in-elixir/21119/56">Post #55</a>
	                </div>
	            </div>
              <div id="likers-container-144581" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144581"
                     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 #55"></div>
  </section>
</div>
    <div class="postbit" id="144598" data-post-id="144598">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Jaypee" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Jaypee
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I will ask but there’s few chance…<br>
Anyway I would have to seriously clean my code beforehand as it’s a “learning” one: full of Elixir n00b’s “scories” ! <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> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144598" 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/secure-files-transfers-servers-in-elixir/21119/57">Post #56</a>
	                </div>
	            </div>
              <div id="likers-container-144598" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144598"
                     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 #56"></div>
  </section>
</div>
    <div class="postbit" id="146062" data-post-id="146062">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Jaypee" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Jaypee
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve got official confirmation by my managers that I’m not allowed (at least for the moment) to publish my code. <img src="https://forum.elixirforum.com/images/emoji/apple/disappointed.png?v=15" title=":disappointed:" class="emoji" alt=":disappointed:" loading="lazy" width="20" height="20"></p>
<p>Anyway, I will remain at the disposal (in this thread) of anyone who struggles with such SFTP problems with Elixir…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="146062" 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/secure-files-transfers-servers-in-elixir/21119/58">Post #57</a>
	                </div>
	            </div>
              <div id="likers-container-146062" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="146062"
                     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 #57"></div>
  </section>
</div>
    <div class="postbit" id="151707" data-post-id="151707">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Jaypee" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Jaypee
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I redevelopped an entire new application (“Simple SFTP Client Server in Elixir”), based on things I learned this year:</p>
<p>Here’s the <a href="https://github.com/jipen/SscsEx" rel="noopener nofollow ugc">SscsEx GitHub page</a></p>
<p>NB: You can only use this repository as an inspiration for your own code as SscsEx will NOT be updated: I’m now on my way to the next Elixir step: learning Phoenix + LiveView ! <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" 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="151707" 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/secure-files-transfers-servers-in-elixir/21119/60">Post #59</a>
	                </div>
	            </div>
              <div id="likers-container-151707" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="151707"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-solved cat-solved" title="Marked as solution"></div>
  </section>
</div>
    <div class="postbit" id="191451" data-post-id="191451">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Jaypee" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Jaypee
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>New step now:</p>
<p>I’m currently developping a gateway to monitor my SSCS servers, using Phoenix/LiveView/Tailwind with the idea to fully use real time features (thanks to the <a href="https://forum.elixirforum.com/t/real-time-phoenix-pragprog/24808" rel="nofollow">Stephen Bussey’s new book</a>) and minimal DB access (BTW, only a small ETS).</p>
<p>I have added a new module to the SSCS server to manage the Phoenix Channel communications (using <a href="https://github.com/mobileoverlord/phoenix_client" rel="noopener nofollow ugc">MobileOverload Elixir Channel Client library</a>) and the first results are encouraging !</p>
<p>To be continued… <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" 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="191451" 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/secure-files-transfers-servers-in-elixir/21119/61">Post #60</a>
	                </div>
	            </div>
              <div id="likers-container-191451" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="191451"
                     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 #60"></div>
  </section>
</div>
    <div class="postbit" id="191455" data-post-id="191455">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I didn’t saw this thread back in the days and just noticed it now (appeared on top upon this message).<br>
First, I want to congratulate you for trying hard achieving your goal!</p>
<p>The entire thread (with some others ones linked here and there) was great to read.</p>
<p>I’m interested to hear more..</p>
<p>Keep up the good work..</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="191455" 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/secure-files-transfers-servers-in-elixir/21119/62">Post #61</a>
	                </div>
	            </div>
              <div id="likers-container-191455" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="191455"
                     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 #61"></div>
  </section>
</div>
    <div class="postbit" id="203407" data-post-id="203407">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Jaypee" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Jaypee
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Some updates:</p>
<p>I have been working on my corporate app (not the <a href="https://github.com/jipen/SscsEx" rel="noopener nofollow ugc">SscsEx on Github</a>) SFTP Server/Client using streaming, integrity checking and retries on error.</p>
<p>Inspired by the <a href="https://forum.elixirforum.com/t/real-time-phoenix-pragprog/24808" rel="nofollow">“Real-Tme Phoenix” book</a>, I had the idea to create a Phoenix app to monitor in real-time my SFTP Client/servers with no or at least minimal database accesses<br>
It uses Phoenix + LiveView + Bulma CSS + <a href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/55" rel="nofollow">Surface</a> in order to completely avoid JS. I only have a small DETS database to store the basics informations about my servers (no Ecto) grabbing the rest in real time, with Phoenix Channels.</p>
<p>I only added a new communication layer on my SFTP Servers/Clients using the <a href="https://github.com/mobileoverlord/phoenix_client" rel="noopener nofollow ugc">PhoenixClient library</a> and made minimal refactories.</p>
<p>At the moment it’s on a very crude state but it works !</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="203407" 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/secure-files-transfers-servers-in-elixir/21119/63">Post #62</a>
	                </div>
	            </div>
              <div id="likers-container-203407" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="203407"
                     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>