Brian Candler | 20 Aug 12:46

Systematic debugging (ssh_sample_cli)

I have been trying to get the ssh_sample_cli application to run. This is
with R11B5 from Ubuntu Hardy.

I copied the ssh_sample_cli.erl to a local directory, and it appears to
compile and start:

  1> c(ssh_sample_cli).
  ./ssh_sample_cli.erl:128: Warning: this expression would cause a 'badarith' exception at run-time
  {ok,ssh_sample_cli}
  2> crypto:start().
  ok
  3> ssh_sample_cli:listen(2222).
  {ok,<0.46.0>}
  4>

However when I try to "ssh -p 2222 localhost help" from another terminal,
the client sees the connection drop, and the erlang shell shows

  =ERROR REPORT==== 20-Aug-2008::11:01:12 ===
  ** Generic server <0.50.0> terminating
  ** Last message in was {'EXIT',<0.47.0>,{error,eacces}}
  ** When Server state == {state,server,
                                 <0.47.0>,
                                 16,
                                 [],
                                 [{<0.51.0>,#Ref<0.0.0.213>}],
                                 0,
                                 [],
                                 [],
                                 undefined}
(Continue reading)

Nick Gerakines | 19 Aug 21:07

Reminder: Erlounge @ Yahoo

Just a reminder that on Thursday, August 21st from 6:00 pm to 8:00 pm
there will be an Erlounge at Yahoo's main campus in the Silicon
Valley. Come meet fellow Erlang developers and learn more about what
people are working on. The actual event will take place in the main
cafeteria and drinks and light snacks will be provided.

Address: Yahoo's Sunnyvale Campus, 701 1st Ave, Sunnyvale, CA 94089, USA
Parking/Campus Map: http://www.flickr.com/photos/sock/2779073340/
Upcoming: http://upcoming.yahoo.com/event/977428

Please contact me, Nick Gerakines <gerakine <at> yahoo-inc.com>, for more
information and/or directions. A quick email letting me know that you
are coming would be appreciated. So far about 20 people have RSVP'd.

# Nick Gerakines
Colm Dougan | 19 Aug 15:30

Possible bug after ets:insert exception

Hi,

I'm running 12B-3.  Below is a console session.  Everything worked as
expected until "4>" where I unintentionally provided an atom in my
insert and I get a bad arg.  Again that was expected.  What I didn't
expect, however, was that from then on the ets table seemed to be in a
bad state and couldn't be queried.  I realise this is an edge case.
Is this a bug?

Colm

Eshell V5.6.3  (abort with ^G)
1> ets:new(testtable,[set,named_table,private]).
testtable
2> ets:insert(testtable, [{foo, 10}]).
true
3> ets:tab2list(testtable).
[{foo,10}]
4> ets:insert(testtable, bar).
** exception error: bad argument
     in function  ets:insert/2
        called as ets:insert(testtable,bar)
5> ets:tab2list(testtable).
** exception error: bad argument
     in function  ets:match_object/2
        called as ets:match_object(testtable,'_')
     in call from ets:tab2list/1
Brian Candler | 19 Aug 14:18

(Newbie) extracting value for one key

In Erlang, it seems a list of {key,value} tuples is often returned, e.g.

17> P = process_info(self()).
[{current_function,{erl_eval,do_apply,5}},
 {initial_call,{erlang,apply,2}},
 {status,running},
 {message_queue_len,0},
 {messages,[]},
 {links,[<0.25.0>]},
 {dictionary,[]},
 {trap_exit,false},
 {error_handler,error_handler},
 {priority,normal},
 {group_leader,<0.24.0>},
 {heap_size,610},
 {stack_size,28},
 {reductions,526},
 {garbage_collection,[{fullsweep_after,65535}]}]

Question: What's the idiomatic way to extract the value for a particular
key? For example, to extract "stack_size" from the above I could write

18> hd([ V || {stack_size,V} <- P ]).
28

but is there a better way to do this?

Thanks,

Brian.
(Continue reading)

Re: inets HTTP client does not persist connections when POSTing

Hi,

erlang-questions-request <at> erlang.org wrote:
> Edwin Fine wrote:
>   
>> I read the inets code, and if I understand it correctly, it seems that 
>> when a non-idempotent operation such as POST is performed, httpc does 
>> not reuse the existing connection (httpc_manager:select_session/4 
>> returns no_connection, which starts a new handler). I am not sure if 
>> this is the correct thing to do, because my understanding is that that
>>     
>> restriction on non-idempotent operations applies to pipelining, 
Yes that is correct, and that is what the test is for. The problem is 
that  persistent
connections that does not use pipeling seems to have  been a missed as a 
concept.
Even though  I wrote most of  the current code in  the http-client  it 
has not been  my
design from scratch.  It has been a gradually improvement  and adoption 
to OTP principals
of a user contribution and one of many things that I do. So it seems 
there is a missing concept
here and that  we (most probably I ;)) need to do something about it. It 
is on the todo-list.

Regards - Ingela Erlang/OTP, Ericsson

>> not 
>> persistent connections. I can see no reason why one should not be able 
>> to do a series of consecutive POSTs on the same socket, as long as one 
(Continue reading)

Serge Aleynikov | 18 Aug 21:56

max timeout

I recall this question being asked on the mailing list before, but I 
can't seem to find that thread.

What's the MaxAllowedTimeout that can be specified in the after clause?

receive
after MaxAllowedTimeout ->
     ok
end.

It would be nice if the section 6.10 of the reference manual would 
include this info.

Thanks.

Serge
Matt Williamson | 18 Aug 17:32

Edoc optional function parameters

Hello,

In the docs for gen_server, there for example is call/2,3, two signatures for the same base function. How do I use edoc to do something similar? Basically I want one argument to be optional without writing a <at> spec for each one. Here's what I have now:

%%===================================================================
%% API
%%===================================================================
%%-------------------------------------------------------------------
%% <at> spec put(Node, Key, Value) -> Result
%%     Result = {ok, inserted, Key} | {error, notinserted}
%%     Key = term()
%%     Value = term()
%%     Node = node()
%% <at> doc Inserts a Key, Value pair into the server.
%%-------------------------------------------------------------------
put(Key, Value) ->
    put(node(), Key, Value).

put(Node, Key, Value) ->
    gen_server:call({simpledb_svr, Node}, {insert, Key, Value}).
<div><div dir="ltr">Hello,<br><br>In the docs for gen_server, there for example is call/2,3, two signatures for the same base function. How do I use edoc to do something similar? Basically I want one argument to be optional without writing a  <at> spec for each one. Here's what I have now:<br><br>%%===================================================================<br>%% API<br>%%===================================================================<br>%%-------------------------------------------------------------------<br>
%%  <at> spec put(Node, Key, Value) -&gt; Result<br>%%&nbsp;&nbsp;&nbsp;&nbsp; Result = {ok, inserted, Key} | {error, notinserted}<br>%%&nbsp;&nbsp;&nbsp;&nbsp; Key = term()<br>%%&nbsp;&nbsp;&nbsp;&nbsp; Value = term()<br>%%&nbsp;&nbsp;&nbsp;&nbsp; Node = node()<br>%%  <at> doc Inserts a Key, Value pair into the server.<br>
%%-------------------------------------------------------------------<br>put(Key, Value) -&gt;<br>&nbsp;&nbsp;&nbsp; put(node(), Key, Value).<br><br>put(Node, Key, Value) -&gt;<br>&nbsp;&nbsp;&nbsp; gen_server:call({simpledb_svr, Node}, {insert, Key, Value}).<br>
</div></div>
Hubert Plociniczak | 18 Aug 17:28

swap_handler and error_logger_file_h

When application has sasl_error_file_h handler installed it is possible
to do
gen_event:swap_handler(error_logger, {sasl_report_file_h, swap},{sasl_report_file_h, ["/tmp/foo.log",error]}).
However when I try to do:
gen_event:swap_handler(error_logger, {error_logger_file_h, swap},{error_logger_file_h, "/tmp/foo.log"}).
I get
{error,{error,einval}}.

I do not want to use error_logger:swap_handler({logfile, "/tmp/bar.log"})
because that doesn't delete the old handler (see gen_event:which_handlers(error_logger) )
and I end up having two error_logger_file_h handlers.
Any ideas?

Thanks,
Hubert

Jonas Boberg | 18 Aug 14:03

QuickCheck thesis presentation, 20 August, 18:30

Hi,

I will be presenting my thesis at the next Erlang London User Group Meeting
on Wednesday, 20 August, at 18:30
This is also a sneak preview of the paper which has been accepted to the
2008 ACM SIGPLAN workshop in Victoria, Canada
For more information:
http://www.erlang-consulting.com/erlang/events.html
Register for the event
here:
http://www.erlang-consulting.com/erlang/usergroup/erlanglondon/lugregister.html?event=Quick%20Check%20Thesis%20Presentation 

Abstract:
Current and future trends for software include increasingly complex
requirements on interaction between systems. As a result, the
difficulty of system testing increases. Model based testing is a test
technique where test cases are generated from a model of the system.
In this study we explore model-based testing on the system-level,
starting from early development. We apply model-based testing to a
sub-system of a message gateway product in order to improve early
fault detection. The results are compared to another sub-system that
is tested with hand-crafted test cases.
Based on our experiences, we present a set of challenges and
recommendations for system-level, model-based testing. Early results
indicate that model-based testing, starting from early development,
significantly increases the number of faults detected during system
testing.

Regards
Jonas Boberg

--

-- 
Jonas Boberg, jonas <at> erlang-consulting.com
Erlang Training and Consulting
http://www.erlang-consulting.com/
Matt Williamson | 18 Aug 13:40

Re: Need help with systools:make_tar/2

Sorry for the confusion. systools:make_script/1,2 works, but make_tar doesn't.

On Mon, Aug 18, 2008 at 7:28 AM, Martin Carlson <martin <at> erlang-consulting.com> wrote:
Yes you do need the quotes ;)

