<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="376697" data-post-id="376697">
  <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
                    <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">
								<aside class="quote no-group" data-username="Asd" data-post="27" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/c68b51/48.png" class="avatar"> Asd:</div>
<blockquote>
<p>Is it going to be a B-tree variation or maybe some LSM or some new approach?</p>
</blockquote>
</aside>
<p>Leveled LSM with the versions from the cluster pushed directly into the storage engine in place of the sequence numbers. Deep integration is the goal.</p>
<p>The other big advantage of a custom storage engine is that it will enable more advanced data movement. FDB has in the past performed shard moves “logically” (by reading individual keys) rather than by directly copying the binary pages on disk. They have been moving away from this using RocksDB. I think I can do better because I will control the on-disk format.</p>
<p>I am working on an RFD (request for discussion) for the storage engine. I plan to post the RFDs as forum threads and solicit design feedback, so look out for that.</p>
<aside class="quote no-group" data-username="Asd" data-post="27" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/c68b51/48.png" class="avatar"> Asd:</div>
<blockquote>
<p>Looks like it’s not going to support arbitrary terms as keys. Why?</p>
</blockquote>
</aside>
<p>As we have previously discussed I just think <code>binary/binary</code> is a nice underlying abstraction. There will be binary encodings for both keys and values, but I will design those encodings. The purpose of the value encodings, by the way, is to enable predicate pushdown in the future.</p>
<p>Using lexicographic order and using a custom comparator are essentially equivalent. I know you prefer the latter, but I <em>don’t</em> and I think we have pretty much exhausted the discussion already tbh.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376697" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-376697" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376697"
                     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="376719" data-post-id="376719">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you for sharing your project! I look forward to following it.</p>
<p>Can you comment on the possibility of a public API and separate package for Construct? The idea of DST of BEAM primitives is interesting. Is there a prototypical example using Construct that demonstrates its capabilities?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376719" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-376719" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376719"
                     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="376727" data-post-id="376727">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Fuzzers are different, since they allow parallel execution, and they just tweak timeouts and inject faults</p>
<p>My solution allows only a single process to execute at a time and when it comes to the state where failure will occur (right now it’s only deadlocks, but I am planning to add an invariant logic like in ecosystems akin to Ada’s SPARK), it will write you down a sequences of how processes must switch and messages must travel in order for this specific failure to occur</p>
<p>Here’s the code, I’d say it’s like 50% ready and I am still testing it out on a simple CRDT increment-only counter algorithm to improve both libraries: <a href="https://github.com/hissssst/dist" class="inline-onebox" rel="noopener nofollow ugc">GitHub - hissssst/dist · GitHub</a></p>
<p>The reason why you should use both fuzzer and solutions like this is that fuzzers miss edge cases, but they are many times more efficient</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376727" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-376727" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376727"
                     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 #33"></div>
  </section>
</div>
    <div class="postbit" id="376732" data-post-id="376732">
  <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
                    <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">
								<aside class="quote no-group" data-username="jstimps" data-post="33" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jstimps/48/37213_2.png" class="avatar"> jstimps:</div>
<blockquote>
<p>Can you comment on the possibility of a public API and separate package for Construct?</p>
</blockquote>
</aside>
<p>I have had this under consideration from the beginning (which is why it has a name!), and it will probably happen at some point. Construct and Hobbes had to be written together, though.</p>
<p>It is not trivial to write simulation-tested code. Learning to write good fuzzers is a skill which I am still developing myself. And of course the thing you’re testing still has to be deterministic! Which, actually, has not been all that hard, but it would probably be a nightmare to retrofit to an existing codebase.</p>
<p>Still, at least <em>for me</em> I see a path to writing real applications that can be simtested. And at the very least we can have fully integrated simtests for <em>layers</em>, which I know is also your area of interest <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>
<aside class="quote no-group" data-username="jstimps" data-post="33" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jstimps/48/37213_2.png" class="avatar"> jstimps:</div>
<blockquote>
<p>Is there a prototypical example using Construct that demonstrates its capabilities?</p>
</blockquote>
</aside>
<p>Well, the prototypical example is Hobbes itself! The entire database is implemented using Construct, so you can kinda just look anywhere. If you want to see the fuzzers you can look in the <code>workloads/</code> directory, but note that the fuzzers actually work <em>outside</em> of the sim as well for the most part. I do run them outside of the sim occasionally just to make sure the thing actually works, but the simulator is just <em>so much</em> better for testing.</p>
<p>Actually, this is something that might be worth mentioning since I know you’re familiar with DST and FDB. When I started down this path I was pretty confident the simulator was necessary, but I wasn’t sure how much of the FDB testing “story” was just hype and so on.</p>
<p>My impression, having been at this a while now, is that it was all true and then some. I don’t think I could live without the sim at this point. The feedback loop is <em>so tight</em>, and deterministic failures make debugging so much easier. It really is <em>that</em> good.</p>
<p>It has me thinking that, some time long in the future, what I really want is a new BEAM with this stuff built-in.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376732" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-376732" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376732"
                     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 #34"></div>
  </section>
</div>
    <div class="postbit" id="376733" data-post-id="376733">
  <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
                    <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>Construct does not allow parallel execution. It’s a <em>deterministic</em> simulation testing framework, so parallelism is a no-go there. Only one process is allowed to execute at a time.</p>
