<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt"><div>Regarding teaching erlang/OTP, I think this one is nice: </div><div><br></div><div style="background-color: transparent;">http://www.amazon.com/Erlang-OTP-Action-Martin-Logan/dp/1933988789/ref=sr_1_1?s=books&ie=UTF8&qid=1392292179&sr=1-1<br></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;"><br></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">Diving into OTP is a bit messy, but in the larger scheme of things it doesn't make sense to hide one of the main features of practical
 erlang programming. (I wouldn't mind a more elegant OTP on the other hand, but we're getting there.)</div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;"><br></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">By the way, since you mention e2, here's a little project to fast-forward the <span style="font-weight: bold;">simple</span> uses of applications and supervisors: https://github.com/thomasl/gen_app</div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;"><br></div><div style="background-color: transparent;
 color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">Example:</div><pre style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Courier, monospace; margin-top: 15px; margin-bottom: 15px; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); line-height: 19px; overflow: auto; padding: 6px 10px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: normal; color: rgb(51, 51, 51);"><code style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin-top: 0px; margin-bottom: 0px; padding: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; word-wrap:
 normal;">gen_app:app_sup(testapp, [{sup, my_sup}]).</code></pre><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-style: normal;"><span style="font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;">This starts a (dynamic) application </span><span style="font-family: 'Courier New', courier, monaco, monospace, sans-serif;">testapp</span> running a supervisor <span style="font-family: 'Courier New', courier, monaco, monospace, sans-serif;">my_sup</span> without children. You can also easily start more complex things like supervisor trees with various strategies, including the classic supervised gen_server, and much more. Note that what's often a couple of boilerplate modules are replaced by a few lines. </div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-style: normal; font-family: 'Courier New', courier, monaco, monospace,
 sans-serif;"><span style="background-color: transparent; font-family: 'Courier New', courier, monaco, monospace, sans-serif;"><br></span></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-style: normal;"><span style="background-color: transparent;">I'm currently debugging, pondering the API and looking at how to specify more complex cases like the ssl application in this framework.</span></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;"><br></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">(PS. You will probably have to massage the Makefile a little bit to build, sorry. See the link for more.<span
 style="background-color: transparent;">)</span></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;"><br></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">Best,</div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">Thomas</div><div class="yahoo_quoted" style="display: block;"> <br> <br> <div style="font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 10pt;"> <div style="font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
 font-size: 12pt;"> <div dir="ltr"> <font size="2" face="Arial"> On Thursday, February 13, 2014 11:00 AM, Ivan Uemlianin <ivan@llaisdy.com> wrote:<br> </font> </div> <blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; margin-top: 5px; padding-left: 5px;">  <div class="y_msg_container">On 13/02/2014 09:51, Garrett Smith wrote:<br clear="none">> ...<br clear="none">> What sucks IMO is that OTP is treated as "advanced" by the community<br clear="none">> and by book authors. I understand the history of this, but there's a<br clear="none">> cost: programmers delay learning core Erlang principles of<br clear="none">> *applications* -- i.e. supervisor trees -- because it's not taught up.<br clear="none"><br clear="none">This I very much agree with.  I think an Introduction to Erlang book <br clear="none">that started with releases and applications would be a very good idea.<br clear="none"><br
 clear="none">> It's also incredibly complicated, if you don't use e2.<br clear="none"><br clear="none"><a shape="rect" href="http://e2project.org/" target="_blank">http://e2project.org/</a><br clear="none"><br clear="none"><br clear="none">><br clear="none">> The irony is that *advanced* Erlang programmers can get away<br clear="none">> programming outside the OTP guard rails. Beginners should not even<br clear="none">> consider doing this until they understand why OTP works and why they<br clear="none">> should deviate.<br clear="none">><br clear="none">> e2 helps, a lot.<br clear="none">><br clear="none">> The whole point of e2 is to simplify the correct use of OTP -- letting<br clear="none">> programmers *start* with applications, supervisors and gen_servers (in<br clear="none">> e2 they're called services and tasks -- simple huh). I know it's<br clear="none">> controversial, but it's controversial to those who
 have been teaching<br clear="none">> Erlang while this stuff was being baked. I don't run into new learners<br clear="none">> who object to starting with OTP using e2 (though maybe they're just<br clear="none">> being polite -- if you're out there and had problems learning with e2,<br clear="none">> please drop me a line, or yell at me here).<br clear="none">><br clear="none">> I agree wholeheartedly with Pieter. It's just Erlang. Keeping the term<br clear="none">> OTP is a historic vestige. We're used to it, but it's a dead weight<br clear="none">> that adds only confusion.<br clear="none">><br clear="none">> The Ruby / Rails comparison is not accurate. It's more like Rails 1.0<br clear="none">> / Rails 2.0.<br clear="none">><br clear="none">> Sadly though, I just don't see "OTP" going away because there's a<br clear="none">> trickle of noise from this list :|<br clear="none">><br clear="none">> I make
 videos to cope.<br clear="none">><br clear="none">> On Thu, Feb 13, 2014 at 2:54 AM, Ivan Uemlianin <<a shape="rect" ymailto="mailto:ivan@llaisdy.com" href="mailto:ivan@llaisdy.com">ivan@llaisdy.com</a>> wrote:<br clear="none">>> On 13/02/2014 08:13, Pieter Hintjens wrote:<br clear="none">>>><br clear="none">>>> ... (a) stop using OTP as a<br clear="none">>>> confusing and needless synonym for Erlang, ...<br clear="none">>><br clear="none">>><br clear="none">>> Is that what OTP is used as?  I thought OTP was a set (or framework, or<br clear="none">>> platform) of libraries (behaviours, supervision, etc.) that facilitate the<br clear="none">>> development of highly scalable and reliable applications (telecoms-grade<br clear="none">>> scalability and reliability you might say).  AFAIK it's open-source.<br clear="none">>><br clear="none">>> Yes, let's
 rename it to something that more closely reflects what it really<br clear="none">>> is.  How about the "Open-source Telecoms-grade reliability and scalability<br clear="none">>> Platform"?<br clear="none">>><br clear="none">>> Ivan<br clear="none">>><br clear="none">>><br clear="none">>> --<br clear="none">>> ============================================================<br clear="none">>> Ivan A. Uemlianin PhD<br clear="none">>> Llaisdy<br clear="none">>> Speech Technology Research and Development<br clear="none">>><br clear="none">>>                      <a shape="rect" ymailto="mailto:ivan@llaisdy.com" href="mailto:ivan@llaisdy.com">ivan@llaisdy.com</a><br clear="none">>>                       www.llaisdy.com<br clear="none">>>     
                      llaisdy.wordpress.com<br clear="none">>>                github.com/llaisdy<br clear="none">>>                       www.linkedin.com/in/ivanuemlianin<br clear="none">>><br clear="none">>>                          festina lente<br clear="none">>> ============================================================<br clear="none">>><br clear="none">>> _______________________________________________<br clear="none">>> erlang-questions mailing list<br clear="none">>> <a shape="rect" ymailto="mailto:erlang-questions@erlang.org" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br clear="none">>> <a shape="rect"
 href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><div class="yqt7344586719" id="yqtfd83169"><br clear="none"><br clear="none">-- <br clear="none">============================================================<br clear="none">Ivan A. Uemlianin PhD<br clear="none">Llaisdy<br clear="none">Speech Technology Research and Development<br clear="none"><br clear="none">                     <a shape="rect" ymailto="mailto:ivan@llaisdy.com" href="mailto:ivan@llaisdy.com">ivan@llaisdy.com</a><br clear="none">                      www.llaisdy.com<br clear="none">                          llaisdy.wordpress.com<br clear="none">               github.com/llaisdy<br clear="none">   
                   www.linkedin.com/in/ivanuemlianin<br clear="none"><br clear="none">                         festina lente<br clear="none">============================================================<br clear="none">_______________________________________________<br clear="none">erlang-questions mailing list<br clear="none"><a shape="rect" ymailto="mailto:erlang-questions@erlang.org" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br clear="none"><a shape="rect" href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br clear="none"></div><br><br></div> </blockquote>  </div> </div>   </div> </div></body></html>