Martin Carlson
Erlang Training & Consulting


On 18 Aug 2008, at 11:50, Matt Williamson wrote:

No, but systools:make_script("simpledb") did :) I believe you need the quotes.

On Mon, Aug 18, 2008 at 3:35 AM, Martin Carlson <martin <at> erlang-consulting.com> wrote:
Hi,

Did the systools:make_script(simpledb) execute correctly?

You might want to try running your erl like erl -pa ../simpledb/ebin
Then issue systools:make_tar(simpledb).
There are some issues with paths and apps.

For instance, if you run erl like described above code:priv_dir works, while if you run it like erl -pa ebin it does not.

Martin Carlson
Erlang Training & Consulting


On 18 Aug 2008, at 06:29, Matt Williamson wrote:

Hi there,

I have an OTP app with the following simpledb.rel file:

{release, {"simpledb", "1.0"}, {erts, "5.5.5"},
      [{simpledb, "1.0"},
       {kernel, "2.11.5"},
       {stdlib, "1.14.5"}]}.

And the following simpledb.app file:

{application, simpledb,
    [{description, "Stores Key, Value pairs."},
     {id, "simpledb"},
     {vsn, "1.0"},
     {modules, [simpledb_app, simpledb_sup, simpledb_svr]},
     {mod, {simpledb_app, []}},
     {registered, [simpledb_svr]},
     {applications, [kernel, stdlib]}]}.