<p>I <em>think</em> the difference in approach here can be summarized as “breadth-first vs depth-first”, but maybe I am not fully understanding.</p>
<p>Either way, I see the similarities and I’ll keep your approach in mind. Hobbes probably has too large a state space to explore exhaustively this way (not computationally tractable), but maybe smaller parts of it could be exhaustively checked for bugs.</p>
<p>Do you see parallels between your approach and formal methods (e.g. TLA+)?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376733" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-376733" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376733"
                     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 #35"></div>
  </section>
</div>
    <div class="postbit" id="376745" data-post-id="376745">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I appreciate the pointer to the workloads directory for examples. I’m reading the code and I’m surprised to find that Construct actually does make use of real BEAM processes and message passing. I had expected the simulation to run in a single real BEAM process on a node with exactly 1 online scheduler. And that Construct would itself schedule its simulated “processes” (you could call them green-green threads?)</p>
<p>With the simulation using more than 1 real process, does this not violate determinism?</p>
<p>Even if the BEAM scheduling is deterministic (I don’t know if it is or not), it’s not reproducible, so the only option is to treat it as as nondeterministic as far as I can tell.</p>
<p>With 1-process-1-scheduler, BEAM will of course still start and schedule all its other system processes, so care would have to be taken to ensure the simulator process would not rely on any other system process.</p>
<p>Strictly speaking, I suppose a reproducible workload could still be simulated on 1-process-n-schedulers, but that appears to complicate the matter without a benefit.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376745" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-376745" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376745"
                     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 #36"></div>
  </section>
</div>
    <div class="postbit" id="376746" data-post-id="376746">
  <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
                    <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">
								<aside class="quote no-group" data-username="jstimps" data-post="37" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jstimps/48/37213_2.png" class="avatar"> jstimps:</div>
<blockquote>
<p>I’m surprised to find that Construct actually does make use of real BEAM processes and message passing</p>
</blockquote>
</aside>
<p>It does, but the scheduler intercepts all of the messages. It intercepts a lot of stuff.</p>
<p>Processes are used because they are the only way I could think of to get resumable execution. If you look at <code>scheduler.ex</code> you will see I essentially built a <code>yield</code> statement out of messages and everything else is layered on top of that mechanism.</p>
<aside class="quote no-group" data-username="jstimps" data-post="37" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jstimps/48/37213_2.png" class="avatar"> jstimps:</div>
<blockquote>
<p>With the simulation using more than 1 real process, does this not violate determinism?</p>
</blockquote>
</aside>
<p>Ah, but you haven’t noticed the trick! By adding a <code>yield</code> statement to Elixir I have reduced the BEAM’s glorious preemptive scheduler to a cooperative model. Only one process can execute at a time, and they’re all gated by the central scheduler.</p>
<p>Horrifying, isn’t it?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376746" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-376746" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376746"
                     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 #37"></div>
  </section>
</div>
    <div class="postbit" id="376747" data-post-id="376747">
  <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
                    <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">
								<aside class="quote no-group" data-username="jstimps" data-post="37" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jstimps/48/37213_2.png" class="avatar"> jstimps:</div>
<blockquote>
<p>Even if the BEAM scheduling is deterministic (I don’t know if it is or not), it’s not reproducible, so the only option is to treat it as as nondeterministic as far as I can tell.</p>
</blockquote>
</aside>
<p>I doubt you could ever rely on the BEAM to be deterministic, but putting that aside another nice property for the simulator to have is <em>stability</em>.</p>
<p>One of the most useful features of the sim is that, when a run fails, you can actually go back and instrument the code with <em>extremely</em> specific log statements and other checks. Because of how Construct is implemented (like a cooperative scheduler), executing those log statements does not throw the run off of its path.</p>
<p>Even if the BEAM scheduler was deterministic the extra reductions from the log statements would destabilize it. Perhaps this could be made up for with fancy debugging tools, but I do enjoy my print statement debugging <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> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376747" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-376747" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376747"
                     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 #38"></div>
  </section>
</div>
    <div class="postbit" id="376754" data-post-id="376754">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I can’t really contribute to the discussion as this flies over my head in terms of knowledge, yes, I did read “Designing Data-Intensive Applications” and had Distributed Systems courses back in Uni times but DB stuff is still pretty much an unknown domain to me. <img src="https://forum.elixirforum.com/images/emoji/apple/woozy_face.png?v=15" title=":woozy_face:" class="emoji" alt=":woozy_face:" loading="lazy" width="20" height="20"></p>
<p>Anyway, just wanted to congratulate you for the release! Been digging through the source code, pretty cool stuff. <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>Also, the first Database should have been called Calvinex! <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" 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="376754" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-376754" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376754"
                     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 #39"></div>
  </section>
</div>
    <div class="postbit" id="376760" data-post-id="376760">
  <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
                    <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>Thanks! You and anyone else are still welcome to ask questions even if you don’t know much about this stuff btw. I don’t mind!</p>
<aside class="quote no-group" data-username="greven" data-post="40" data-topic="73003">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/greven/48/25004_2.png" class="avatar"> greven:</div>
<blockquote>
<p>the first Database should have been called Calvinex</p>
</blockquote>
</aside>
<p>Congratulations on technically being the first person to <a href="https://cs.yale.edu/homes/thomson/publications/calvin-sigmod12.pdf" rel="noopener nofollow ugc">get the pun</a>!</p>
<p>I was originally going to write a clone of Calvin before realizing that it was a research system and not a great candidate for that. Thankfully I found FDB which taught me a lot. But I kept the name <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> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="376760" 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/hobbes-a-low-level-distributed-database-for-the-elixir-programming-language/73003/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-376760" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="376760"
                     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 #40"></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/73003/load_more?page=5">Load more posts (46 remaining)</a>
</div></template></turbo-stream>