<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 19, 2014 at 1:33 PM, Loïc Hoguin <span dir="ltr"><<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On 06/19/2014 01:06 PM, Joe Armstrong wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
You can - Here is an example of a single file cowboy server that computes<br>
fib(N) -<br>
<br>
</blockquote></div>
[snip huge file]</blockquote><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
Put this in a file. chmod it to u+x and run it<br>
<br>
Then got to <a href="http://localhost:8124/fib?n=10" target="_blank">http://localhost:8124/fib?n=10</a><br>
<br>
And fib(10) will be returned<br>
</blockquote>
<br></div>
Joe, your one file example is longer than my many files getting started, not to mention completely cryptic. </blockquote><div><br></div><div>I *explicitly* said at the end "<span style="font-family:arial,sans-serif;font-size:13px">With a small amount of refactoring this could be</span></div>

<div style="font-family:arial,sans-serif;font-size:13px">make just as simple as the node.js examples" </div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">

This was a quick cut-and-paste job to show that it could be done - it was *never*</div><div style="font-family:arial,sans-serif;font-size:13px">intended an a beginners example.  </div><div style="font-family:arial,sans-serif;font-size:13px">

<br></div><div style="font-family:arial,sans-serif;font-size:13px">To make a beginners example - I'd move most of the code into the libraries and rename</div><div style="font-family:arial,sans-serif;font-size:13px">things fro clarity</div>

<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">The shebang up there isn't something you can just drop on people, you have to explain it.</blockquote>

<div><br></div><div>Yes</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> You also have to say why you have an infinite receive</blockquote>

<div><br></div><div>Can be refactored out of the code</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

 and how to stop the program.</blockquote><div><br></div><div>easy</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

 Plus, doing this you'd also have to explain them that they have to download 3 different projects manually and to put them in the appropriate folder.<br></blockquote><div><br></div><div>this is what something like npm should do</div>

<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
And of course, the worst is that by taking this one file example, people immediately get stuck. How do they add a second handler? I personally have no idea how to go from that one handler escript to something bigger.<div>

<br></div></blockquote><div><br></div><div>read the rebar example at </div><div style="font-family:arial,sans-serif;font-size:13px"><br class="">        <a href="https://github.com/basho/rebar/blob/develop/bootstrap" target="_blank">https://github.com/basho/rebar/blob/develop/bootstrap</a></div>
<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Actually bigger apps should not be built the same way as smaller apps,</div><div style="font-family:arial,sans-serif;font-size:13px">
just because large apps need a particular structure, there is no reason why small apps</div><div style="font-family:arial,sans-serif;font-size:13px">need the same structure.</div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
      2) make a packed escript that packs all the compiled code into a<br>
single file<br>
          rebar is a good example of this<br>
</blockquote>
<br></div>
That script takes an OTP application and bundles it into one escript. It makes little difference with taking an OTP application and generating a release, except the release is a lot more useful for servers.<div>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
  Erlang was not designed to be complex - the primitives in Erlang<br>
(spawn_link, trap_exits, etc.) were designed to be as simple as possible<br>
and were intended to be called from library routines.<br>
</blockquote>
<br></div>
I didn't say Erlang was designed to be complex. I'm saying running the Erlang VM is of higher complexity than dropping a PHP file into a folder or running nodejs myfile.js. And yes, that's true even if you use escripts.<div>

<div><br>
<br></div></div></blockquote><div><br></div><div>To run the erlang VM I say</div><div>    </div><div>     $ erl -s ....</div><div><br></div><div>To run node.js I say</div><div><br></div><div>     $ node ...</div><div> </div>
<div> I don't see why one is more complex than the other.</div><div><br></div><div>Cheers</div><div><br></div><div>/Joe</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div><div>
-- <br>
Loïc Hoguin<br>
<a href="http://ninenines.eu" target="_blank">http://ninenines.eu</a><br>
</div></div></blockquote></div><br></div></div>