When I run `systools:make_tar("simpledb", [{path, ["ebin"]}])` I get the following error:

{{case_clause,
     {'EXIT',
         {function_clause,
             [{filename,join,[[]]},
              {systools_make,add_appl,7},
              {systools_make,'-add_applications/5-fun-0-',6},
              {lists,foldl,3},
              {systools_make,add_applications,5},
              {systools_make,mk_tar,6},
              {systools_make,mk_tar,5},
              {systools_make,make_tar,2}]}}},
 [{systools_make,'-add_applications/5-fun-0-',6},
  {lists,foldl,3},
  {systools_make,add_applications,5},
  {systools_make,mk_tar,6},
  {systools_make,mk_tar,5},
  {systools_make,make_tar,2},
  {erl_eval,do_apply,5},
  {escript,code_handler,4}]}

`systools:make_script("simpledb", [{path, ["ebin"]}])` works fine.

Also if you know why I get the following junk, it would be forever thankful:

*WARNING* kernel: Object code (application) out of date
*WARNING* kernel: Object code (application_controller) out of date
*WARNING* kernel: Object code (application_master) out of date
*WARNING* kernel: Object code (application_starter) out of date
*WARNING* kernel: Object code (auth) out of date
*WARNING* kernel: Object code (code) out of date
*WARNING* kernel: Object code (code_aux) out of date
*WARNING* kernel: Object code (packages) out of date
*WARNING* kernel: Object code (code_server) out of date
*WARNING* kernel: Object code (dist_util) out of date
*WARNING* kernel: Object code (erl_boot_server) out of date
*WARNING* kernel: Object code (erl_distribution) out of date
*WARNING* kernel: Object code (erl_prim_loader) out of date
*WARNING* kernel: Object code (erl_reply) out of date
*WARNING* kernel: Object code (erlang) out of date
*WARNING* kernel: Object code (error_handler) out of date
*WARNING* kernel: Object code (error_logger) out of date
*WARNING* kernel: Object code (file) out of date
*WARNING* kernel: Object code (file_server) out of date
*WARNING* kernel: Object code (file_io_server) out of date
*WARNING* kernel: Object code (prim_file) out of date
*WARNING* kernel: Object code (global) out of date
*WARNING* kernel: Object code (global_group) out of date
*WARNING* kernel: Object code (global_search) out of date
*WARNING* kernel: Object code (group) out of date
*WARNING* kernel: Object code (heart) out of date
*WARNING* kernel: Object code (hipe_unified_loader) out of date
*WARNING* kernel: Object code (inet6_tcp) out of date
*WARNING* kernel: Object code (inet6_tcp_dist) out of date
*WARNING* kernel: Object code (inet6_udp) out of date
*WARNING* kernel: Object code (inet_config) out of date
*WARNING* kernel: Object code (inet_hosts) out of date
*WARNING* kernel: Object code (inet_gethost_native) out of date
*WARNING* kernel: Object code (inet_tcp_dist) out of date
*WARNING* kernel: Object code (init) out of date
*WARNING* kernel: Object code (kernel) out of date
*WARNING* kernel: Object code (kernel_config) out of date
*WARNING* kernel: Object code (net) out of date
*WARNING* kernel: Object code (net_adm) out of date
*WARNING* kernel: Object code (net_kernel) out of date
*WARNING* kernel: Object code (os) out of date
*WARNING* kernel: Object code (ram_file) out of date
*WARNING* kernel: Object code (rpc) out of date
*WARNING* kernel: Object code (user) out of date
*WARNING* kernel: Object code (user_drv) out of date
*WARNING* kernel: Object code (user_sup) out of date
*WARNING* kernel: Object code (disk_log) out of date
*WARNING* kernel: Object code (disk_log_1) out of date
*WARNING* kernel: Object code (disk_log_server) out of date
*WARNING* kernel: Object code (disk_log_sup) out of date
*WARNING* kernel: Object code (dist_ac) out of date
*WARNING* kernel: Object code (erl_ddll) out of date
*WARNING* kernel: Object code (erl_epmd) out of date
*WARNING* kernel: Object code (erts_debug) out of date
*WARNING* kernel: Object code (gen_tcp) out of date
*WARNING* kernel: Object code (gen_udp) out of date
*WARNING* kernel: Object code (gen_sctp) out of date
*WARNING* kernel: Object code (prim_inet) out of date
*WARNING* kernel: Object code (inet) out of date
*WARNING* kernel: Object code (inet_db) out of date
*WARNING* kernel: Object code (inet_dns) out of date
*WARNING* kernel: Object code (inet_parse) out of date
*WARNING* kernel: Object code (inet_res) out of date
*WARNING* kernel: Object code (inet_tcp) out of date
*WARNING* kernel: Object code (inet_udp) out of date
*WARNING* kernel: Object code (inet_sctp) out of date
*WARNING* kernel: Object code (pg2) out of date
*WARNING* kernel: Object code (seq_trace) out of date
*WARNING* kernel: Object code (wrap_log_reader) out of date
*WARNING* kernel: Object code (zlib) out of date
*WARNING* kernel: Object code (otp_ring0) out of date
*WARNING* stdlib: Object code (base64) out of date
*WARNING* stdlib: Object code (beam_lib) out of date
*WARNING* stdlib: Object code (c) out of date
*WARNING* stdlib: Object code (calendar) out of date
*WARNING* stdlib: Object code (dets) out of date
*WARNING* stdlib: Object code (dets_server) out of date
*WARNING* stdlib: Object code (dets_sup) out of date
*WARNING* stdlib: Object code (dets_utils) out of date
*WARNING* stdlib: Object code (dets_v8) out of date
*WARNING* stdlib: Object code (dets_v9) out of date
*WARNING* stdlib: Object code (dict) out of date
*WARNING* stdlib: Object code (digraph) out of date
*WARNING* stdlib: Object code (digraph_utils) out of date
*WARNING* stdlib: Object code (edlin) out of date
*WARNING* stdlib: Object code (edlin_expand) out of date
*WARNING* stdlib: Object code (epp) out of date
*WARNING* stdlib: Object code (eval_bits) out of date
*WARNING* stdlib: Object code (erl_bits) out of date
*WARNING* stdlib: Object code (erl_compile) out of date
*WARNING* stdlib: Object code (erl_eval) out of date
*WARNING* stdlib: Object code (erl_expand_records) out of date
*WARNING* stdlib: Object code (erl_internal) out of date
*WARNING* stdlib: Object code (erl_lint) out of date
*WARNING* stdlib: Object code (erl_parse) out of date
*WARNING* stdlib: Object code (erl_posix_msg) out of date
*WARNING* stdlib: Object code (erl_pp) out of date
*WARNING* stdlib: Object code (erl_scan) out of date
*WARNING* stdlib: Object code (erl_tar) out of date
*WARNING* stdlib: Object code (error_logger_file_h) out of date
*WARNING* stdlib: Object code (error_logger_tty_h) out of date
*WARNING* stdlib: Object code (escript) out of date
*WARNING* stdlib: Object code (ets) out of date
*WARNING* stdlib: Object code (file_sorter) out of date
*WARNING* stdlib: Object code (filelib) out of date
*WARNING* stdlib: Object code (filename) out of date
*WARNING* stdlib: Object code (gb_trees) out of date
*WARNING* stdlib: Object code (gb_sets) out of date
*WARNING* stdlib: Object code (gen) out of date
*WARNING* stdlib: Object code (gen_event) out of date
*WARNING* stdlib: Object code (gen_fsm) out of date
*WARNING* stdlib: Object code (gen_server) out of date
*WARNING* stdlib: Object code (io) out of date
*WARNING* stdlib: Object code (io_lib) out of date
*WARNING* stdlib: Object code (io_lib_format) out of date
*WARNING* stdlib: Object code (io_lib_fread) out of date
*WARNING* stdlib: Object code (io_lib_pretty) out of date
*WARNING* stdlib: Object code (lib) out of date
*WARNING* stdlib: Object code (lists) out of date
*WARNING* stdlib: Object code (log_mf_h) out of date
*WARNING* stdlib: Object code (math) out of date
*WARNING* stdlib: Object code (ms_transform) out of date
*WARNING* stdlib: Object code (orddict) out of date
*WARNING* stdlib: Object code (ordsets) out of date
*WARNING* stdlib: Object code (otp_internal) out of date
*WARNING* stdlib: Object code (pg) out of date
*WARNING* stdlib: Object code (pool) out of date
*WARNING* stdlib: Object code (proc_lib) out of date
*WARNING* stdlib: Object code (proplists) out of date
*WARNING* stdlib: Object code (qlc) out of date
*WARNING* stdlib: Object code (qlc_pt) out of date
*WARNING* stdlib: Object code (queue) out of date
*WARNING* stdlib: Object code (random) out of date
*WARNING* stdlib: Object code (regexp) out of date
*WARNING* stdlib: Object code (sets) out of date
*WARNING* stdlib: Object code (shell) out of date
*WARNING* stdlib: Object code (shell_default) out of date
*WARNING* stdlib: Object code (slave) out of date
*WARNING* stdlib: Object code (sofs) out of date
*WARNING* stdlib: Object code (string) out of date
*WARNING* stdlib: Object code (supervisor) out of date
*WARNING* stdlib: Object code (supervisor_bridge) out of date
*WARNING* stdlib: Object code (sys) out of date
*WARNING* stdlib: Object code (timer) out of date
*WARNING* stdlib: Object code (win32reg) out of date
*WARNING* stdlib: Object code (zip) out of date


