<div dir="ltr">find a few examples below <div><br><div><span style="font-size:12.8px">{deps, [</span><br><div><pre class="gmail-ng-scope" style="box-sizing:border-box;overflow:auto;margin-bottom:0px;background-color:rgb(246,246,246);margin-top:0px"><code style="box-sizing:border-box;background:transparent;padding:0px;line-height:18px;margin:0px;overflow:hidden"><span class="gmail-cm-s-neo" style="box-sizing:border-box;margin-top:0px"><font color="#666666" face="Monaco, Lucida Console, monospace">  {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">cowboy</span><font color="#666666" face="Monaco, Lucida Console, monospace">, {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">git</span><font color="#666666" face="Monaco, Lucida Console, monospace">, </font><span class="gmail-cm-string" style="box-sizing:border-box"><font color="#b35e14" face="Monaco, Lucida Console, monospace">"git://</font></span></span></code><font color="#1155cc" face="arial, sans-serif"><span style="font-size:12.8px;white-space:normal"><u><a href="https://github.com/ninenines/cowboy.git">https://github.com/ninenines/cowboy.git</a></u></span></font><font color="#b35e14" face="Monaco, Lucida Console, monospace">"</font><font color="#666666" face="Monaco, Lucida Console, monospace" style="background-color:transparent">, {</font><span class="gmail-cm-atom" style="background-color:transparent;font-size:12px;color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;box-sizing:border-box">ref</span><font color="#666666" face="Monaco, Lucida Console, monospace" style="background-color:transparent">, </font><span class="gmail-cm-string" style="background-color:transparent;font-size:12px;color:rgb(179,94,20);font-family:Monaco,"Lucida Console",monospace;box-sizing:border-box">"b7210d6"</span><font color="#666666" face="Monaco, Lucida Console, monospace" style="background-color:transparent">}<span style="box-sizing:border-box"></span>}},</font></pre><pre class="gmail-ng-scope" style="box-sizing:border-box;overflow:auto;margin-bottom:0px;background-color:rgb(246,246,246);margin-top:0px"><code style="box-sizing:border-box;background:transparent;padding:0px;line-height:18px;margin:0px;overflow:hidden"><span class="gmail-cm-s-neo" style="box-sizing:border-box;margin-top:0px"><font color="#666666" face="Monaco, Lucida Console, monospace">  {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">cowboy</span><font color="#666666" face="Monaco, Lucida Console, monospace">, {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">git</span><font color="#666666" face="Monaco, Lucida Console, monospace">, </font><span class="gmail-cm-string" style="box-sizing:border-box"><font color="#b35e14" face="Monaco, Lucida Console, monospace">"git://</font><font color="#1155cc" face="arial, sans-serif"><span style="font-size:12.8px;white-space:normal"><u><a href="https://github.com/ninenines/cowboy.git">https://github.com/ninenines/cowboy.git</a></u></span></font><font color="#b35e14" face="Monaco, Lucida Console, monospace">"</font></span><font color="#666666" face="Monaco, Lucida Console, monospace">, {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">branch</span><font color="#666666" face="Monaco, Lucida Console, monospace">, </font><span class="gmail-cm-string" style="color:rgb(179,94,20);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">"master"</span><font color="#666666" face="Monaco, Lucida Console, monospace">}<span style="box-sizing:border-box"></span>}},
  {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">cowboy</span><font color="#666666" face="Monaco, Lucida Console, monospace">, {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">git</span><font color="#666666" face="Monaco, Lucida Console, monospace">, </font><span class="gmail-cm-string" style="box-sizing:border-box"><font color="#b35e14" face="Monaco, Lucida Console, monospace">"git://</font><font color="#1155cc" face="arial, sans-serif"><span style="font-size:12.8px;white-space:normal"><u><a href="https://github.com/ninenines/cowboy.git">https://github.com/ninenines/cowboy.git</a></u></span></font><font color="#b35e14" face="Monaco, Lucida Console, monospace">"</font></span><font color="#666666" face="Monaco, Lucida Console, monospace">, {</font><span class="gmail-cm-atom" style="color:rgb(117,67,138);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">tag</span><font color="#666666" face="Monaco, Lucida Console, monospace">, </font><span class="gmail-cm-string" style="color:rgb(179,94,20);font-family:Monaco,"Lucida Console",monospace;font-size:12px;box-sizing:border-box">"1.1.2"</span><font color="#666666" face="Monaco, Lucida Console, monospace">}<span style="box-sizing:border-box"></span>}},</font></span></code></pre><pre class="gmail-ng-scope" style="box-sizing:border-box;overflow:auto;font-family:monospace,monospace;font-size:15px;margin-bottom:0px;color:rgb(76,85,90);background-color:rgb(246,246,246);margin-top:0px"><br></pre></div></div><div class="gmail_extra"><span style="font-size:12.8px">]}.</span><br></div><div class="gmail_extra">more ways of doing it can be found at <a href="http://www.rebar3.org/docs/dependencies">http://www.rebar3.org/docs/dependencies</a></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 26, 2017 at 2:06 AM, 7stud <span dir="ltr"><<a href="mailto:7stud@excite.com" target="_blank">7stud@excite.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">> Now it is broken because of the other issue I mentioned, the copy of<br>
> cowboy it is fetching is from github master and the API changed since<br>
> the code was written.<br>
<br>
> You'll either need to update the project's code or find what cowboy<br>
> version it worked with and update the dependencies to use that version.<br>
<br>
</span>I can't figure out how to specify an earlier version of cowboy:<br>
<br>
rebar.config:<br>
========<br>
{deps, [<br>
  {cowboy, "1.0.*", {git, "<a href="https://github.com/ninenines/cowboy/tree" rel="noreferrer" target="_blank">https://github.com/ninenines/<wbr>cowboy/tree</a>", "1.0.x"}}<br>
]}.<br>
========<br>
<br>
original rebar.config:<br>
=========<br>
{deps, [<br>
  {cowboy, ".*", {git, "git://<a href="http://github.com/extend/cowboy.git" rel="noreferrer" target="_blank">github.com/extend/<wbr>cowboy.git</a>", "master"}}<br>
]}.<br>
<span class="gmail-im gmail-HOEnZb">========<br>
<br>
<br>
-----Original Message-----<br>
From: "Tristan Sloughter" [<a href="mailto:t@crashfast.com">t@crashfast.com</a>]<br>
</span><div class="gmail-HOEnZb"><div class="gmail-h5">Date: 06/25/2017 09:16 PM<br>
To: <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
Subject: Re: [erlang-questions] Programming Erlang: Chap 18, Websockets<br>
<br>
Right, it fixed your original issue, which was ssl not being started.<br>
<br>
Now it is broken because of the other issue I mentioned, the copy of<br>
cowboy it is fetching is from github master and the API changed since<br>
the code was written.<br>
<br>
You'll either need to update the project's code or find what cowboy<br>
version it worked with and update the dependencies to use that version.<br>
<br>
--<br>
  Tristan Sloughter<br>
  "I am not a crackpot" - Abe Simpson<br>
  <a href="mailto:t@crashfast.com">t@crashfast.com</a><br>
<br>
On Sun, Jun 25, 2017, at 05:33 PM, 7stud wrote:<br>
> > So the quick fix is to add `application:start(asn1),<br>
> application:start(public_key), application:start(ssl),` before the start<br>
> of ranch. Or just `application:ensure_all_<wbr>started(ranch)`.<<br>
><br>
> I tried some combination of those already, but maybe not that exact<br>
> combination.  Here is what I get when I try<br>
><br>
>      application:ensure_all_<wbr>started(ranch)<br>
><br>
><br>
> Source code:<br>
> ----------<br>
> start_link(Dispatch, Port) -><br>
>     io:format("Starting:~p~n",[<wbr>file:get_cwd()]),<br>
>     ok = application:start(crypto),<br>
>     %%ok = application:start(ranch),  % Line #22<br>
>     application:ensure_all_<wbr>started(ranch),<br>
>     ok = application:start(cowlib),<br>
>     ok = application:start(cowboy),<br>
>     ok = web_server_start(Port, Dispatch).<br>
> ----------<br>
><br>
> Output:<br>
> ==========<br>
> ../ezwebframe-master$ gmake<br>
> ...<br>
> ...<br>
> Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10]<br>
> [hipe] [kernel-poll:false]<br>
><br>
> a simple_demo of websockets....<br>
> Load the page <a href="http://localhost:1456/" rel="noreferrer" target="_blank">http://localhost:1456/</a> in your browser<br>
> Starting:{ok,"/Users/7stud/<wbr>erlang_programs/ezwebframe/<wbr>ezwebframe-master/demos"}<br>
> Eshell V8.2  (abort with ^G)<br>
> 1> {"init terminating in<br>
> do_boot",{undef,[{cowboy,<wbr>start_http,[ezwebframe,100,[{<wbr>port,1456}],[{env,[{dispatch,[<wbr>{'_',[],[{'_',[],ezwebframe,{<wbr>env,#Fun<ezwebframe_demos.0.<wbr>106014447>}}]}]}]}]],[]},{<wbr>ezwebframe,web_server_start,2,<wbr>[{file,"src/ezwebframe.erl"},{<wbr>line,37}]},{ezwebframe,start_<wbr>link,2,[{file,"src/ezwebframe.<wbr>erl"},{line,29}]},{init,start_<wbr>em,1,[]},{init,do_boot,3,[]}]}<wbr>}<br>
> init terminating in do_boot ()<br>
><br>
> Crash dump is being written to: erl_crash.dump...done<br>
> make[1]: *** [all] Error 1<br>
> gmake: *** [Makefile:4: all] Error 2<br>
> =============<br>
><br>
><br>
> -----Original Message-----<br>
> From: "Tristan Sloughter" [<a href="mailto:t@crashfast.com">t@crashfast.com</a>]<br>
> Date: 06/25/2017 05:14 PM<br>
> To: <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> Subject: Re: [erlang-questions] Programming Erlang: Chap 18, Websockets<br>
><br>
> The main issue here looks to be that the dep is tied to the master<br>
> branch of a git repo. So the dependency is defined as one that will<br>
> continually change over time.<br>
><br>
> The version of ranch used when the code was written probably didn't list<br>
> `ssl` as a dependency, now that it does `application:start(ranch)` will<br>
> fail. So the quick fix is to add `application:start(asn1),<br>
> application:start(public_key), application:start(ssl),` before the start<br>
> of ranch. Or just `application:ensure_all_<wbr>started(ranch)`.<br>
><br>
> Moral of the story: lock your dependencies (even better if on a package<br>
> and not just a git reference) and use a release or<br>
> `application:ensure_all_<wbr>started` for running a project :)<br>
><br>
> --<br>
>   Tristan Sloughter<br>
>   "I am not a crackpot" - Abe Simpson<br>
>   <a href="mailto:t@crashfast.com">t@crashfast.com</a><br>
><br>
> On Sun, Jun 25, 2017, at 02:00 PM, Joe Armstrong wrote:<br>
> > Unfortunately cowboy (which I used) and the websockets standard have<br>
> > changed since I wrote the book. I also used make and not rebar.<br>
> ><br>
> > You've now run into what is one of the biggest problems in the<br>
> > computer world - code that used to work no longer works despite the<br>
> > fact the code itself has not been changed.<br>
> ><br>
> > One way around this is to use zero dependencies - in fact several<br>
> > programs I wrote 30 years ago in Erlang still work fine with no<br>
> > changes because there are no external dependencies. (as an aside: this<br>
> > is why I like code with zero external dependencies - it takes a lot<br>
> > longer to write - but you don't have to support it into the future<br>
> > when they things you depend upon change in a manner that is<br>
> > incompatible manner)<br>
> ><br>
> > In this example the underlying websockets protocol changed -<br>
> > websockets its is a crazy mess - websockets should have provided raw<br>
> > socket transport instead they chose to scramble the data in a weird<br>
> > manner to avoid problems with badly written proxies.<br>
> ><br>
> > The idea of "write once run anywhere" is a great goal - but we can't<br>
> > even do this - "write once run forever with no changes to your code"<br>
> > would be even better and things like NixOS are a step in the right<br>
> > direction.<br>
> ><br>
> > Welcome to the world of broken software.<br>
> ><br>
> > In my opinion this (making sure software evolution does not break<br>
> > existing functioning software)  is one of the biggest remaining<br>
> > software problems - my guess is that this problem is getting worse<br>
> > (due to the explosion in the numbers of programming languages,<br>
> > libraries and frameworks and build systems) and will be even worse in<br>
> > the IoT world.<br>
> ><br>
> > Lots for you guys to work on :-)<br>
> ><br>
> > Cheers<br>
> ><br>
> > /Joe<br>
> ><br>
> ><br>
> > On Sun, Jun 25, 2017 at 10:02 PM, 7stud <<a href="mailto:7stud@excite.com">7stud@excite.com</a>> wrote:<br>
> > > I'm having trouble running the demos for the ezwebframe.  I installed the old rebar (v. rebar3), but I'm getting the error:<br>
> > ><br>
> > >     {badmatch,{error,{not_started,<wbr>ssl}}<br>
> > ><br>
> > > I'm on Mac OSX 10.10.5.  Here is my output:<br>
> > ><br>
> > > ===========<br>
> > > ../ezwebframe-master$ gmake<br>
> > > ...<br>
> > > ....<br>
> > > Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]<br>
> > ><br>
> > > a simple_demo of websockets....<br>
> > > Load the page <a href="http://localhost:1456/" rel="noreferrer" target="_blank">http://localhost:1456/</a> in your browser<br>
> > > Starting:{ok,"/Users/7stud/<wbr>erlang_programs/ezwebframe/<wbr>ezwebframe-master/demos"}<br>
> > > Eshell V8.2  (abort with ^G)<br>
> > > 1> {"init terminating in do_boot",{{badmatch,{error,{<wbr>not_started,ssl}}},[{<wbr>ezwebframe,start_link,2,[{<wbr>file,"src/ezwebframe.erl"},{<wbr>line,22}]},{init,start_em,1,[]<wbr>},{init,do_boot,3,[]}]}}<br>
> > > init terminating in do_boot ()<br>
> > ><br>
> > > Crash dump is being written to: erl_crash.dump...done<br>
> > > make[1]: *** [all] Error 1<br>
> > > gmake: *** [Makefile:4: all] Error 2<br>
> > > ===========<br>
> > ><br>
> > > Thanks for any help is solving this problem!<br>
> > > ______________________________<wbr>_________________<br>
> > > erlang-questions mailing list<br>
> > > <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> > > <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
> > ______________________________<wbr>_________________<br>
> > erlang-questions mailing list<br>
> > <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> > <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
> ______________________________<wbr>_________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br>
<br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div></div></div>