Thanks a lot!

Matt
_______________________________________________
erlang-questions mailing list




<div><div dir="ltr">Sorry for the confusion. systools:make_script/1,2 works, but make_tar doesn't.<br><br><div class="gmail_quote">On Mon, Aug 18, 2008 at 7:28 AM, Martin Carlson <span dir="ltr">&lt;<a href="mailto:martin <at> erlang-consulting.com">martin <at> erlang-consulting.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote"><div>
Yes you do need the quotes ;)<div>
<div class="Ih2E3d">
<br><div> <span><div>
Martin Carlson</div>
<div>Erlang Training &amp; Consulting</div>
<div><a href="http://www.erlang-consulting.com" target="_blank">http://www.erlang-consulting.com</a></div>
<br></span> </div>
<br>
</div>
<div>
<div></div>
<div class="Wj3C7c">
<div>
<div>On 18 Aug 2008, at 11:50, Matt Williamson wrote:</div>
<br><blockquote type="cite"><div dir="ltr">No, but systools:make_script("simpledb") did :) I believe you need the quotes.<br><br><div class="gmail_quote">
On Mon, Aug 18, 2008 at 3:35 AM, Martin Carlson <span dir="ltr">&lt;<a href="mailto:martin <at> erlang-consulting.com" target="_blank">martin <at> erlang-consulting.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote">
<div> Hi,<div><br></div>
<div>Did the systools:make_script(simpledb) execute correctly?</div>
<div><br></div>
<div>You might want to try running your erl like erl -pa ../simpledb/ebin</div>
<div>Then issue systools:make_tar(simpledb).</div>
 <div>There are some issues with paths and apps.</div>
<div><br></div>
<div>For instance, if you run erl like described above code:priv_dir works, while if you run it like erl -pa ebin it does not.</div>
<div>
<br><div> <span><div>
 Martin Carlson</div>
<div>Erlang Training &amp; Consulting</div>
<div><a href="http://www.erlang-consulting.com" target="_blank">http://www.erlang-consulting.com</a></div>
<br></span> </div>
<br><div>
<div>
<div></div>
<div> <div>
On 18 Aug 2008, at 06:29, Matt Williamson wrote:</div>
<br>
</div>
</div>
<blockquote type="cite">
<div>
<div></div>
<div><div dir="ltr">Hi there,<br><br>I have an OTP app with the following simpledb.rel file:<br><br>{release, {"simpledb", "1.0"}, {erts, "5.5.5"}, <br>
&nbsp;&nbsp;&nbsp; &nbsp; [{simpledb, "1.0"},<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {kernel, "2.11.5"},<br> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {stdlib, "1.14.5"}]}.<br><br>And the following simpledb.app file:<br><br>{application, simpledb, <br>&nbsp;&nbsp;&nbsp; [{description, "Stores Key, Value pairs."},<br>
&nbsp;&nbsp;&nbsp;&nbsp; {id, "simpledb"},<br> &nbsp;&nbsp;&nbsp;&nbsp; {vsn, "1.0"},<br>&nbsp;&nbsp;&nbsp;&nbsp; {modules, [simpledb_app, simpledb_sup, simpledb_svr]},<br> &nbsp;&nbsp;&nbsp;&nbsp; {mod, {simpledb_app, []}},<br>&nbsp;&nbsp;&nbsp;&nbsp; {registered, [simpledb_svr]},<br>&nbsp;&nbsp;&nbsp;&nbsp; {applications, [kernel, stdlib]}]}.<br><br>When I run `systools:make_tar("simpledb", [{path, ["ebin"]}])` I get the following error:<br><br>{{case_clause,<br>&nbsp;&nbsp;&nbsp;&nbsp; {'EXIT',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {function_clause,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [{filename,join,[[]]},<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {systools_make,add_appl,7},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {systools_make,'-add_applications/5-fun-0-',6},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {lists,foldl,3},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {systools_make,add_applications,5},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {systools_make,mk_tar,6},<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {systools_make,mk_tar,5},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {systools_make,make_tar,2}]}}},<br> &nbsp;[{systools_make,'-add_applications/5-fun-0-',6},<br>&nbsp; {lists,foldl,3},<br>&nbsp; {systools_make,add_applications,5},<br>&nbsp; {systools_make,mk_tar,6},<br>
&nbsp; {systools_make,mk_tar,5},<br>&nbsp; {systools_make,make_tar,2},<br>&nbsp; {erl_eval,do_apply,5},<br> &nbsp; {escript,code_handler,4}]}<br><br>`systools:make_script("simpledb", [{path, ["ebin"]}])` works fine.<br><br>Also if you know why I get the following junk, it would be forever thankful:<br><br>*WARNING* kernel: Object code (application) out of date<br> *WARNING* kernel: Object code (application_controller) out of date<br>
*WARNING* kernel: Object code (application_master) out of date<br>*WARNING* kernel: Object code (application_starter) out of date<br>*WARNING* kernel: Object code (auth) out of date<br> *WARNING* kernel: Object code (code) out of date<br>
*WARNING* kernel: Object code (code_aux) out of date<br>*WARNING* kernel: Object code (packages) out of date<br>*WARNING* kernel: Object code (code_server) out of date<br> *WARNING* kernel: Object code (dist_util) out of date<br>
*WARNING* kernel: Object code (erl_boot_server) out of date<br>*WARNING* kernel: Object code (erl_distribution) out of date<br>*WARNING* kernel: Object code (erl_prim_loader) out of date<br> *WARNING* kernel: Object code (erl_reply) out of date<br>
*WARNING* kernel: Object code (erlang) out of date<br>*WARNING* kernel: Object code (error_handler) out of date<br>*WARNING* kernel: Object code (error_logger) out of date<br> *WARNING* kernel: Object code (file) out of date<br>
*WARNING* kernel: Object code (file_server) out of date<br>*WARNING* kernel: Object code (file_io_server) out of date<br>*WARNING* kernel: Object code (prim_file) out of date<br> *WARNING* kernel: Object code (global) out of date<br>
*WARNING* kernel: Object code (global_group) out of date<br>*WARNING* kernel: Object code (global_search) out of date<br>*WARNING* kernel: Object code (group) out of date<br> *WARNING* kernel: Object code (heart) out of date<br>
*WARNING* kernel: Object code (hipe_unified_loader) out of date<br>*WARNING* kernel: Object code (inet6_tcp) out of date<br>*WARNING* kernel: Object code (inet6_tcp_dist) out of date<br> *WARNING* kernel: Object code (inet6_udp) out of date<br>
*WARNING* kernel: Object code (inet_config) out of date<br>*WARNING* kernel: Object code (inet_hosts) out of date<br>*WARNING* kernel: Object code (inet_gethost_native) out of date<br> *WARNING* kernel: Object code (inet_tcp_dist) out of date<br>
*WARNING* kernel: Object code (init) out of date<br>*WARNING* kernel: Object code (kernel) out of date<br>*WARNING* kernel: Object code (kernel_config) out of date<br> *WARNING* kernel: Object code (net) out of date<br>*WARNING* kernel: Object code (net_adm) out of date<br>
*WARNING* kernel: Object code (net_kernel) out of date<br>*WARNING* kernel: Object code (os) out of date<br>*WARNING* kernel: Object code (ram_file) out of date<br> *WARNING* kernel: Object code (rpc) out of date<br>*WARNING* kernel: Object code (user) out of date<br>
*WARNING* kernel: Object code (user_drv) out of date<br>*WARNING* kernel: Object code (user_sup) out of date<br>*WARNING* kernel: Object code (disk_log) out of date<br> *WARNING* kernel: Object code (disk_log_1) out of date<br>
*WARNING* kernel: Object code (disk_log_server) out of date<br>*WARNING* kernel: Object code (disk_log_sup) out of date<br>*WARNING* kernel: Object code (dist_ac) out of date<br> *WARNING* kernel: Object code (erl_ddll) out of date<br>
*WARNING* kernel: Object code (erl_epmd) out of date<br>*WARNING* kernel: Object code (erts_debug) out of date<br>*WARNING* kernel: Object code (gen_tcp) out of date<br> *WARNING* kernel: Object code (gen_udp) out of date<br>
*WARNING* kernel: Object code (gen_sctp) out of date<br>*WARNING* kernel: Object code (prim_inet) out of date<br>*WARNING* kernel: Object code (inet) out of date<br> *WARNING* kernel: Object code (inet_db) out of date<br>
 *WARNING* kernel: Object code (inet_dns) out of date<br>*WARNING* kernel: Object code (inet_parse) out of date<br>*WARNING* kernel: Object code (inet_res) out of date<br> *WARNING* kernel: Object code (inet_tcp) out of date<br>
 *WARNING* kernel: Object code (inet_udp) out of date<br>*WARNING* kernel: Object code (inet_sctp) out of date<br>*WARNING* kernel: Object code (pg2) out of date<br> *WARNING* kernel: Object code (seq_trace) out of date<br>
 *WARNING* kernel: Object code (wrap_log_reader) out of date<br>*WARNING* kernel: Object code (zlib) out of date<br>*WARNING* kernel: Object code (otp_ring0) out of date<br> *WARNING* stdlib: Object code (base64) out of date<br>
 *WARNING* stdlib: Object code (beam_lib) out of date<br>*WARNING* stdlib: Object code (c) out of date<br>*WARNING* stdlib: Object code (calendar) out of date<br>*WARNING* stdlib: Object code (dets) out of date<br> *WARNING* stdlib: Object code (dets_server) out of date<br>
 *WARNING* stdlib: Object code (dets_sup) out of date<br>*WARNING* stdlib: Object code (dets_utils) out of date<br>*WARNING* stdlib: Object code (dets_v8) out of date<br> *WARNING* stdlib: Object code (dets_v9) out of date<br>
 *WARNING* stdlib: Object code (dict) out of date<br>*WARNING* stdlib: Object code (digraph) out of date<br>*WARNING* stdlib: Object code (digraph_utils) out of date<br> *WARNING* stdlib: Object code (edlin) out of date<br>
 *WARNING* stdlib: Object code (edlin_expand) out of date<br>*WARNING* stdlib: Object code (epp) out of date<br>*WARNING* stdlib: Object code (eval_bits) out of date<br> *WARNING* stdlib: Object code (erl_bits) out of date<br>
 *WARNING* stdlib: Object code (erl_compile) out of date<br>*WARNING* stdlib: Object code (erl_eval) out of date<br>*WARNING* stdlib: Object code (erl_expand_records) out of date<br> *WARNING* stdlib: Object code (erl_internal) out of date<br>
 *WARNING* stdlib: Object code (erl_lint) out of date<br>*WARNING* stdlib: Object code (erl_parse) out of date<br>*WARNING* stdlib: Object code (erl_posix_msg) out of date<br> *WARNING* stdlib: Object code (erl_pp) out of date<br>
 *WARNING* stdlib: Object code (erl_scan) out of date<br>*WARNING* stdlib: Object code (erl_tar) out of date<br>*WARNING* stdlib: Object code (error_logger_file_h) out of date<br> *WARNING* stdlib: Object code (error_logger_tty_h) out of date<br>
 *WARNING* stdlib: Object code (escript) out of date<br>*WARNING* stdlib: Object code (ets) out of date<br>*WARNING* stdlib: Object code (file_sorter) out of date<br> *WARNING* stdlib: Object code (filelib) out of date<br>
*WARNING* stdlib: Object code (filename) out of date<br> *WARNING* stdlib: Object code (gb_trees) out of date<br>*WARNING* stdlib: Object code (gb_sets) out of date<br> *WARNING* stdlib: Object code (gen) out of date<br>*WARNING* stdlib: Object code (gen_event) out of date<br>
*WARNING* stdlib: Object code (gen_fsm) out of date<br> *WARNING* stdlib: Object code (gen_server) out of date<br> *WARNING* stdlib: Object code (io) out of date<br>*WARNING* stdlib: Object code (io_lib) out of date<br>*WARNING* stdlib: Object code (io_lib_format) out of date<br>
 *WARNING* stdlib: Object code (io_lib_fread) out of date<br> *WARNING* stdlib: Object code (io_lib_pretty) out of date<br>*WARNING* stdlib: Object code (lib) out of date<br>*WARNING* stdlib: Object code (lists) out of date<br>
 *WARNING* stdlib: Object code (log_mf_h) out of date<br> *WARNING* stdlib: Object code (math) out of date<br>*WARNING* stdlib: Object code (ms_transform) out of date<br>*WARNING* stdlib: Object code (orddict) out of date<br>
 *WARNING* stdlib: Object code (ordsets) out of date<br> *WARNING* stdlib: Object code (otp_internal) out of date<br>*WARNING* stdlib: Object code (pg) out of date<br>*WARNING* stdlib: Object code (pool) out of date<br>*WARNING* stdlib: Object code (proc_lib) out of date<br>
 *WARNING* stdlib: Object code (proplists) out of date<br> *WARNING* stdlib: Object code (qlc) out of date<br>*WARNING* stdlib: Object code (qlc_pt) out of date<br>*WARNING* stdlib: Object code (queue) out of date<br>*WARNING* stdlib: Object code (random) out of date<br>
 *WARNING* stdlib: Object code (regexp) out of date<br> *WARNING* stdlib: Object code (sets) out of date<br>*WARNING* stdlib: Object code (shell) out of date<br>*WARNING* stdlib: Object code (shell_default) out of date<br>
*WARNING* stdlib: Object code (slave) out of date<br> *WARNING* stdlib: Object code (sofs) out of date<br> *WARNING* stdlib: Object code (string) out of date<br>*WARNING* stdlib: Object code (supervisor) out of date<br>*WARNING* stdlib: Object code (supervisor_bridge) out of date<br>
 *WARNING* stdlib: Object code (sys) out of date<br> *WARNING* stdlib: Object code (timer) out of date<br>*WARNING* stdlib: Object code (win32reg) out of date<br>*WARNING* stdlib: Object code (zip) out of date<br><br><br> Thanks a lot!<br><br>Matt<br>
</div></div>
</div>
<div> _______________________________________________</div>
<div>erlang-questions mailing list</div>
<div><a href="mailto:erlang-questions <at> erlang.org" target="_blank">erlang-questions <at> erlang.org</a></div>
 <div><a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a></div> </blockquote>
</div>
<br>
</div>
</div>
</blockquote>
 </div>
<br>
</div></blockquote>
</div>
<br>
</div>
</div>
</div>
</div></blockquote>
</div>
<br>
</div></div>
Paul Guyot | 18 Aug 09:51

Dialyzer confused by several clauses?

Hello,

Updating some code, I realized that dialyzer did not complain about  
an incorrect specification.

Here is a simple code that it accepts:

-type(dict() :: any()).

-spec(clause/2::(integer(), dict()) -> tuple()).
clause(0, Dict) ->
     case orddict:find(0, Dict) of
         {ok, Value} -> Value;
         error -> 0.0
     end;
clause(Integer, Dict) ->
     case orddict:find(Integer, Dict) of
         {ok, Value} -> Value / Integer;
         error -> 0.0
     end.

The real contract is:
-spec(clause/2::(integer(), dict()) -> float()).

An implied contact would be:
-spec(clause/2::(integer(), dict()) -> float() | any()).

But this contract is certainly incompatible with the code:
-spec(clause/2::(integer(), dict()) -> tuple()).

Am I doing something wrong or is it a known limitation?

Regards,

Paul


Gmane