From joe@REDACTED Wed Sep 1 12:39:47 2004 From: joe@REDACTED (Joe Armstrong) Date: Wed, 1 Sep 2004 12:39:47 +0200 (CEST) Subject: Announce - The Erlang wiki is up again Message-ID: The Erlang wiki is back. We had a bad crash and lost some data The wiki has now been recovered and re-hosted on a local machine at SICS. Please try it out at: http://erlang.sics.se/wiki.html Cheers /Joe From joe@REDACTED Thu Sep 2 15:06:10 2004 From: joe@REDACTED (Joe Armstrong) Date: Thu, 2 Sep 2004 15:06:10 +0200 (CEST) Subject: What's up with this list? Message-ID: Is this list broken? There are very few postings recently. Also mail to the list is *still* not appearing in the list - it just black holes /Joe PS - please interact on the wiki at http://erlang.sics.se/wiki.html From mickael.remond@REDACTED Thu Sep 2 15:27:20 2004 From: mickael.remond@REDACTED (Mickael Remond) Date: Thu, 02 Sep 2004 15:27:20 +0200 Subject: What's up with this list? In-Reply-To: References: Message-ID: <41371FB8.9040607@erlang-fr.org> Joe Armstrong wrote: > > Is this list broken? > > There are very few postings recently. > > Also mail to the list is *still* not appearing in the list - > it just black holes The list seems to be working for me, but I only saw your last two messages in the last few days. This is indeed quite surprising ... -- Micka?l R?mond http://www.erlang-projects.org/ From mscandar@REDACTED Thu Sep 2 18:01:37 2004 From: mscandar@REDACTED (Mark Scandariato) Date: Thu, 02 Sep 2004 12:01:37 -0400 Subject: try/cond? Message-ID: <413743E1.6010404@cisco.com> Have try & cond arrived (even unofficially)? From mlogan@REDACTED Thu Sep 2 21:03:59 2004 From: mlogan@REDACTED (Martin J. Logan) Date: 02 Sep 2004 14:03:59 -0500 Subject: Multicast Message-ID: <1094151839.2233.7.camel@dhcp-lom-194-186.futuresource.com> Is it possible to have multiple nodes on a single machine listening for the same multicast packets at the same time? How can this be accomplished within erts? Cheers, Martin From kramer@REDACTED Thu Sep 2 21:39:35 2004 From: kramer@REDACTED (Reto Kramer) Date: Thu, 2 Sep 2004 12:39:35 -0700 Subject: Multicast In-Reply-To: <1094151839.2233.7.camel@dhcp-lom-194-186.futuresource.com> References: <1094151839.2233.7.camel@dhcp-lom-194-186.futuresource.com> Message-ID: The following works on the OSX and Linux for me. I had trouble opening the multicast socket on WinXP, but no patience to figure out the cause. cheers, - Reto Open a multicast port with: Res = gen_udp:open(get_port(), [binary, {reuseaddr,true}, {ip,get_addr()}, {multicast_loop,true}, {add_membership,{get_addr(), {0,0,0,0}}}]), where get_addr() -> {ok, App} = application:get_application(), case application:get_env(App, addr) of {ok, Val} -> Val; undefined -> ?ADDR end. get_port() -> ... and the env key of the .app file is {env, [{addr, {239,0,0,1}}, % the multicast ip addr {port, 10042}, % the port we multicast at {period, 1000}]}, % heartbeat interval in ms Send packets with Packet = {node_name, node()}, ok = gen_udp:send(State#state.socket, get_addr(), get_port(), term_to_binary(Packet)), and receive packets like this: receive {udp, Socket, IP, InPortNo, Packet} -> {node_name, Node} = binary_to_term(Packet), # On Sep 2, 2004, at 12:03 PM, Martin J. Logan wrote: > Is it possible to have multiple nodes on a single machine listening for > the same multicast packets at the same time? How can this be > accomplished within erts? > > Cheers, > Martin > From klacke@REDACTED Thu Sep 2 22:49:39 2004 From: klacke@REDACTED (klacke@REDACTED) Date: Thu, 2 Sep 2004 22:49:39 +0200 Subject: yaws 1.49 Message-ID: <20040902204939.GB32686@hyber.org> Yaws 1.49 released. Release notes as usual at http://yaws.hyber.org Enjoy, /klacke -- Claes Wikstrom -- Caps lock is nowhere and http://www.hyber.org -- everything is under control From kramer@REDACTED Fri Sep 3 03:12:33 2004 From: kramer@REDACTED (Reto Kramer) Date: Thu, 2 Sep 2004 18:12:33 -0700 Subject: timer cleanup in case gen_server crashes Message-ID: <55DB14C8-FD46-11D8-A65A-000393B64312@acm.org> If I start an interval timer in the init function of a gen_server like this: init([]) -> process_flag(trap_exit, true), {ok, TRef} = timer:apply_interval(get_period(), ?MODULE, trigger_heartbeat, []), {ok, #state{..., send_timer=TRef, ...}}. How can I then make sure that the timer is canceled in case the gen_server itself crashes? Will this happen automatically because the gen_server process is the parent of whatever the timer module spawns? I don't want to have the supervisor that starts my gen_server to know about the timer, I view the timer as an implementation detail of what the gen_server does. Would erlang gurus say this is reasonable? Thanks, - Reto From kramer@REDACTED Fri Sep 3 03:58:48 2004 From: kramer@REDACTED (Reto Kramer) Date: Thu, 2 Sep 2004 18:58:48 -0700 Subject: Multicast In-Reply-To: References: <1094151839.2233.7.camel@dhcp-lom-194-186.futuresource.com> Message-ID: [ups, sent this from wrong account initially] Martin, Here's a complete testcase that you can run locally. It's a dumbed down version of a larget app. Compile this file and then run it in two terminals with: erl -sname foo -s discover_server run erl -sname bar -s discover_server run Each node (foo and bar) will send numbered heartbeats to the multicast address and each one will pick up it's own packets as well as packets send by the other node. (foo@REDACTED)1> Running for 5 minutes. received packet 1 from node foo@REDACTED received packet 2 from node foo@REDACTED received packet 1 from node bar@REDACTED received packet 3 from node foo@REDACTED received packet 2 from node bar@REDACTED received packet 4 from node foo@REDACTED received packet 3 from node bar@REDACTED received packet 5 from node foo@REDACTED (bar@REDACTED)1> Running for 5 minutes. received packet 2 from node foo@REDACTED received packet 1 from node bar@REDACTED received packet 3 from node foo@REDACTED received packet 2 from node bar@REDACTED received packet 4 from node foo@REDACTED received packet 3 from node bar@REDACTED This is running on one OSX box. E.g. foo picks up it's own heartbeat 2, and bar picks up that same packet (foo's heartbeat 2) as well. So here they are not eating each others packets, but each process sees the same packets. Run it to see what you'll get on your setup. cheers, - Reto %%%------------------------------------------------------------------- %%% File : discover_server.erl %%% Author : reto %%% Description : Basic multicast based heart-beating %%%------------------------------------------------------------------- -module(discover_server). -behaviour(gen_server). %%-------------------------------------------------------------------- %% Include files %%-------------------------------------------------------------------- %%-------------------------------------------------------------------- %% External exports -export([start_link/0]). -export([run/0]). -export([trigger_heartbeat/0]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -record(state, {socket, % multicast udp socket nodes, % set of nodes (atoms) send_timer, % timer used to send heartbeats counter }). -define(HB_PERIOD_MS, 1000). % (if not in .app) default hb interval -define(ADDR, {239,0,42,1}). % (if not in .app) default addr -define(PORT, 10042). % (if not in .app) default port -define(SERVER, ?MODULE). %%==================================================================== %% External functions %%==================================================================== %%-------------------------------------------------------------------- %% Function: start_link/0 %% Description: Starts the server %%-------------------------------------------------------------------- start_link() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). %%==================================================================== %% Server functions %%==================================================================== %%-------------------------------------------------------------------- %% Function: init/1 %% Description: Initiates the server %% Returns: {ok, State} | %% {ok, State, Timeout} | %% ignore | %% {stop, Reason} %%-------------------------------------------------------------------- init([]) -> process_flag(trap_exit, true), {ok, Socket} = gen_udp:open(get_port(), [binary, {reuseaddr,true}, {ip,get_addr()}, {multicast_loop,true}, {add_membership,{get_addr(), {0,0,0,0}}}]), % net_kernel:monitor_nodes(true), {ok, TRef} = timer:apply_interval(get_period(), ?MODULE, trigger_heartbeat, []), {ok, #state{socket=Socket, nodes=sets:new(), send_timer=TRef, counter=1}}. %%-------------------------------------------------------------------- %% Function: handle_call/3 %% Description: Handling call messages %% Returns: {reply, Reply, State} | %% {reply, Reply, State, Timeout} | %% {noreply, State} | %% {noreply, State, Timeout} | %% {stop, Reason, Reply, State} | (terminate/2 is called) %% {stop, Reason, State} (terminate/2 is called) %%-------------------------------------------------------------------- handle_call(Request, From, State) -> Reply = ok, {reply, Reply, State}. %%-------------------------------------------------------------------- %% Function: handle_cast/2 %% Description: Handling cast messages %% Returns: {noreply, State} | %% {noreply, State, Timeout} | %% {stop, Reason, State} (terminate/2 is called) %%-------------------------------------------------------------------- handle_cast({send_heartbeat}, State) -> send_heartbeat(State), NewState = State#state{counter = State#state.counter + 1}, {noreply, NewState}; handle_cast(Msg, State) -> {noreply, State}. %%-------------------------------------------------------------------- %% Function: handle_info/2 %% Description: Handling all non call/cast messages %% Returns: {noreply, State} | %% {noreply, State, Timeout} | %% {stop, Reason, State} (terminate/2 is called) %%-------------------------------------------------------------------- handle_info({udp, Socket, IP, InPortNo, Packet}, State) -> {node_name, Node, counter, Counter} = binary_to_term(Packet), io:format("received packet ~p from node ~p~n",[Counter, Node]), {noreply, State}; handle_info(Info, State) -> {noreply, State}. %%-------------------------------------------------------------------- %% Function: terminate/2 %% Description: Shutdown the server %% Returns: any (ignored by gen_server) %%-------------------------------------------------------------------- terminate(Reason, State) -> ok. %%-------------------------------------------------------------------- %% Func: code_change/3 %% Purpose: Convert process state when code is changed %% Returns: {ok, NewState} %%-------------------------------------------------------------------- code_change(OldVsn, State, Extra) -> {ok, State}. %%-------------------------------------------------------------------- %%% Internal functions %%-------------------------------------------------------------------- trigger_heartbeat() -> gen_server:cast(?SERVER, {send_heartbeat}). send_heartbeat(State) -> Packet = {node_name, node(), counter, State#state.counter}, ok = gen_udp:send(State#state.socket, get_addr(), get_port(), term_to_binary(Packet)). get_addr() -> case application:get_application() of undefined -> ?ADDR; {ok, App} -> case application:get_env(App, addr) of undefined -> ?ADDR; {ok, Val} -> Val end end. get_port() -> case application:get_application() of undefined -> ?PORT; {ok, App} -> case application:get_env(App, port) of undefined -> ?PORT; {ok, Val} -> Val end end. get_period() -> case application:get_application() of undefined -> ?HB_PERIOD_MS; {ok, App} -> case application:get_env(App, period) of undefined -> ?HB_PERIOD_MS; {ok, Val} -> Val end end. %%-------------------------------------------------------------------- %%% debug functions %%-------------------------------------------------------------------- run() -> {ok, Pid} = ?MODULE:start_link(), io:format("Running for 5 minutes.~n",[]), timer:sleep(5*60*1000), io:format("done.~n",[]). # On Sep 2, 2004, at 12:39 PM, Reto Kramer wrote: > The following works on the OSX and Linux for me. I had trouble > opening the multicast socket on WinXP, but no patience to figure out > the cause. > > cheers, > - Reto > > Open a multicast port with: > Res = gen_udp:open(get_port(), [binary, > {reuseaddr,true}, > {ip,get_addr()}, > {multicast_loop,true}, > {add_membership,{get_addr(), > {0,0,0,0}}}]), > > where > get_addr() -> > {ok, App} = application:get_application(), > case application:get_env(App, addr) of > {ok, Val} -> > Val; > undefined -> > ?ADDR > end. > get_port() -> ... > > and the env key of the .app file is > {env, [{addr, {239,0,0,1}}, % the multicast ip addr > {port, 10042}, % the port we multicast at > {period, 1000}]}, % heartbeat interval in ms > > Send packets with > Packet = {node_name, node()}, > ok = gen_udp:send(State#state.socket, > get_addr(), > get_port(), > term_to_binary(Packet)), > > and receive packets like this: > receive > {udp, Socket, IP, InPortNo, Packet} -> > {node_name, Node} = binary_to_term(Packet), > > # > > On Sep 2, 2004, at 12:03 PM, Martin J. Logan wrote: > >> Is it possible to have multiple nodes on a single machine listening >> for >> the same multicast packets at the same time? How can this be >> accomplished within erts? >> >> Cheers, >> Martin >> > From tony@REDACTED Fri Sep 3 12:43:06 2004 From: tony@REDACTED (Tony Rogvall) Date: Fri, 03 Sep 2004 12:43:06 +0200 Subject: timer cleanup in case gen_server crashes In-Reply-To: <55DB14C8-FD46-11D8-A65A-000393B64312@acm.org> References: <55DB14C8-FD46-11D8-A65A-000393B64312@acm.org> Message-ID: <1094208186.2632.18.camel@bulldog> On Fri, 2004-09-03 at 03:12, Reto Kramer wrote: > If I start an interval timer in the init function of a gen_server like > this: > > init([]) -> > process_flag(trap_exit, true), > {ok, TRef} = timer:apply_interval(get_period(), > ?MODULE, trigger_heartbeat, []), > {ok, #state{..., send_timer=TRef, ...}}. > > How can I then make sure that the timer is canceled in case the > gen_server itself crashes? The timer module will take care of that. > > Will this happen automatically because the gen_server process is the > parent of whatever the timer module spawns? > The timer server will set a link to your server. And clean up. > I don't want to have the supervisor that starts my gen_server to know > about the timer, I view the timer as an implementation detail of what > the gen_server does. Would erlang gurus say this is reasonable? > I think that the timer bifs are better and more light weight Ref = erlang:set_timer(AfterMilli, Pid, Term) or Ref = erlang:send_after(AfterMilli, Pid, Message) erlang:cancel_timer(Ref) They however must be cleaned up in the terminate function. This is a place for emulator improvement, that is to associate all timers with the receiving process and clean them automatically when that process dies (no point sending timeout to a dead process!) Thanks for pointing that out (indirectly :-) /Tony From vances@REDACTED Fri Sep 3 13:31:31 2004 From: vances@REDACTED (Vance Shipley) Date: Fri, 3 Sep 2004 07:31:31 -0400 Subject: timer cleanup in case gen_server crashes In-Reply-To: <1094208186.2632.18.camel@bulldog> References: <55DB14C8-FD46-11D8-A65A-000393B64312@acm.org> <1094208186.2632.18.camel@bulldog> Message-ID: <20040903113131.GE37748@frogman.motivity.ca> Tony, Your comments caused me to have a look at gen_fsm.erl as I was just now using the new built in timers in gen_fsm for the first time. They don't seem to do anything special to clean up in the terminate function. -Vance On Fri, Sep 03, 2004 at 12:43:06PM +0200, Tony Rogvall wrote: } } I think that the timer bifs are better and more light weight } } Ref = erlang:set_timer(AfterMilli, Pid, Term) or } Ref = erlang:send_after(AfterMilli, Pid, Message) } erlang:cancel_timer(Ref) } } They however must be cleaned up in the terminate function. } This is a place for emulator improvement, that is to associate } all timers with the receiving process and clean them automatically } when that process dies (no point sending timeout to a dead process!) } } Thanks for pointing that out (indirectly :-) } } /Tony } } From mlogan@REDACTED Fri Sep 3 16:45:08 2004 From: mlogan@REDACTED (Martin J. Logan) Date: Fri, 03 Sep 2004 09:45:08 -0500 Subject: Multicast In-Reply-To: References: <1094151839.2233.7.camel@dhcp-lom-194-186.futuresource.com> Message-ID: <1094222708.10924.10.camel@berimbau.futuresource.com> Reto, again thank you very much for the help. I am not sure what is going on but on my machine, running Fedora Core 2 kernel 2.4.20-8, the nodes eat eachothers packets. received packet 1 from node 'bar@REDACTED' received packet 2 from node 'bar@REDACTED' received packet 3 from node 'bar@REDACTED' received packet 4 from node 'bar@REDACTED' received packet 5 from node 'bar@REDACTED' received packet 6 from node 'bar@REDACTED' received packet 7 from node 'bar@REDACTED' received packet 8 from node 'bar@REDACTED' received packet 9 from node 'bar@REDACTED' received packet 10 from node 'bar@REDACTED' received packet 1 from node 'foo@REDACTED' received packet 11 from node 'bar@REDACTED' received packet 2 from node 'foo@REDACTED' received packet 12 from node 'bar@REDACTED' received packet 3 from node 'foo@REDACTED' received packet 13 from node 'bar@REDACTED' received packet 4 from node 'foo@REDACTED' received packet 14 from node 'bar@REDACTED' Once the second node foo starts receiving packets then bar stops. Strange... Martin On Thu, 2004-09-02 at 20:58, Reto Kramer wrote: > [ups, sent this from wrong account initially] > > Martin, > > Here's a complete testcase that you can run locally. It's a dumbed down > version of a larget app. > > Compile this file and then run it in two terminals with: > > erl -sname foo -s discover_server run > erl -sname bar -s discover_server run > > Each node (foo and bar) will send numbered heartbeats to the multicast > address and each one will pick up it's own packets as well as packets > send by the other node. > > (foo@REDACTED)1> Running for 5 minutes. > received packet 1 from node foo@REDACTED > received packet 2 from node foo@REDACTED > received packet 1 from node bar@REDACTED > received packet 3 from node foo@REDACTED > received packet 2 from node bar@REDACTED > received packet 4 from node foo@REDACTED > received packet 3 from node bar@REDACTED > received packet 5 from node foo@REDACTED > > (bar@REDACTED)1> Running for 5 minutes. > received packet 2 from node foo@REDACTED > received packet 1 from node bar@REDACTED > received packet 3 from node foo@REDACTED > received packet 2 from node bar@REDACTED > received packet 4 from node foo@REDACTED > received packet 3 from node bar@REDACTED > > This is running on one OSX box. E.g. foo picks up it's own heartbeat > 2, and bar picks up that same packet (foo's heartbeat 2) as well. So > here they are not eating each others packets, but each process sees the > same packets. > > Run it to see what you'll get on your setup. > > cheers, > - Reto > > %%%------------------------------------------------------------------- > %%% File : discover_server.erl > %%% Author : reto > %%% Description : Basic multicast based heart-beating > %%%------------------------------------------------------------------- > -module(discover_server). > > -behaviour(gen_server). > %%-------------------------------------------------------------------- > %% Include files > %%-------------------------------------------------------------------- > > %%-------------------------------------------------------------------- > %% External exports > -export([start_link/0]). > > -export([run/0]). > > -export([trigger_heartbeat/0]). > > %% gen_server callbacks > -export([init/1, handle_call/3, handle_cast/2, handle_info/2, > terminate/2, code_change/3]). > > -record(state, {socket, % multicast udp socket > nodes, % set of nodes (atoms) > send_timer, % timer used to send heartbeats > counter > }). > > -define(HB_PERIOD_MS, 1000). % (if not in .app) default hb interval > -define(ADDR, {239,0,42,1}). % (if not in .app) default addr > -define(PORT, 10042). % (if not in .app) default port > > -define(SERVER, ?MODULE). > > %%==================================================================== > %% External functions > %%==================================================================== > %%-------------------------------------------------------------------- > %% Function: start_link/0 > %% Description: Starts the server > %%-------------------------------------------------------------------- > start_link() -> > gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). > > %%==================================================================== > %% Server functions > %%==================================================================== > > %%-------------------------------------------------------------------- > %% Function: init/1 > %% Description: Initiates the server > %% Returns: {ok, State} | > %% {ok, State, Timeout} | > %% ignore | > %% {stop, Reason} > %%-------------------------------------------------------------------- > init([]) -> > process_flag(trap_exit, true), > {ok, Socket} = gen_udp:open(get_port(), [binary, > {reuseaddr,true}, > {ip,get_addr()}, > {multicast_loop,true}, > {add_membership,{get_addr(), > {0,0,0,0}}}]), > % net_kernel:monitor_nodes(true), > {ok, TRef} = timer:apply_interval(get_period(), > ?MODULE, trigger_heartbeat, []), > {ok, #state{socket=Socket, > nodes=sets:new(), > send_timer=TRef, > counter=1}}. > > %%-------------------------------------------------------------------- > %% Function: handle_call/3 > %% Description: Handling call messages > %% Returns: {reply, Reply, State} | > %% {reply, Reply, State, Timeout} | > %% {noreply, State} | > %% {noreply, State, Timeout} | > %% {stop, Reason, Reply, State} | (terminate/2 is called) > %% {stop, Reason, State} (terminate/2 is called) > %%-------------------------------------------------------------------- > handle_call(Request, From, State) -> > Reply = ok, > {reply, Reply, State}. > > %%-------------------------------------------------------------------- > %% Function: handle_cast/2 > %% Description: Handling cast messages > %% Returns: {noreply, State} | > %% {noreply, State, Timeout} | > %% {stop, Reason, State} (terminate/2 is called) > %%-------------------------------------------------------------------- > handle_cast({send_heartbeat}, State) -> > send_heartbeat(State), > NewState = State#state{counter = State#state.counter + 1}, > {noreply, NewState}; > handle_cast(Msg, State) -> > {noreply, State}. > > %%-------------------------------------------------------------------- > %% Function: handle_info/2 > %% Description: Handling all non call/cast messages > %% Returns: {noreply, State} | > %% {noreply, State, Timeout} | > %% {stop, Reason, State} (terminate/2 is called) > %%-------------------------------------------------------------------- > handle_info({udp, Socket, IP, InPortNo, Packet}, State) -> > {node_name, Node, > counter, Counter} = binary_to_term(Packet), > io:format("received packet ~p from node ~p~n",[Counter, Node]), > {noreply, State}; > handle_info(Info, State) -> > {noreply, State}. > > %%-------------------------------------------------------------------- > %% Function: terminate/2 > %% Description: Shutdown the server > %% Returns: any (ignored by gen_server) > %%-------------------------------------------------------------------- > terminate(Reason, State) -> > ok. > > %%-------------------------------------------------------------------- > %% Func: code_change/3 > %% Purpose: Convert process state when code is changed > %% Returns: {ok, NewState} > %%-------------------------------------------------------------------- > code_change(OldVsn, State, Extra) -> > {ok, State}. > > %%-------------------------------------------------------------------- > %%% Internal functions > %%-------------------------------------------------------------------- > trigger_heartbeat() -> > gen_server:cast(?SERVER, {send_heartbeat}). > > send_heartbeat(State) -> > Packet = {node_name, node(), > counter, State#state.counter}, > ok = gen_udp:send(State#state.socket, > get_addr(), > get_port(), > term_to_binary(Packet)). > > get_addr() -> > case application:get_application() of > undefined -> > ?ADDR; > {ok, App} -> > case application:get_env(App, addr) of > undefined -> > ?ADDR; > {ok, Val} -> > Val > end > end. > > get_port() -> > case application:get_application() of > undefined -> > ?PORT; > {ok, App} -> > case application:get_env(App, port) of > undefined -> > ?PORT; > {ok, Val} -> > Val > end > end. > > get_period() -> > case application:get_application() of > undefined -> > ?HB_PERIOD_MS; > {ok, App} -> > case application:get_env(App, period) of > undefined -> > ?HB_PERIOD_MS; > {ok, Val} -> > Val > end > end. > > > %%-------------------------------------------------------------------- > %%% debug functions > %%-------------------------------------------------------------------- > run() -> > {ok, Pid} = ?MODULE:start_link(), > io:format("Running for 5 minutes.~n",[]), > timer:sleep(5*60*1000), > io:format("done.~n",[]). > > # > > On Sep 2, 2004, at 12:39 PM, Reto Kramer wrote: > > > The following works on the OSX and Linux for me. I had trouble > > opening the multicast socket on WinXP, but no patience to figure out > > the cause. > > > > cheers, > > - Reto > > > > Open a multicast port with: > > Res = gen_udp:open(get_port(), [binary, > > {reuseaddr,true}, > > {ip,get_addr()}, > > {multicast_loop,true}, > > {add_membership,{get_addr(), > > {0,0,0,0}}}]), > > > > where > > get_addr() -> > > {ok, App} = application:get_application(), > > case application:get_env(App, addr) of > > {ok, Val} -> > > Val; > > undefined -> > > ?ADDR > > end. > > get_port() -> ... > > > > and the env key of the .app file is > > {env, [{addr, {239,0,0,1}}, % the multicast ip addr > > {port, 10042}, % the port we multicast at > > {period, 1000}]}, % heartbeat interval in ms > > > > Send packets with > > Packet = {node_name, node()}, > > ok = gen_udp:send(State#state.socket, > > get_addr(), > > get_port(), > > term_to_binary(Packet)), > > > > and receive packets like this: > > receive > > {udp, Socket, IP, InPortNo, Packet} -> > > {node_name, Node} = binary_to_term(Packet), > > > > # > > > > On Sep 2, 2004, at 12:03 PM, Martin J. Logan wrote: > > > >> Is it possible to have multiple nodes on a single machine listening > >> for > >> the same multicast packets at the same time? How can this be > >> accomplished within erts? > >> > >> Cheers, > >> Martin > >> > > From mlogan@REDACTED Fri Sep 3 16:50:32 2004 From: mlogan@REDACTED (Martin J. Logan) Date: Fri, 03 Sep 2004 09:50:32 -0500 Subject: Multicast In-Reply-To: References: <1094151839.2233.7.camel@dhcp-lom-194-186.futuresource.com> Message-ID: <1094223032.10924.15.camel@berimbau.futuresource.com> Disregard the last email - In my eagerness to try this last example I plugged in the wrong IP for the multicast. I was using the localhost IP addr which of course explains the round robin in the last case. Thanks for the help - it works perfectly. On Thu, 2004-09-02 at 20:58, Reto Kramer wrote: > [ups, sent this from wrong account initially] > > Martin, > > Here's a complete testcase that you can run locally. It's a dumbed down > version of a larget app. > > Compile this file and then run it in two terminals with: > > erl -sname foo -s discover_server run > erl -sname bar -s discover_server run > > Each node (foo and bar) will send numbered heartbeats to the multicast > address and each one will pick up it's own packets as well as packets > send by the other node. > > (foo@REDACTED)1> Running for 5 minutes. > received packet 1 from node foo@REDACTED > received packet 2 from node foo@REDACTED > received packet 1 from node bar@REDACTED > received packet 3 from node foo@REDACTED > received packet 2 from node bar@REDACTED > received packet 4 from node foo@REDACTED > received packet 3 from node bar@REDACTED > received packet 5 from node foo@REDACTED > > (bar@REDACTED)1> Running for 5 minutes. > received packet 2 from node foo@REDACTED > received packet 1 from node bar@REDACTED > received packet 3 from node foo@REDACTED > received packet 2 from node bar@REDACTED > received packet 4 from node foo@REDACTED > received packet 3 from node bar@REDACTED > > This is running on one OSX box. E.g. foo picks up it's own heartbeat > 2, and bar picks up that same packet (foo's heartbeat 2) as well. So > here they are not eating each others packets, but each process sees the > same packets. > > Run it to see what you'll get on your setup. > > cheers, > - Reto > > %%%------------------------------------------------------------------- > %%% File : discover_server.erl > %%% Author : reto > %%% Description : Basic multicast based heart-beating > %%%------------------------------------------------------------------- > -module(discover_server). > > -behaviour(gen_server). > %%-------------------------------------------------------------------- > %% Include files > %%-------------------------------------------------------------------- > > %%-------------------------------------------------------------------- > %% External exports > -export([start_link/0]). > > -export([run/0]). > > -export([trigger_heartbeat/0]). > > %% gen_server callbacks > -export([init/1, handle_call/3, handle_cast/2, handle_info/2, > terminate/2, code_change/3]). > > -record(state, {socket, % multicast udp socket > nodes, % set of nodes (atoms) > send_timer, % timer used to send heartbeats > counter > }). > > -define(HB_PERIOD_MS, 1000). % (if not in .app) default hb interval > -define(ADDR, {239,0,42,1}). % (if not in .app) default addr > -define(PORT, 10042). % (if not in .app) default port > > -define(SERVER, ?MODULE). > > %%==================================================================== > %% External functions > %%==================================================================== > %%-------------------------------------------------------------------- > %% Function: start_link/0 > %% Description: Starts the server > %%-------------------------------------------------------------------- > start_link() -> > gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). > > %%==================================================================== > %% Server functions > %%==================================================================== > > %%-------------------------------------------------------------------- > %% Function: init/1 > %% Description: Initiates the server > %% Returns: {ok, State} | > %% {ok, State, Timeout} | > %% ignore | > %% {stop, Reason} > %%-------------------------------------------------------------------- > init([]) -> > process_flag(trap_exit, true), > {ok, Socket} = gen_udp:open(get_port(), [binary, > {reuseaddr,true}, > {ip,get_addr()}, > {multicast_loop,true}, > {add_membership,{get_addr(), > {0,0,0,0}}}]), > % net_kernel:monitor_nodes(true), > {ok, TRef} = timer:apply_interval(get_period(), > ?MODULE, trigger_heartbeat, []), > {ok, #state{socket=Socket, > nodes=sets:new(), > send_timer=TRef, > counter=1}}. > > %%-------------------------------------------------------------------- > %% Function: handle_call/3 > %% Description: Handling call messages > %% Returns: {reply, Reply, State} | > %% {reply, Reply, State, Timeout} | > %% {noreply, State} | > %% {noreply, State, Timeout} | > %% {stop, Reason, Reply, State} | (terminate/2 is called) > %% {stop, Reason, State} (terminate/2 is called) > %%-------------------------------------------------------------------- > handle_call(Request, From, State) -> > Reply = ok, > {reply, Reply, State}. > > %%-------------------------------------------------------------------- > %% Function: handle_cast/2 > %% Description: Handling cast messages > %% Returns: {noreply, State} | > %% {noreply, State, Timeout} | > %% {stop, Reason, State} (terminate/2 is called) > %%-------------------------------------------------------------------- > handle_cast({send_heartbeat}, State) -> > send_heartbeat(State), > NewState = State#state{counter = State#state.counter + 1}, > {noreply, NewState}; > handle_cast(Msg, State) -> > {noreply, State}. > > %%-------------------------------------------------------------------- > %% Function: handle_info/2 > %% Description: Handling all non call/cast messages > %% Returns: {noreply, State} | > %% {noreply, State, Timeout} | > %% {stop, Reason, State} (terminate/2 is called) > %%-------------------------------------------------------------------- > handle_info({udp, Socket, IP, InPortNo, Packet}, State) -> > {node_name, Node, > counter, Counter} = binary_to_term(Packet), > io:format("received packet ~p from node ~p~n",[Counter, Node]), > {noreply, State}; > handle_info(Info, State) -> > {noreply, State}. > > %%-------------------------------------------------------------------- > %% Function: terminate/2 > %% Description: Shutdown the server > %% Returns: any (ignored by gen_server) > %%-------------------------------------------------------------------- > terminate(Reason, State) -> > ok. > > %%-------------------------------------------------------------------- > %% Func: code_change/3 > %% Purpose: Convert process state when code is changed > %% Returns: {ok, NewState} > %%-------------------------------------------------------------------- > code_change(OldVsn, State, Extra) -> > {ok, State}. > > %%-------------------------------------------------------------------- > %%% Internal functions > %%-------------------------------------------------------------------- > trigger_heartbeat() -> > gen_server:cast(?SERVER, {send_heartbeat}). > > send_heartbeat(State) -> > Packet = {node_name, node(), > counter, State#state.counter}, > ok = gen_udp:send(State#state.socket, > get_addr(), > get_port(), > term_to_binary(Packet)). > > get_addr() -> > case application:get_application() of > undefined -> > ?ADDR; > {ok, App} -> > case application:get_env(App, addr) of > undefined -> > ?ADDR; > {ok, Val} -> > Val > end > end. > > get_port() -> > case application:get_application() of > undefined -> > ?PORT; > {ok, App} -> > case application:get_env(App, port) of > undefined -> > ?PORT; > {ok, Val} -> > Val > end > end. > > get_period() -> > case application:get_application() of > undefined -> > ?HB_PERIOD_MS; > {ok, App} -> > case application:get_env(App, period) of > undefined -> > ?HB_PERIOD_MS; > {ok, Val} -> > Val > end > end. > > > %%-------------------------------------------------------------------- > %%% debug functions > %%-------------------------------------------------------------------- > run() -> > {ok, Pid} = ?MODULE:start_link(), > io:format("Running for 5 minutes.~n",[]), > timer:sleep(5*60*1000), > io:format("done.~n",[]). > > # > > On Sep 2, 2004, at 12:39 PM, Reto Kramer wrote: > > > The following works on the OSX and Linux for me. I had trouble > > opening the multicast socket on WinXP, but no patience to figure out > > the cause. > > > > cheers, > > - Reto > > > > Open a multicast port with: > > Res = gen_udp:open(get_port(), [binary, > > {reuseaddr,true}, > > {ip,get_addr()}, > > {multicast_loop,true}, > > {add_membership,{get_addr(), > > {0,0,0,0}}}]), > > > > where > > get_addr() -> > > {ok, App} = application:get_application(), > > case application:get_env(App, addr) of > > {ok, Val} -> > > Val; > > undefined -> > > ?ADDR > > end. > > get_port() -> ... > > > > and the env key of the .app file is > > {env, [{addr, {239,0,0,1}}, % the multicast ip addr > > {port, 10042}, % the port we multicast at > > {period, 1000}]}, % heartbeat interval in ms > > > > Send packets with > > Packet = {node_name, node()}, > > ok = gen_udp:send(State#state.socket, > > get_addr(), > > get_port(), > > term_to_binary(Packet)), > > > > and receive packets like this: > > receive > > {udp, Socket, IP, InPortNo, Packet} -> > > {node_name, Node} = binary_to_term(Packet), > > > > # > > > > On Sep 2, 2004, at 12:03 PM, Martin J. Logan wrote: > > > >> Is it possible to have multiple nodes on a single machine listening > >> for > >> the same multicast packets at the same time? How can this be > >> accomplished within erts? > >> > >> Cheers, > >> Martin > >> > > From serge@REDACTED Thu Sep 9 13:49:12 2004 From: serge@REDACTED (Serge Aleynikov) Date: Thu, 09 Sep 2004 07:49:12 -0400 Subject: Erlang & SCTP Message-ID: <41404338.8090508@hq.idt.net> Hi, Is there an SCTP driver for Erlang? Are there plans to include it in the upcoming distribution? Thanks. Serge From ulf.wiger@REDACTED Mon Sep 6 17:43:35 2004 From: ulf.wiger@REDACTED (Ulf Wiger) Date: Mon, 06 Sep 2004 17:43:35 +0200 Subject: Erlang & SCTP In-Reply-To: <41404338.8090508@hq.idt.net> References: <41404338.8090508@hq.idt.net> Message-ID: On Thu, 09 Sep 2004 07:49:12 -0400, Serge Aleynikov wrote: > Is there an SCTP driver for Erlang? Are there plans to include it in > the upcoming distribution? The AXD 301 uses SCTP, and has a home-made interface to an SCTP stack developed in-house. There have been some discussions about making an OTP interface to SCTP, but in the past, it has been hampered somewhat by the fact that so few OSes offer SCTP as a standard service. /Uffe -- Ulf Wiger From ernie.makris@REDACTED Sat Sep 4 18:20:56 2004 From: ernie.makris@REDACTED (Ernie Makris) Date: Sat, 4 Sep 2004 12:20:56 -0400 Subject: epmd death Message-ID: <00aa01c4929b$2d727b00$4601a8c0@matrix> Hello, I have a concern that if epmd for some reason crashes, then my distributed nodes can't contact each other even if a new epmd is started. I have two distributed nodes setup on the same machine. I then kill epmd and then try to have one node rpc to another, which gives me a {badrpc,nodedown}. I took a look at net_kernel and erl_epmd and there doesn't look like there is a reconnection feature. Does anyone ever have any problems of this happening? Is there any workaround? Of course I could setup a separate socket and communicate through that, but it defeats the purpose of distributed erlang:( Thanks Ernie From kent@REDACTED Sat Sep 4 19:36:30 2004 From: kent@REDACTED (Kent Boortz) Date: Sat, 04 Sep 2004 19:36:30 +0200 Subject: epmd death In-Reply-To: <00aa01c4929b$2d727b00$4601a8c0@matrix> (Ernie Makris's message of "Sat, 4 Sep 2004 12:20:56 -0400") References: <00aa01c4929b$2d727b00$4601a8c0@matrix> Message-ID: "Ernie Makris" writes: > I have a concern that if epmd for some reason crashes, then my distributed > nodes > can't contact each other even if a new epmd is started. I have two > distributed nodes > setup on the same machine. I then kill epmd and then try to have one node > rpc to another, > which gives me a {badrpc,nodedown}. > > I took a look at net_kernel and erl_epmd and there doesn't look like there > is a reconnection > feature. Does anyone ever have any problems of this happening? Is there any > workaround? > > Of course I could setup a separate socket and communicate through that, but > it defeats the purpose > of distributed erlang:( Epmd is written to be small and simple to avoid problems with it crashing. There have been very few bug reports (only one serious that I can remember) after the code was cleaned up and test cases where added many years back. But it can of course happen (*). The Erlang node keeps a socket connection to epmd so it should not be that hard for an Erlang node to detect that epmd has died and try to restart it. For compatibility with WxWorks, and other OS'es that don't detect a close on a socket, there should probably be some sort of periodic ping between the node and epmd. The only complication with the restarting is that there may be several nodes on the same machine that all try to restart epmd at the same time. But this is not that hard to handle, kent (*) There is known that there have been product setups that use "in place" updates of the epmd binary. If you upgrade the binary for a running program, the program will die on some (most/all?) Unix'es. The program may not die directly when the binary is updated, it may take some time until the OS runs into problems because of the original binary being missing. Other than that there are no know problems with epmd that I'm aware of. Except the fact that a simple "epmd -kill" by any user on a machine will kill epmd ;-) -- Kent Boortz, Senior Software Developer MySQL AB, www.mysql.com Office: +46 8 590 910 63 Mobile: +46 70 279 11 71 From ernie.makris@REDACTED Sat Sep 4 19:56:28 2004 From: ernie.makris@REDACTED (Ernie Makris) Date: Sat, 4 Sep 2004 13:56:28 -0400 Subject: epmd death References: <00aa01c4929b$2d727b00$4601a8c0@matrix> Message-ID: <00c001c492a8$8533ebf0$4601a8c0@matrix> Hi Kent, Thanks for the reply. I luckily have never had epmd crash on me. Just to add to the discussion: Even if you kill epmd after you have all of your distributed nodes communicating, it doesn't matter because both nodes then know about each other. If you try to contact a third node that was never previously contacted, then you are in trouble. By then I should be able to detect a downed epmd and restart it before any new nodes come online. As for the other platforms, can they detect a bad write on the epmd socket? Would they get this sort of indication? If they could, then it would be fairly safe to add reconnection logic to epmd. Thanks Ernie ----- Original Message ----- From: "Kent Boortz" To: "Ernie Makris" Cc: Sent: Saturday, September 04, 2004 1:36 PM Subject: Re: epmd death > > "Ernie Makris" writes: > > I have a concern that if epmd for some reason crashes, then my distributed > > nodes > > can't contact each other even if a new epmd is started. I have two > > distributed nodes > > setup on the same machine. I then kill epmd and then try to have one node > > rpc to another, > > which gives me a {badrpc,nodedown}. > > > > I took a look at net_kernel and erl_epmd and there doesn't look like there > > is a reconnection > > feature. Does anyone ever have any problems of this happening? Is there any > > workaround? > > > > Of course I could setup a separate socket and communicate through that, but > > it defeats the purpose > > of distributed erlang:( > > Epmd is written to be small and simple to avoid problems with it > crashing. There have been very few bug reports (only one serious that > I can remember) after the code was cleaned up and test cases where > added many years back. > > But it can of course happen (*). The Erlang node keeps a socket > connection to epmd so it should not be that hard for an Erlang node to > detect that epmd has died and try to restart it. For compatibility > with WxWorks, and other OS'es that don't detect a close on a socket, > there should probably be some sort of periodic ping between the node > and epmd. The only complication with the restarting is that there may > be several nodes on the same machine that all try to restart epmd at > the same time. But this is not that hard to handle, > > kent > > (*) There is known that there have been product setups that use "in > place" updates of the epmd binary. If you upgrade the binary for a > running program, the program will die on some (most/all?) Unix'es. The > program may not die directly when the binary is updated, it may take > some time until the OS runs into problems because of the original > binary being missing. Other than that there are no know problems with > epmd that I'm aware of. Except the fact that a simple "epmd -kill" by > any user on a machine will kill epmd ;-) > > -- > Kent Boortz, Senior Software Developer > MySQL AB, www.mysql.com > Office: +46 8 590 910 63 > Mobile: +46 70 279 11 71 From vances@REDACTED Sat Sep 4 22:04:20 2004 From: vances@REDACTED (Vance Shipley) Date: Sat, 4 Sep 2004 16:04:20 -0400 Subject: Erlang & SCTP In-Reply-To: References: <41404338.8090508@hq.idt.net> Message-ID: <20040904200420.GA44100@frogman.motivity.ca> Uffe, Solaris 10 now includes SCTP. http://docs.sun.com/db/doc/817-4415/6mjum5sgj?q=sctp&a=view -Vance On Mon, Sep 06, 2004 at 05:43:35PM +0200, Ulf Wiger wrote: } } The AXD 301 uses SCTP, and has a home-made interface to an SCTP stack } developed in-house. There have been some discussions about making } an OTP interface to SCTP, but in the past, it has been hampered } somewhat by the fact that so few OSes offer SCTP as a standard service. } } /Uffe From vances@REDACTED Sat Sep 4 22:39:01 2004 From: vances@REDACTED (Vance Shipley) Date: Sat, 4 Sep 2004 16:39:01 -0400 Subject: epmd death In-Reply-To: References: <00aa01c4929b$2d727b00$4601a8c0@matrix> Message-ID: <20040904203901.GB44100@frogman.motivity.ca> Kent, One simple solution is to put it in /etc/inittab: ep:234:respawn:/export/home/otpuser/lib/erlang/erts-5.3.6.3/bin/epmd That way init will be tasked with keeping it running and will restart it when it dies immediately. -Vance On Sat, Sep 04, 2004 at 07:36:30PM +0200, Kent Boortz wrote: } } .... . The only complication with the restarting is that there may } be several nodes on the same machine that all try to restart epmd at } the same time. But this is not that hard to handle, } } kent From ulf.wiger@REDACTED Tue Sep 7 00:01:21 2004 From: ulf.wiger@REDACTED (Ulf Wiger) Date: Tue, 07 Sep 2004 00:01:21 +0200 Subject: Erlang & SCTP In-Reply-To: <20040904200420.GA44100@frogman.motivity.ca> References: <41404338.8090508@hq.idt.net> <20040904200420.GA44100@frogman.motivity.ca> Message-ID: On Sat, 4 Sep 2004 16:04:20 -0400, Vance Shipley wrote: > Uffe, > > Solaris 10 now includes SCTP. > > http://docs.sun.com/db/doc/817-4415/6mjum5sgj?q=sctp&a=view Well, finally. I had almost given up on the idea of them ever supporting their SCTP implementation. And lksctp (Linux Kernel SCTP) is officially in the 2.6 kernel. Things are shaping up. (: /Uffe -- Ulf Wiger From hal@REDACTED Sun Sep 5 00:49:37 2004 From: hal@REDACTED (Hal Snyder) Date: Sat, 04 Sep 2004 17:49:37 -0500 Subject: Erlang & SCTP In-Reply-To: ("Ulf Wiger"'s message of "Tue, 07 Sep 2004 00:01:21 +0200") References: <41404338.8090508@hq.idt.net> <20040904200420.GA44100@frogman.motivity.ca> Message-ID: <87pt51wsxq.fsf@ghidra.vail> "Ulf Wiger" writes: > On Sat, 4 Sep 2004 16:04:20 -0400, Vance Shipley > wrote: > >> Uffe, >> >> Solaris 10 now includes SCTP. >> >> http://docs.sun.com/db/doc/817-4415/6mjum5sgj?q=sctp&a=view > > Well, finally. I had almost given up on the idea of them ever > supporting their SCTP implementation. > > And lksctp (Linux Kernel SCTP) is officially in the 2.6 kernel. > Things are shaping up. (: For MAC and BSD's, there's the kame integration: http://www.sctp.org/index.html From serge@REDACTED Fri Sep 10 05:13:06 2004 From: serge@REDACTED (Serge Aleynikov) Date: Thu, 09 Sep 2004 23:13:06 -0400 Subject: Erlang & SCTP In-Reply-To: References: <41404338.8090508@hq.idt.net> Message-ID: <41411BC2.409@hq.idt.net> As we saw in responses in this thread, Solaris, Linux (2.6.x), BSD and Mac all have SCTP kernel-level implementations. The socket API extension with SCTP support was standardized. I think it's about time to revisit the question on including SCTP interface to the OTP. While it's quite easy to implement, as the API looks very similar to its TCP/UDP counterparts, I think that it would be a valuable complement to the Erlang suit of features that would give even more power in designing fault-tolerant distributed systems than what is available in current release. Another two nice OTP additions would be M3UA and SUA implementations... :-) Serge Ulf Wiger wrote: > > > On Thu, 09 Sep 2004 07:49:12 -0400, Serge Aleynikov > wrote: > >> Is there an SCTP driver for Erlang? Are there plans to include it >> in the upcoming distribution? > > > The AXD 301 uses SCTP, and has a home-made interface to an SCTP stack > developed in-house. There have been some discussions about making > an OTP interface to SCTP, but in the past, it has been hampered > somewhat by the fact that so few OSes offer SCTP as a standard service. > > /Uffe From bengt.kleberg@REDACTED Mon Sep 6 10:06:56 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Mon, 06 Sep 2004 10:06:56 +0200 Subject: escript, exit code Message-ID: <413C1AA0.2040107@ericsson.com> greeitns, has anybody made an escript program return a specific exit code? one that is available in the shell afterwards. i have not seen how to do this in the documentation. for some reason i do not have escript installed at work. this makes it difficult to test the various possibilities. one of which would be ''erlang:exit( 1 )''. bengt From kenneth@REDACTED Mon Sep 6 12:20:00 2004 From: kenneth@REDACTED (Kenneth Lundin) Date: Mon, 6 Sep 2004 12:20:00 +0200 Subject: Tutorial: "Getting Started with Erlang" Message-ID: A beta-version of Mike Willams Erlang tutorial is now available for download at http://www.erlang.org/download/getting_started-5.4.pdf. The tutorial has been publiced earlier in text form. Is is now adapted to the OTP-style of documentation and will be available as both .pdf and .html in the upcoming OTP Release (R10B) Your feedback regarding the tutorial are most welcome. /Kenneth Lundin (Product Manager of Erlang/OTP at Ericsson) From ege@REDACTED Mon Sep 6 20:52:22 2004 From: ege@REDACTED (Gerald Exner) Date: Mon, 06 Sep 2004 20:52:22 +0200 Subject: read clipboard in gs or ex11 Message-ID: <413CB1E6.1040702@my-lan.de> Hi, i plan a multiuser application with its GUI in erlang. now i make some studies: how can i read content from the unix or w32 clipboar with gs. can i read this with ex11 on unix? -- gerald -- --OO--Ooo-< NetBSD+Tru64+VMS:IRIX ? alpha+vax+sparc+m68k:mips >-- Gerald Exner From cyberlync@REDACTED Thu Sep 9 00:07:21 2004 From: cyberlync@REDACTED (Eric Merritt) Date: Wed, 8 Sep 2004 15:07:21 -0700 Subject: ex11, esdl In-Reply-To: References: Message-ID: On Mon, 30 Aug 2004 11:28:04 +0200 (CEST), Joe Armstrong wrote: > > Re: edsl ex11 etc. > > Just my 5 c. > > 1) I'm not sure I've published my latest ex11 - it has a *lot* of > functionality which I'm not sure can be bolted on top of a different > graphics engine. You are right. When last I looked at this (I recently moved and am still getting things together, I will get back to it soon), the x11 stuff was pretty widespread through out the code. It becomes more a matter of taking your ideas and rebuilding them on a different backend. > [snip good stuff from joe.] two questions joe, or more specifically a question and a statement ;) You said that 3 widgets where required but you only named two of them, whats the third? Why use sockets to communicate via low level and high level widgets? Why not just use standard erlang constructs? thanks, eric > /Joe > > > > > On Fri, 27 Aug 2004, Vlad Dumitrescu wrote: > > > From: "Eric Merritt" > >> Actually, with imput from Dan and Karl I am making use of a gl > >> specific backend that they are working on for wings. It doesn't yet > >> have multiple windows, but thats a future item they want. Better yet > >> it should be more stable and robust then the SDL engine. > > > > Hmm, that sounds interesting! And it's platform independent too? > > > > After answering your previous mail, I started to look at adding SDL_ttf > > support to esdl, which doesn't seem too difficult, thanks to the nice design > > that Dan made. Now I don't know if it's going to be worth it, is something > > else is coming reasonably soon. > > > > Could Dan or anyone comment? Can this new backend be made available? > > > > /Vlad > > > -- I'm a programmer, I don't have to spell correctly; I just have to spell consistently From bengt.kleberg@REDACTED Thu Sep 9 11:28:03 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Thu, 09 Sep 2004 11:28:03 +0200 Subject: problem with filelib:fold_files/5 Message-ID: <41402223.6070809@ericsson.com> greetings, the following crash has me baffled. does anybody see what kind of mistake i am making to create this crash? i am using SunOS 5.8 and Erlang (THREADS,HIPE) (BEAM) emulator version 5.3.6.3 1> Fun = fun( Cfile, Acc ) -> io:fwrite( "Cfile: ~s~n", [Cfile] ), io:fwrite( "Acc: ~w~n", [Acc] ), [Cfile|Acc] end, Regexp = regexp:sh_to_awk( "*" ), filelib:fold_files( "tmp", Regexp, false, Fun, [] ). Cfile: tmp/a.c Acc: [] Cfile: tmp/subtmp.beam Acc: [[116,109,112,47,97,46,99]] Cfile: tmp/inc.hrl Acc: [[116,109,112,47,115,117,98,116,109,112,46,98,101,97,109],[116,109,112,47,97,46,99]] Cfile: tmp/subtmp.erl Acc: [[116,109,112,47,105,110,99,46,104,114,108],[116,109,112,47,115,117,98,116,109,112,46,98,101,97,109],[116,109,112,47,97,46,99]] Cfile: tmp/cnh2 Acc: [[116,109,112,47,115,117,98,116,109,112,46,101,114,108],[116,109,112,47,105,110,99,46,104,114,108],[116,109,112,47,115,117,98,116,109,112,46,98,101,97,109],[116,109,112,47,97,46,99]] =ERROR REPORT==== 9-Sep-2004::11:20:56 === Error in process <0.31.0> with exit value: {function_clause,[{filelib,fold_files,[[],"tmp",{concat,{concat,bos,{kclosure,{comp_class,"\n"}}},eos},false,#Fun,["tmp/cnh2","tmp/subtmp.erl","tmp/inc.hrl","tmp/subtmp.beam","tmp/a.c"]]},{erl_eval,do_apply,5},{shell,eval_loop,2}]} ** exited: {function_clause,[{filelib,fold_files, [[], "tmp", {concat, {concat, bos, {kclosure,{comp_class,"\n"}}}, eos}, false, #Fun, ["tmp/cnh2", "tmp/subtmp.erl", "tmp/inc.hrl", "tmp/subtmp.beam", "tmp/a.c"]]}, {erl_eval,do_apply,5}, {shell,eval_loop,2}]} ** From tobias.lindahl@REDACTED Thu Sep 9 11:48:59 2004 From: tobias.lindahl@REDACTED (Tobias Lindahl) Date: Thu, 9 Sep 2004 11:48:59 +0200 (MEST) Subject: problem with filelib:fold_files/5 In-Reply-To: <41402223.6070809@ericsson.com> References: <41402223.6070809@ericsson.com> Message-ID: Hi Bengt! I recently discovered this bug in filelib.erl by using Dialyzer but I did not get around to reporting it. The problem is that filelib:fold_files/6 do not have a leaf-case for when the list of files ends. It seems that you are the first person ever to use the function ;) Tobias On Thu, 9 Sep 2004, Bengt Kleberg wrote: > greetings, > > the following crash has me baffled. does anybody see what kind of > mistake i am making to create this crash? > > i am using SunOS 5.8 and > Erlang (THREADS,HIPE) (BEAM) emulator version 5.3.6.3 > > > 1> Fun = fun( Cfile, Acc ) -> > io:fwrite( "Cfile: ~s~n", [Cfile] ), > io:fwrite( "Acc: ~w~n", [Acc] ), > [Cfile|Acc] > end, > Regexp = regexp:sh_to_awk( "*" ), > filelib:fold_files( "tmp", Regexp, false, Fun, [] ). > > Cfile: tmp/a.c > Acc: [] > Cfile: tmp/subtmp.beam > Acc: [[116,109,112,47,97,46,99]] > Cfile: tmp/inc.hrl > Acc: > [[116,109,112,47,115,117,98,116,109,112,46,98,101,97,109],[116,109,112,47,97,46,99]] > Cfile: tmp/subtmp.erl > Acc: > [[116,109,112,47,105,110,99,46,104,114,108],[116,109,112,47,115,117,98,116,109,112,46,98,101,97,109],[116,109,112,47,97,46,99]] > Cfile: tmp/cnh2 > Acc: > [[116,109,112,47,115,117,98,116,109,112,46,101,114,108],[116,109,112,47,105,110,99,46,104,114,108],[116,109,112,47,115,117,98,116,109,112,46,98,101,97,109],[116,109,112,47,97,46,99]] > > =ERROR REPORT==== 9-Sep-2004::11:20:56 === > Error in process <0.31.0> with exit value: > {function_clause,[{filelib,fold_files,[[],"tmp",{concat,{concat,bos,{kclosure,{comp_class,"\n"}}},eos},false,#Fun,["tmp/cnh2","tmp/subtmp.erl","tmp/inc.hrl","tmp/subtmp.beam","tmp/a.c"]]},{erl_eval,do_apply,5},{shell,eval_loop,2}]} > > ** exited: {function_clause,[{filelib,fold_files, > [[], > "tmp", > {concat, > {concat, > bos, > > {kclosure,{comp_class,"\n"}}}, > eos}, > false, > #Fun, > ["tmp/cnh2", > "tmp/subtmp.erl", > "tmp/inc.hrl", > "tmp/subtmp.beam", > "tmp/a.c"]]}, > {erl_eval,do_apply,5}, > {shell,eval_loop,2}]} ** > From bengt.kleberg@REDACTED Thu Sep 9 11:51:31 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Thu, 09 Sep 2004 11:51:31 +0200 Subject: problem with filelib:fold_files/5 In-Reply-To: References: <41402223.6070809@ericsson.com> Message-ID: <414027A3.9010201@ericsson.com> Tobias Lindahl wrote: > Hi Bengt! > > I recently discovered this bug in filelib.erl by using Dialyzer but I did > not get around to reporting it. The problem is that filelib:fold_files/6 i hope it is considered reported now. bengt From joe@REDACTED Thu Sep 9 11:58:25 2004 From: joe@REDACTED (Joe Armstrong) Date: Thu, 9 Sep 2004 11:58:25 +0200 (CEST) Subject: ex11, esdl In-Reply-To: References: Message-ID: I've put the latest version of ex11 in my http://www.sics.se/~joe/work_in_progress/ directory. Note this is *packed* with goodies - try my mini emacs In particular look at the swEmacs and swColorText widgets I'd really like a "stand-alone" swColorText widget (using gdk) The "three widgets" I'd like are - a text widget. treats text as an X,Y grid, goPut(X, Y, FGCOlor, BGColor, "string") this displays "string" at X,Y with the given colors it also traps mouse clicks and sends you a message to say the X,Y of the mouse, and it traps and sends you keypress messages, and window resize messages With this I can implement emacs, windowing systems, ... sure it "old fashioned text mode" but it's really useful and easy to use. - a canvas Like the text, but I can draw lines cirecles, put images etc. - a MDI A containing widget (Multiple document interface) this is the "desktop" widget that I can embed canvas and text widgets Given those three I can build a really nice easy to use system Now I can do this in ex11 - but not natively in widdows etc. On Wed, 8 Sep 2004, Eric Merritt wrote: > On Mon, 30 Aug 2004 11:28:04 +0200 (CEST), Joe Armstrong wrote: >> >> Re: edsl ex11 etc. >> >> Just my 5 c. >> >> 1) I'm not sure I've published my latest ex11 - it has a *lot* of >> functionality which I'm not sure can be bolted on top of a different >> graphics engine. > > You are right. When last I looked at this (I recently moved and am > still getting things together, I will get back to it soon), the x11 > stuff was pretty widespread through out the code. It becomes more a > matter of taking your ideas and rebuilding them on a different > backend. > >> > [snip good stuff from joe.] > > two questions joe, or more specifically a question and a statement ;) > > You said that 3 widgets where required but you only named two of > them, whats the third? > > Why use sockets to communicate via low level and high level widgets? > Why not just use standard erlang constructs? Did I say that? - I don't understand. > > thanks, > eric > >> /Joe >> >> >> >> >> On Fri, 27 Aug 2004, Vlad Dumitrescu wrote: >> >>> From: "Eric Merritt" >>>> Actually, with imput from Dan and Karl I am making use of a gl >>>> specific backend that they are working on for wings. It doesn't yet >>>> have multiple windows, but thats a future item they want. Better yet >>>> it should be more stable and robust then the SDL engine. >>> >>> Hmm, that sounds interesting! And it's platform independent too? >>> >>> After answering your previous mail, I started to look at adding SDL_ttf >>> support to esdl, which doesn't seem too difficult, thanks to the nice design >>> that Dan made. Now I don't know if it's going to be worth it, is something >>> else is coming reasonably soon. >>> >>> Could Dan or anyone comment? Can this new backend be made available? >>> >>> /Vlad >>> >> > > > > -- > I'm a programmer, I don't have to spell correctly; I just have to > spell consistently > From joe@REDACTED Thu Sep 9 12:05:17 2004 From: joe@REDACTED (Joe Armstrong) Date: Thu, 9 Sep 2004 12:05:17 +0200 (CEST) Subject: Announce Message-ID: 1) I've made a new site at erlang.sics.se 2) I'm trying to set up a web ring but am getting very little response (please visit erlang.sics.se for details) 3) The erlang wiki is up but getting little traffic - probably because nobody knows about it. Its at http://erlang.sics.se:5000/wiki/showPage?node=home Cheers /Joe From vlad_dumitrescu@REDACTED Thu Sep 9 12:55:11 2004 From: vlad_dumitrescu@REDACTED (Vlad Dumitrescu) Date: Thu, 9 Sep 2004 12:55:11 +0200 Subject: ex11, esdl References: Message-ID: From: "Joe Armstrong" > Now I can do this in ex11 - but not natively in widdows etc. I'm not sure how important it is to be "true native" under windows, but the Cygwin/X server has an internal window manager (aka MultiWindow mode) that creates a Windows window for each top-level X window. It works very nice, I use it daily. regards, Vlad From cpressey@REDACTED Thu Sep 9 17:09:16 2004 From: cpressey@REDACTED (Chris Pressey) Date: Thu, 9 Sep 2004 08:09:16 -0700 Subject: problem with filelib:fold_files/5 In-Reply-To: References: <41402223.6070809@ericsson.com> Message-ID: <20040909080916.3d8212b3.cpressey@catseye.mine.nu> On Thu, 9 Sep 2004 11:48:59 +0200 (MEST) Tobias Lindahl wrote: > Hi Bengt! > > I recently discovered this bug in filelib.erl by using Dialyzer but I did > not get around to reporting it. The problem is that filelib:fold_files/6 > do not have a leaf-case for when the list of files ends. It seems that you > are the first person ever to use the function ;) > > Tobias Not at all, Dominic Williams reported this bug in February: http://www.erlang.org/ml-archive/erlang-questions/200402/msg00029.html and I reported it a year ago: http://www.erlang.org/ml-archive/erlang-questions/200309/msg00198.html -Chris From ege@REDACTED Thu Sep 9 20:24:43 2004 From: ege@REDACTED (Gerald Exner) Date: Thu, 09 Sep 2004 20:24:43 +0200 Subject: ex11, esdl In-Reply-To: References: Message-ID: <41409FEB.3000302@my-lan.de> > http://www.sics.se/~joe/work_in_progress/ i recompiled the packages with NetBSD 1.5.2/i386 and get the following error: Erlang (BEAM) emulator version 5.3 [source] Eshell V5.3 (abort with ^G) 1> hello_world:start(). <0.31.0> *** Warning ex11 library version="3.1" required version="3.2" Trying Host={ip,"localhost"} Display=0 Screen=0 Connecting to tcp port:6000 cannot connect reason:econnrefused initialisation failed Please mail the file startup_error_report to joe@REDACTED 2> =ERROR REPORT==== 9-Sep-2004::20:16:38 === Error in process <0.31.0> with exit value: {{badmatch,{error,connect}},[{hello_world,init,0}]} ** exited: {{badmatch,{error,connect}},[{hello_world,init,0}]} ** 2> halt(). and the file: gerald@REDACTED> cat startup_error_report $DISPLAY = xp421.pg44.prv:0.0 parsed display Host={host,"xp421.pg44.prv"} DisplayNumber=0 ScreenNumber=0 inet:gethostname() = "pu" Es {ip,"192.168.222.11","Code1"} Try list {{ip,"localhost"},0,"Code1"} -- gerald -- --OO--Ooo-< NetBSD+Tru64+VMS:IRIX ? alpha+vax+sparc+m68k:mips >-- Gerald Exner From bjarne@REDACTED Thu Sep 9 23:14:00 2004 From: bjarne@REDACTED (=?iso-8859-1?Q?Bjarne_D=E4cker?=) Date: Thu, 9 Sep 2004 23:14:00 +0200 Subject: Fw: WPDRTS Call for Papers Message-ID: <006b01c496b2$4138c0c0$b02169d4@segeltorp> Perhaps a place for some Erlang paper ? Bjarne ----- Original Message ----- From: "Roland Gr?nroos" To: ; "snart" Cc: Sent: Thursday, September 09, 2004 10:59 AM Subject: WPDRTS Call for Papers ************ CALL FOR PAPERS ***************** The Thirteenth International Workshop on Parallel and Distributed Real-Time Systems (WPDRTS 2005) ====================================================== ========== April 4 and 5, In conjunction with IPDPS 2005 Omni Interlocken Hotel, Denver, Colorado The International Workshop on Parallel and Distributed Real-Time Systems is a forum for the presentation and discussion of approaches, research findings, and experiences in the domain of large-scale parallel and distributed real-time systems. Both research and development of relevant technologies are of interest, as well as the applications built using such technologies. Invited Paper Session: ---------------------- This special session will bring together experts in this area, to present their positions, recent results, and conclusions, to give the larger community an in-depth perspective on the state of the art. Challenge Problem Session: -------------------------- This special session will revolve around a problem of pressing interest, where alternative approaches are possible. Proposed solutions to the challenge problem will be solicited. The session will be devoted to discussing the problem and proposed solutions. An award will be given for the best solution. The challenge problem will be available shortly. General Paper Sessions: ----------------------- These sessions will present high-quality papers submitted to the workshop and selected by the program committee for presentation and publication at WPDRTS. Topics of interest include but are not limited to: -------------------------------------------------- * Resource Management * Operating Systems and Middleware * Programming Environments * Algorithms and Applications * Architectures * Specification, Modeling, and Analysis * Networking and Communications Also planned and to be announced: Keynote Speakers Panel Paper Submisstion: ------------------ Papers are not to exceed 15 pages (11 pt. font). Please number each page. Include an abstract and 5-6 keywords for the technical areas most relevant to your paper. The workshop proceedings will be published by IEEE CS press and selected papers will be published in a respected research journal (TBA). Steering Committee Co-Chairs: ----------------------------- David Andrews, University of Kansas, USA Lonnie R. Welch, Ohio University, USA General Co-Chairs: ------------------ Chris Gill, Washington University in St. Louis, USA Priya Narasimhan, Carnegie-Mellon University, USA Program Chairs: --------------- Lisa DiPippo, Univ. of Rhode Island, USA Vana Kalogeraki, Univ.of California, Riverside, USA Steering Committee: ------------------- Scott Brandt, Univ of California at Santa Cruz, USA Alan Burns, The University of York, UK Guenter Hommel, Technische Universit?t Berlin, Germany Doug Locke, Timesys Corporation, USA Barbara Pfarr, NASA Goddard, USA Viktor Prasanna, University of Southern California, USA Behrooz Shirazi, University of Texas at Arlington, USA Kenji Toda, Electrotechnical Laboratories, Japan Wei Zhao, Texas A&M University, USA Wayne Wolf, Princeton University, USA Armin Zimmerman, Technische Universit?t, Berlin, Germany Program Committee: ------------------- Hakan Aydin, George Mason University Sanjoy Baruah, University of North Carolina Victor Fay-Wolfe, University of Rhode Island Helen Gill, National Science Foundation Andy Gokhale, Vanderbilt University Zdenek Hanzalek, Czech Technical University Kane Kim, Univ. of California, Irvine Trudy Morgan, SPAWAR Systems Center Daniel Mosse, University of Pittsburgh Simin Nadjm-Tehrani, Linkoping University Douglas Niehaus, University of Kansas Peter Puschner, TU Vienna Sang Son, University of Virginia Evgenia Smirni, College of William and Mary Nalini Venkatasubramanian, Univ. of California, Irvine Richard West, Boston University Paul R. Work, Raytheon Publicity Chairs: ----------------- Daeyoung Kim (Asia), Information and Communications University, Korea Jorgen Hansson (Europe), Linkoping University, Sweden For further information contact: dipippo@REDACTED vana@REDACTED IMPORTANT DEADLINES ------------------- Manuscripts due: October 15, 2004 Acceptance notification: December 17, 2004 Camera ready copies due: January 14, 2005 Workshop: April 4-5, 2005 Submissions will be handled via the workshop web site http://www.cs.uri.edu/~cingiser/wpdrts05 From david.wallin@REDACTED Fri Sep 10 16:02:21 2004 From: david.wallin@REDACTED (David Wallin) Date: Fri, 10 Sep 2004 15:02:21 +0100 Subject: Please explain the magic in os.erl Message-ID: Hi all, I had a look at os.erl and found this (line 173): -define(SHELL, "sh -s unix:cmd 2>&1"). Could someone explain the 'unix:cmd' part ? cheers, --david. From raimo@REDACTED Fri Sep 10 16:22:59 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 10 Sep 2004 16:22:59 +0200 Subject: Please explain the magic in os.erl References: Message-ID: david.wallin@REDACTED (David Wallin) writes: I guess it is just to easier identify hanging or slow shell commands in a ps -ef listing. It just sets the first argument for the shell to "unix:cmd". Try: 1> os:cmd("echo $1"). "unix:cmd\n" > Hi all, > > I had a look at os.erl and found this (line 173): > > -define(SHELL, "sh -s unix:cmd 2>&1"). > > Could someone explain the 'unix:cmd' part ? > > > cheers, > > --david. > -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From david.wallin@REDACTED Fri Sep 10 16:37:06 2004 From: david.wallin@REDACTED (david wallin) Date: Fri, 10 Sep 2004 15:37:06 +0100 Subject: Please explain the magic in os.erl In-Reply-To: References: Message-ID: Thanks, that makes perfect sense, there was a comment in there that makes sense in this light, I guess I expected more magic and hence didn't get it. --david. On 2004-09-10, at 15.22, Raimo Niskanen wrote: > david.wallin@REDACTED (David Wallin) writes: > > I guess it is just to easier identify hanging or slow shell commands > in a ps -ef listing. It just sets the first argument for the shell > to "unix:cmd". > > Try: > 1> os:cmd("echo $1"). > "unix:cmd\n" > >> Hi all, >> >> I had a look at os.erl and found this (line 173): >> >> -define(SHELL, "sh -s unix:cmd 2>&1"). >> >> Could someone explain the 'unix:cmd' part ? >> >> >> cheers, >> >> --david. >> > > -- > > / Raimo Niskanen, Erlang/OTP, Ericsson AB From kramer@REDACTED Sat Sep 11 08:06:23 2004 From: kramer@REDACTED (Reto Kramer) Date: Fri, 10 Sep 2004 23:06:23 -0700 Subject: test_server question - coverage data from remote node? Message-ID: I'm a happy new user of the OTP test_server! Thanks for making this available. Getting detailed coverage information works for simple test cases that run on the node that runs the test_server. I've now moved on to start multiple nodes that run my distributed application and left the test_server node to run the client side of my tests, querying the started remote nodes (started with test_server:start_node/3). The remote nodes start fine and the client node sees the expected test results. However, my coverage report is now empty, whereas previously it worked fantastically and was a breeze to setup. I realize that there's support for distributed coverage data gathering in OTP itself. Can anyone help me understand how to gather coverage data on the remote nodes in the context of the OTP *test_server*? Is there any additional documentation I can consult? What are the magic incantations to capture and ship the coverage data from the started remote nodes (started with test_server/start_node/3) to the test_server node and how do I merge that data with the test_server node coverage data for the test server result report? Thanks, - Reto I start my test suite with: $ erl -pa ../ebin -s ts run all_tests verbose cover_details -s erlang halt and in my test suite erlang file, I spawn the remote nodes with: ?line {ok, test_a@REDACTED} = ?t:start_node(test_a, slave, [{args, "-pa /Users/reto/sdev/discover/src/discover-1.0/ebin"}]), Copying the cmd line part that I cut and paste from the startserver (using the verbose option) into the {args, ...} tuple does not help either ( -boot start_sasl -sasl errlog_type error -s test_server_ctrl run_test SPEC current.spec NAME discover COVER discover /Users/reto/sdev/discover/src/discover-1.0/test/discover_test/ discover.cover details). All my nodes run on the same filesystem at the moment to simplify things. # From raimo@REDACTED Mon Sep 13 09:54:25 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 13 Sep 2004 09:54:25 +0200 Subject: Please explain the magic in os.erl References: , , Message-ID: Oh, and I just remembered: The function os:cmd was in the old days called unix:cmd but the module got renamed when Erlang went platform independant. This explains the contents of the string - it did not get renamed. -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From casper2000a@REDACTED Mon Sep 13 14:04:33 2004 From: casper2000a@REDACTED (Casper) Date: Mon, 13 Sep 2004 18:04:33 +0600 Subject: ASN compiler In-Reply-To: Message-ID: <20040913114333.9C95C4000F6@mail.omnibis.com> Hi All, Does ASN compiler in Erlang support Macro notation? If I need to create encoder/decoder for GSM MAP 09.02, how can I do it? Thanks in advace! Regards, Eranga From raimo@REDACTED Mon Sep 13 16:35:35 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 13 Sep 2004 16:35:35 +0200 Subject: problem with filelib:fold_files/5 References: <41402223.6070809@ericsson.com> Message-ID: Found. It will be fixed in R10B. -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From taavi@REDACTED Mon Sep 13 16:46:01 2004 From: taavi@REDACTED (Taavi Talvik) Date: Mon, 13 Sep 2004 17:46:01 +0300 (EEST) Subject: Question about erlang shell Message-ID: <20040913173400.J54890-100000@valu.uninet.ee> Hello ! I have different versions of erlang runtime system on different machines. However, this introduces fiew difficulties for build system. Currently I am using simple gnu makefiles and don't want to introduce autoconf/autotools. Makefile contains lines: ERL_FLAGS = -I/usr/local/lib/erlang/lib/snmp-3.4.8/include but on the other system, it should be ERL_FLAGS = -I/usr/local/lib/erlang/lib/snmp-3.4/include I can almost find out required information: # echo 'io:format("~s", [code:lib_dir(snmp)]).' | erl -run init stop Eshell V5.3 (abort with ^G) 1> /usr/local/lib/erlang/lib/snmp-3.4ok 2> ** Terminating erlang (nonode@REDACTED) ** Are there any tricks to get result without output from Erlang shell? best regards, taavi From bengt.kleberg@REDACTED Mon Sep 13 17:04:29 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Mon, 13 Sep 2004 17:04:29 +0200 Subject: Question about erlang shell In-Reply-To: <20040913173400.J54890-100000@valu.uninet.ee> References: <20040913173400.J54890-100000@valu.uninet.ee> Message-ID: <4145B6FD.8060301@ericsson.com> Taavi Talvik wrote: > Hello ! > > I have different versions of erlang runtime system on different machines. > However, this introduces fiew difficulties for build system. Currently I > am using simple gnu makefiles and don't want to introduce > autoconf/autotools. > > Makefile contains lines: > ERL_FLAGS = -I/usr/local/lib/erlang/lib/snmp-3.4.8/include > > but on the other system, it should be > ERL_FLAGS = -I/usr/local/lib/erlang/lib/snmp-3.4/include in the erlang source files (*.erl) you can write -include_lib("snmp/include/STANDARD-MIB.hrl"). on my system (Erlang (THREADS,HIPE) (BEAM) emulator version 5.3.6.3 ) this will find the header file in $OTP_ROOT/lib/snmp-3.4.8/include/ bengt From p-news@REDACTED Mon Sep 13 17:17:15 2004 From: p-news@REDACTED (Per Einar =?iso-8859-1?q?Str=F6mme?=) Date: Mon, 13 Sep 2004 17:17:15 +0200 Subject: ex11, esdl In-Reply-To: <200409131037.28571.p-news@telia.com> References: <200409131037.28571.p-news@telia.com> Message-ID: <200409131717.15186.p-news@telia.com> s Hej Gerald ! Looks like something I also got a while ago. On a SUSE 9.0 and 9.1 system the solution apears to be a change in the Makefiles: ex11/widgets/Makefile ex11/lib/Makefile Change from: CFLAGS= -I/usr/local/X11/include to: CFLAGS= -I/usr/X11R6/include/X11 Rgrds Per Einar --------------------------------------------------------------------------- Per Einar Str?mme p-news@REDACTED --------------------------------------------------------------------------- > http://www.sics.se/~joe/work_in_progress/ > > i recompiled the packages with NetBSD 1.5.2/i386 and get the following > error: > > Erlang (BEAM) emulator version 5.3 [source] > > Eshell V5.3 (abort with ^G) > 1> hello_world:start(). > <0.31.0> > *** Warning ex11 library version="3.1" > required version="3.2" > Trying Host={ip,"localhost"} Display=0 Screen=0 > Connecting to tcp port:6000 > cannot connect reason:econnrefused > initialisation failed > Please mail the file startup_error_report to > 2> > =ERROR REPORT==== 9-Sep-2004::20:16:38 === > Error in process <0.31.0> with exit value: > {{badmatch,{error,connect}},[{hello_world,init,0}]} > > ** exited: {{badmatch,{error,connect}},[{hello_world,init,0}]} ** > 2> halt(). > > and the file: > gerald@REDACTED> cat startup_error_report > $DISPLAY = xp421.pg44.prv:0.0 > parsed display Host={host,"xp421.pg44.prv"} DisplayNumber=0 ScreenNumber=0 > inet:gethostname() = "pu" > Es > {ip,"192.168.222.11","Code1"} > Try list > {{ip,"localhost"},0,"Code1"} > > -- > gerald From kramer@REDACTED Mon Sep 13 17:40:37 2004 From: kramer@REDACTED (Reto Kramer) Date: Mon, 13 Sep 2004 08:40:37 -0700 Subject: test_server question - coverage data from remote node? In-Reply-To: References: Message-ID: <42A09783-059B-11D9-BD58-000393B64312@acm.org> This issue turned out to be a misunderstanding on my part of the lifecycle of a node started in a testcase. I used a "conf" case (I started the node in the "start" of {conf, start, [func], stop}. Coverage was only going to be provided by running func, which never happened since the node was killed at the exit of start. I had erroneously assumed that in a conf case the node would only be killed at the end of stop, but it will be at the end of start. Of course this is all in the docs, one way or another :-) start_node/3, {cleanup, false} Option does the trick, including handling distributed coverage data acquisition. Perhaps in the future the examples section of the docs could be extended with a "trivial" test example that involves multiple nodes. - Reto On Sep 10, 2004, at 11:06 PM, Reto Kramer wrote: > I'm a happy new user of the OTP test_server! Thanks for making this > available. Getting detailed coverage information works for simple > test cases that run on the node that runs the test_server. > > I've now moved on to start multiple nodes that run my distributed > application and left the test_server node to run the client side of my > tests, querying the started remote nodes (started with > test_server:start_node/3). The remote nodes start fine and the client > node sees the expected test results. > > However, my coverage report is now empty, whereas previously it worked > fantastically and was a breeze to setup. > > I realize that there's support for distributed coverage data gathering > in OTP itself. > > Can anyone help me understand how to gather coverage data on the > remote nodes in the context of the OTP *test_server*? Is there any > additional documentation I can consult? > > What are the magic incantations to capture and ship the coverage data > from the started remote nodes (started with test_server/start_node/3) > to the test_server node and how do I merge that data with the > test_server node coverage data for the test server result report? > > Thanks, > - Reto > > I start my test suite with: > > $ erl -pa ../ebin -s ts run all_tests verbose cover_details -s > erlang halt > > and in my test suite erlang file, I spawn the remote nodes with: > > ?line {ok, test_a@REDACTED} = ?t:start_node(test_a, slave, > [{args, > "-pa /Users/reto/sdev/discover/src/discover-1.0/ebin"}]), > > Copying the cmd line part that I cut and paste from the startserver > (using the verbose option) into the {args, ...} tuple does not help > either ( -boot start_sasl -sasl errlog_type error -s test_server_ctrl > run_test SPEC current.spec NAME discover COVER discover > /Users/reto/sdev/discover/src/discover-1.0/test/discover_test/ > discover.cover details). > > All my nodes run on the same filesystem at the moment to simplify > things. > > # > From daniel.neri@REDACTED Mon Sep 13 18:01:35 2004 From: daniel.neri@REDACTED (=?ISO-8859-1?Q?Daniel_N=E9ri?=) Date: Mon, 13 Sep 2004 18:01:35 +0200 Subject: ex11, esdl In-Reply-To: <41409FEB.3000302@my-lan.de> References: <41409FEB.3000302@my-lan.de> Message-ID: <3036fece04091309014bbc87c9@mail.gmail.com> On Thu, 09 Sep 2004 20:24:43 +0200, Gerald Exner wrote: > Trying Host={ip,"localhost"} Display=0 Screen=0 > Connecting to tcp port:6000 > cannot connect reason:econnrefused Maybe your X server is not listening on the TCP port (generally a good idea), i.e. it's started with the "-nolisten tcp" option. Look in /usr/X11R6/lib/X11/xdm/Xservers (if you're using xdm). Regards, -- Daniel N?ri daniel.neri@REDACTED From kramer@REDACTED Mon Sep 13 18:15:22 2004 From: kramer@REDACTED (Reto Kramer) Date: Mon, 13 Sep 2004 09:15:22 -0700 Subject: Who uses test_server? Message-ID: <1D0B473D-05A0-11D9-BD58-000393B64312@acm.org> I'm curious how many folks on this list are using the test_server on erlang.org for their project/system testing. I'd like to develop a feeling for how much erlang.org user adoption there is to gage if there's enough people out there that could help me with their advice if I run into issues. Ping me privately if you automate the test of your projects with test_server please. Thanks, - Reto From mlogan@REDACTED Mon Sep 13 19:13:06 2004 From: mlogan@REDACTED (Martin J. Logan) Date: 13 Sep 2004 12:13:06 -0500 Subject: Who uses test_server? In-Reply-To: <1D0B473D-05A0-11D9-BD58-000393B64312@acm.org> References: <1D0B473D-05A0-11D9-BD58-000393B64312@acm.org> Message-ID: <1095095586.2099.87.camel@dhcp-lom-194-186.futuresource.com> We use it extensively here. We have developed a number of generic libraries so that we can view sasl logs and error logs and start and stop multiple nodes from within our tests quite simply. Cheers, Martin On Mon, 2004-09-13 at 11:15, Reto Kramer wrote: > I'm curious how many folks on this list are using the test_server on > erlang.org for their project/system testing. I'd like to develop a > feeling for how much erlang.org user adoption there is to gage if > there's enough people out there that could help me with their advice if > I run into issues. > > Ping me privately if you automate the test of your projects with > test_server please. > > Thanks, > - Reto From bjarne@REDACTED Mon Sep 13 19:22:30 2004 From: bjarne@REDACTED (=?Windows-1252?Q?Bjarne_D=E4cker?=) Date: Mon, 13 Sep 2004 19:22:30 +0200 Subject: Demos for EUC'2004 Message-ID: <000801c499b6$416bd4e0$9f2069d4@segeltorp> Hello The program of talks for the 10th International Erlang/OTP User Conference to be held on October 21 in Stockholm is almost ready to invite attendees. http://www.erlang.se/euc/04/ However, so far nobody has proposed any demonstrations to be shown during intermissions. Any ideas or proposals, anybody ? Bjarne (EUC chairman) -------------- next part -------------- An HTML attachment was scrubbed... URL: From lennart.ohman@REDACTED Mon Sep 13 20:41:44 2004 From: lennart.ohman@REDACTED (=?ISO-8859-1?Q?Lennart_=D6hman?=) Date: Mon, 13 Sep 2004 20:41:44 +0200 Subject: Who uses test_server? In-Reply-To: <1095095586.2099.87.camel@dhcp-lom-194-186.futuresource.com> References: <1D0B473D-05A0-11D9-BD58-000393B64312@acm.org> <1095095586.2099.87.camel@dhcp-lom-194-186.futuresource.com> Message-ID: <4145E9E8.5050300@st.se> Here at the GPRS/UMTS GSN development we use it extensively for kind of component level test. /Lennart Martin J. Logan wrote: > We use it extensively here. We have developed a number of generic > libraries so that we can view sasl logs and error logs and start and > stop multiple nodes from within our tests quite simply. > > Cheers, > Martin > > On Mon, 2004-09-13 at 11:15, Reto Kramer wrote: > >>I'm curious how many folks on this list are using the test_server on >>erlang.org for their project/system testing. I'd like to develop a >>feeling for how much erlang.org user adoption there is to gage if >>there's enough people out there that could help me with their advice if >>I run into issues. >> >>Ping me privately if you automate the test of your projects with >>test_server please. >> >>Thanks, >>- Reto > > -- ------------------------------------------------------------- Lennart Ohman phone : +46-8-587 623 27 Sjoland & Thyselius Telecom AB cellular: +46-70-552 6735 Sehlstedtsgatan 6 fax : +46-8-667 8230 SE-115 28 STOCKHOLM, SWEDEN email : lennart.ohman@REDACTED From ege@REDACTED Mon Sep 13 21:01:32 2004 From: ege@REDACTED (Gerald Exner) Date: Mon, 13 Sep 2004 21:01:32 +0200 Subject: ex11, esdl In-Reply-To: <200409131037.28571.p-news@telia.com> References: <200409131037.28571.p-news@telia.com> Message-ID: <4145EE8C.2030409@my-lan.de> Hallo, > Change > CFLAGS=/usr/local/X11/include > > to > > CFLAGS=/usr/X11R6/include/X11 i do this, but i see the some error. i must make some static changes in ex11_lib_utils:mk_colorfun. (very ugly) -- mk_colorfun(Display, Screen) -> io:format ("mk_colorfun: Display=~p~n", [Display]), io:format ("mk_colorfun: Screen =~p~n", [Screen]), S = lists:nth(Screen + 1, Display#display.screens), io:format ("mk_colorfun: screen.depth (~p)=~p~n", [length(S#screen.depths), S#screen.depths]), % % i try the second entry on my XP421 % D = lists:nth(Screen + 2, S#screen.depths), io:format ("mk_colorfun: D=~p~n", [D]), % % i try the second entry % V = lists:nth(2, D#depth.visuals), io:format ("V=~p~n", [V]), #visual{red_mask=R, green_mask=G, blue_mask=B} = V, io:format("R=~p G=~p B=~p~n",[R,G,B]), mkColorMapFun(R, G, B). -- Now i can see my first ex11 window, and i will do some tests The colors are not correct, but the demos are working :-) this is the output at the shell, i think my XTerminal has to many entries for screens an visuals. -> perhaps should i update my 10years old Terminal? :-( -- Erlang (BEAM) emulator version 5.3 [source] Eshell V5.3 (abort with ^G) 1> Start Host={host,"xp421.pg44.prv"} Es= [{ip,"192.168.222.11",[16,109,48,59,80,110,12,202,19,82,124,89,68,7,214,45]}] Try these:[{{ip,"xp421.pg44.prv"}, 0, [16,109,48,59,80,110,12,202,19,82,124,89,68,7,214,45]}] Trying Host={ip,"xp421.pg44.prv"} Display=0 Screen=0 Connecting to tcp port:6000 Port opened sending cookie: mk_colorfun: Display={display,undefined, 0, 0, 4194298, 0, 83886080, undefined, undefined, "Tektronix, Inc.", 1, 32, 32, 1, 2, [{format,1,1,32},{format,8,8,32}], 8, undefined, undefined, 65535, undefined, 0, 1, [{screen, 40, 1280, 1024, 344, 275, undefined, 1, 0, 8, 38, 0, 0, 1, 1, 14417981, [{depth,1,0,[]}, {depth, 8, 6, [{visual,32,3,0,0,0,8,256}, {visual,33,5,7,56,192,8,8}, {visual,34,1,0,0,0,8,256}, {visual,35,0,0,0,0,8,256}, {visual,36,2,7,56,192,8,256}, {visual,37,4,7,56,192,8,8}]}], 32, undefined}], 256, 8, 254} mk_colorfun: Screen =0 mk_colorfun: screen.depth (2)=[{depth,1,0,[]}, {depth,8, 6, [{visual,32,3,0,0,0,8,256}, {visual,33,5,7,56,192,8,8}, {visual,34,1,0,0,0,8,256}, {visual,35,0,0,0,0,8,256}, {visual,36,2,7,56,192,8,256}, {visual,37,4,7,56,192,8,8}]}] mk_colorfun: D={depth,8, 6, [{visual,32,3,0,0,0,8,256}, {visual,33,5,7,56,192,8,8}, {visual,34,1,0,0,0,8,256}, {visual,35,0,0,0,0,8,256}, {visual,36,2,7,56,192,8,256}, {visual,37,4,7,56,192,8,8}]} V={visual,33,5,7,56,192,8,8} R=7 G=56 B=192 Min,max keycodes=8,254 KeySymsPerKeycode=2 Unknown Key=1000FF17 Display=<0.32.0> -- who maintains the development of widgets, i would need a menubar and a tree widget. if there is no one working on this, i must do this myself. -- gerald --OO--Ooo-< NetBSD+Tru64+VMS:IRIX ? alpha+vax+sparc+m68k:mips >-- Gerald Exner From taavi@REDACTED Mon Sep 13 22:14:42 2004 From: taavi@REDACTED (Taavi Talvik) Date: Mon, 13 Sep 2004 23:14:42 +0300 (EEST) Subject: Question about erlang shell In-Reply-To: <4145B6FD.8060301@ericsson.com> Message-ID: <20040913231117.V59784-100000@valu.uninet.ee> On Mon, 13 Sep 2004, Bengt Kleberg wrote: > Taavi Talvik wrote: > > Hello ! > > > > I have different versions of erlang runtime system on different machines. > > However, this introduces fiew difficulties for build system. Currently I > > am using simple gnu makefiles and don't want to introduce > > autoconf/autotools. > > > > Makefile contains lines: > > ERL_FLAGS = -I/usr/local/lib/erlang/lib/snmp-3.4.8/include > > > > but on the other system, it should be > > ERL_FLAGS = -I/usr/local/lib/erlang/lib/snmp-3.4/include > > in the erlang source files (*.erl) you can write > > -include_lib("snmp/include/STANDARD-MIB.hrl"). Thanks, this is definitely magic! Any sufficiently advanced technology is indistinguishable from magic. -- Arthur Clarke best regards, taavi From raimo@REDACTED Tue Sep 14 08:29:51 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 14 Sep 2004 08:29:51 +0200 Subject: Question about erlang shell References: <4145B6FD.8060301@ericsson.com>, <20040913231117.V59784-100000@valu.uninet.ee> Message-ID: What that trick does is that it finds the "include/STANDARD-MIB.hrl" in the latest version of the "snmp" application in the running Erlang installation, i.e the Erlang installation used when compiling. -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From ulf.wiger@REDACTED Tue Sep 14 09:43:01 2004 From: ulf.wiger@REDACTED (Ulf Wiger (AL/EAB)) Date: Tue, 14 Sep 2004 09:43:01 +0200 Subject: Who uses test_server? Message-ID: <37FB7AA6F5F9814FB634A7BF4C35A6F5402875@ESEALNT442.al.sw.ericsson.se> Here at Ericsson (our unit is now called IMS Gateways), we use it extensively. At AXD 301, we have several thousand test cases implemented in the erlang test server. Regards, Uffe > -----Original Message----- > From: owner-erlang-questions@REDACTED > [mailto:owner-erlang-questions@REDACTED]On Behalf Of Reto Kramer > Sent: den 13 september 2004 18:15 > To: erlang-questions@REDACTED > Subject: Who uses test_server? > > > I'm curious how many folks on this list are using the test_server on > erlang.org for their project/system testing. I'd like to develop a > feeling for how much erlang.org user adoption there is to gage if > there's enough people out there that could help me with their > advice if > I run into issues. > > Ping me privately if you automate the test of your projects with > test_server please. > > Thanks, > - Reto > From bertil@REDACTED Tue Sep 14 10:27:27 2004 From: bertil@REDACTED (Bertil Karlsson) Date: Tue, 14 Sep 2004 10:27:27 +0200 Subject: ASN compiler In-Reply-To: <20040913114333.9C95C4000F6@mail.omnibis.com> References: <20040913114333.9C95C4000F6@mail.omnibis.com> Message-ID: <4146AB6F.5010803@erix.ericsson.se> Casper wrote: > Hi All, > > Does ASN compiler in Erlang support Macro notation? If I need to create No, there is not any support of macro notations. Macro notations has been deprecated from the ASN.1 standard since 1994. It is replaced by the information objects. The OTP asn1 compiler support information objects. > encoder/decoder for GSM MAP 09.02, how can I do it? If those specs contain macro notation I guess you can find a more modern version of it using information objects. If you have to use an old spec with macros you have to rewrite it. In that case you'll find some information in the free book by Olivier Duboisson at: http://asn1.elibel.tm.fr/en/book/index.htm /Bertil > > Thanks in advace! > > Regards, > Eranga > > From casper2000a@REDACTED Tue Sep 14 10:51:28 2004 From: casper2000a@REDACTED (Casper) Date: Tue, 14 Sep 2004 14:51:28 +0600 Subject: ASN compiler In-Reply-To: <4146AB6F.5010803@erix.ericsson.se> Message-ID: <20040914083025.B856E400173@mail.omnibis.com> Hi Bertil, Thanks a lot for the information. I tried to compile GSM MAP 09.02 standard and I'm finding some problems with couple of places. 1) When I tried to compile MAP-Errors.asn, it gives the below error. syntax error at line 136 in module MAP-Errors.asn: got systemFailureParam expected one of: 'typereference . typereference', typere ference, 'TYPE-IDENTIFIER' or 'ABSTRACT-SYNTAX' {error,[got, systemFailureParam, expected, ['typereference . typereference', typereference, 'TYPE-IDENTIFIER', 'ABSTRACT-SYNTAX']]} The text around line 136 is as below. Line 134: SystemFailure ::= ERROR Line 135: PARAMETER Line 136: systemFailureParam SystemFailureParam Line 137: -- optional 2) When I tried to compile MAP-CallHandlingOperations.asn, it gives the below error. syntax error at line 76 in module MAP-CallHandlingOperations.asn: got sendRoutingInfoArg expected one of: 'typereference . typereference', typere ference, 'TYPE-IDENTIFIER' or 'ABSTRACT-SYNTAX' {error,[got, sendRoutingInfoArg, expected, ['typereference . typereference', typereference, 'TYPE-IDENTIFIER', 'ABSTRACT-SYNTAX']]} The text around line 76 is as below. Line 74: SendRoutingInfo ::= OPERATION --Timer m Line 75: ARGUMENT Line 76: sendRoutingInfoArg SendRoutingInfoArg Line 77: RESULT Line 78: sendRoutingInfoRes SendRoutingInfoRes 3) Also when I tried to compile MAP-ApplicationContexts.asn, the compiler hangs. I have experience that before as well with other asn files. I appreciate if you can give me some of your experience and any clues that I can use to solve above problems. Thanks! Eranga -----Original Message----- From: Bertil Karlsson [mailto:bertil@REDACTED] Sent: Tuesday, September 14, 2004 2:27 PM To: Casper Cc: erlang-questions@REDACTED Subject: Re: ASN compiler Casper wrote: > Hi All, > > Does ASN compiler in Erlang support Macro notation? If I need to create No, there is not any support of macro notations. Macro notations has been deprecated from the ASN.1 standard since 1994. It is replaced by the information objects. The OTP asn1 compiler support information objects. > encoder/decoder for GSM MAP 09.02, how can I do it? If those specs contain macro notation I guess you can find a more modern version of it using information objects. If you have to use an old spec with macros you have to rewrite it. In that case you'll find some information in the free book by Olivier Duboisson at: http://asn1.elibel.tm.fr/en/book/index.htm /Bertil > > Thanks in advace! > > Regards, > Eranga > > From casper2000a@REDACTED Tue Sep 14 11:10:12 2004 From: casper2000a@REDACTED (Casper) Date: Tue, 14 Sep 2004 15:10:12 +0600 Subject: ASN ERROR and OPERATION In-Reply-To: <4146AB6F.5010803@erix.ericsson.se> Message-ID: <20040914084910.2AB39400002@mail.omnibis.com> Dear All, With the help of book of Olivier Duboisson at: http://asn1.elibel.tm.fr/en/book/index.htm, I managed to finally notice that the ASN error occurs when it tries to handle ERROR and OPERATION types. Where is it wrong? Is it the ASN syntax in GSM MAP specification or the Erlang ASN compiler doesn't know how to handle those 2 types? Or is that syntax an out dated or very new one? Thanks! Eranga From kenneth@REDACTED Tue Sep 14 12:01:32 2004 From: kenneth@REDACTED (Kenneth Lundin) Date: Tue, 14 Sep 2004 12:01:32 +0200 Subject: Erlang jobs in Stockholm! Message-ID: If you are a skilled allround SW developer with Erlang and Linux as a favorite combination take a look at the link below. http://www.ericsson.com/jobs/newAd.asp?id=5064&source=OWN The positions above are located south of Stockholm. Regards Kenneth Lundin (Manager of the Erlang/OTP team at Ericsson) Note, I am one of the contact persons for this ad. From bertil@REDACTED Tue Sep 14 13:51:23 2004 From: bertil@REDACTED (Bertil Karlsson) Date: Tue, 14 Sep 2004 13:51:23 +0200 Subject: ASN ERROR and OPERATION In-Reply-To: <20040914084910.2AB39400002@mail.omnibis.com> References: <20040914084910.2AB39400002@mail.omnibis.com> Message-ID: <4146DB3B.3050802@erix.ericsson.se> Eranga, At the moment I don't have the time to look at your asn1 specs, to localize the problem you have. Just now we are in the finish of the R10b release of OTP. We always try to give fast respons and help to our customers. The book by Duboisson is an excellent help to learn asn1. In order to get help with asn1 questions I recommend you to join a discussin forum. Se: http://www.oss.com/support/discussion.html regards /Bertil Casper wrote: > Dear All, > > With the help of book of Olivier Duboisson at: > http://asn1.elibel.tm.fr/en/book/index.htm, I managed to finally notice that > the ASN error occurs when it tries to handle ERROR and OPERATION types. > > Where is it wrong? Is it the ASN syntax in GSM MAP specification or the > Erlang ASN compiler doesn't know how to handle those 2 types? Or is that > syntax an out dated or very new one? > > Thanks! > Eranga > > From bertil@REDACTED Tue Sep 14 17:29:39 2004 From: bertil@REDACTED (Bertil Karlsson) Date: Tue, 14 Sep 2004 17:29:39 +0200 Subject: ASN ERROR and OPERATION In-Reply-To: <20040914084910.2AB39400002@mail.omnibis.com> References: <20040914084910.2AB39400002@mail.omnibis.com> Message-ID: <41470E63.1050304@erix.ericsson.se> Casper, If you can attach all asn1 specs you have had problem with, I would be grateful. Both the ones that are reported as syntax errors and the ones that make the compiler hang. As soon as possible for me, maybe in 2 or 3 weeks I will give you a report of the troubles you have met with the OTP asn1 compiler. I would like to add to my prevoius answers that we have customers that compile specs belonging to the MAP standard. If you can get specs where the macros are converted to other code they should pass the compiler. /Bertil Casper wrote: > Dear All, > > With the help of book of Olivier Duboisson at: > http://asn1.elibel.tm.fr/en/book/index.htm, I managed to finally notice that > the ASN error occurs when it tries to handle ERROR and OPERATION types. > > Where is it wrong? Is it the ASN syntax in GSM MAP specification or the > Erlang ASN compiler doesn't know how to handle those 2 types? Or is that > syntax an out dated or very new one? > > Thanks! > Eranga > > From davidw@REDACTED Tue Sep 14 17:44:39 2004 From: davidw@REDACTED (David N. Welton) Date: 14 Sep 2004 17:44:39 +0200 Subject: connection snmp and mnesia...badmatch Message-ID: <87r7p4q2hk.fsf@dedasys.com> [ Let's try this again... hopefully it won't show up twice! ] Hi, I'm having some troubles connecting SNMP and Mnesia. Namely, this error: ** User error: Invalid return value {'EXIT',{{badmatch,false},[{snmp_generic,table_info,1},{snmp_generic_mnesia,table_func,4},{snmp_agent,dbg_apply,3},{snmp_agent,get_next_values_all_rows,6},{snmp_agent,get_next_table,4},{snmp_agent,next_loop_varbinds,5},{snmp_agent,process_pdu,4},{snmp_agent,handle_pdu,7}|more]}} from {snmp_generic,table_func,[{otr_extstatus,mnesia}]} (get_next) Indeed, when I turn on debugging: ** SNMP MASTER-AGENT LOG: apply: snmp_generic,table_func,[get_next,[],[0],{otr_extstatus,mnesia}] ** SNMP MASTER-AGENT LOG: returned: {'EXIT',{{badmatch,false}, [{snmp_generic,table_info,1}, {snmp_generic_mnesia,table_func,4}, {snmp_agent,dbg_apply,3}, {snmp_agent,get_next_values_all_rows,6}, {snmp_agent,get_next_table,4}, {snmp_agent,next_loop_varbinds,5}, {snmp_agent,process_pdu,4}, {snmp_agent,handle_pdu,7}| more]}} Now, the first thing about this that looks awry to me is the documentation for table_func: table_func(Op1,NameDb) table_func(Op2,RowIndex,Cols,NameDb) -> Ret Types: Op1 = new | delete Op2 = get | next | is_set_ok | set | undo There is no get_next. What else might be causing this error? 'get' fails too: snmpget -v1 -c public localhost:4000 SNMPv2-SMI::enterprises.99999.2.1.1.0 .... ** SNMP MASTER-AGENT LOG: apply: snmp_generic,table_func,[get,[0],[1],{otr_extstatus,mnesia}] ** SNMP MASTER-AGENT LOG: returned: {'EXIT',{{badmatch,false}, [{snmp_generic,table_info,1}, {snmp_generic_mnesia,table_func,4}, {snmp_agent,dbg_apply,3}, {snmp_agent,get_value_all_rows,5}, {snmp_agent,get_tab_value_from_mib,3}, {snmp_agent,try_get,2}, {snmp_agent,do_get_local,3}, {snmp_agent,do_get,2}| more]}} What's causing the badmatch?! Thankyou for your time, -- David N. Welton From casper2000a@REDACTED Wed Sep 15 10:10:17 2004 From: casper2000a@REDACTED (Casper) Date: Wed, 15 Sep 2004 14:10:17 +0600 Subject: Erlang/OTP and SDL In-Reply-To: <41470E63.1050304@erix.ericsson.se> Message-ID: <20040915074912.68AF0400017@mail.omnibis.com> Hi all, How good is the SDL support in Erlang? Are there any tools that can generate Erlang code from a SDL spec? Thanks in advance! Eranga From csanto@REDACTED Wed Sep 15 13:00:43 2004 From: csanto@REDACTED (Corrado Santoro) Date: Wed, 15 Sep 2004 13:00:43 +0200 Subject: Erlang Book Message-ID: <1095246043.414820db09c5b@www.cdc.unict.it> Hi all, some people at my Univerisity are interested in Erlang and asked me for some documentation and books. I've seen that Amazon still sells some copies of the Erlang book by Armstrong, Virding, et al.. However, the last edition of the book is of 1996. So I would ask you (and above all to book authors) if the language and the runtime system have been substantially modified since 1996, or the book can be still considered up to date. I now that there is the book from Mickael Remond, but unfortunatelly, we don't understand Frech ;-) Ciao, -Corrado -- ====================================================== Eng. Corrado Santoro, Ph.D. University of Catania - Engineering Faculty Department of Computer Science and Telecommunications Engineering Viale A. Doria, 6 - 95125 CATANIA (ITALY) Tel: +39 095 7382380 Fax: +39 095 338280 +39 095 7382365 +39 095 7382364 EMail: csanto@REDACTED Personal Home Page: http://www.diit.unict.it/users/csanto NUXI Home Page: http://nuxi.iit.unict.it ====================================================== ------------------------------------------------- This mail sent through IMP: http://www.cdc.unict.it/ From ulf.wiger@REDACTED Wed Sep 15 15:02:27 2004 From: ulf.wiger@REDACTED (Ulf Wiger (AL/EAB)) Date: Wed, 15 Sep 2004 15:02:27 +0200 Subject: Erlang/OTP and SDL Message-ID: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> Hi, AFAIK, there is no current or suppported tool, but at least there is something written about SDL to Erlang. Erlang in the Corelatus MTP2 Signalling Gateway (Matthias L?ng) http://www.erlang.se/euc/01/corelatus2001.pdf Automatic Code Generation from SDL to a Declarative Programming Language (Magnus Fr?berg) http://www.erlang.se/publications/sdl2erlang.ps I know of at least two other articles, but have no links to them, nor any copies. In general, one can say that it's entirely straightforward to generate Erlang from SDL, but the reverse is not necessarily true. You can do stuff in Erlang that can't be modeled in SDL (or UML for that matter.) (*) Regards, Ulf W (*) or, if it's possible to do so, it is by no means easy. > -----Original Message----- > From: owner-erlang-questions@REDACTED > [mailto:owner-erlang-questions@REDACTED]On Behalf Of Casper > Sent: den 15 september 2004 10:10 > To: erlang-questions@REDACTED > Subject: Erlang/OTP and SDL > > > Hi all, > > How good is the SDL support in Erlang? Are there any tools > that can generate > Erlang code from a SDL spec? > > Thanks in advance! > Eranga > From joe@REDACTED Wed Sep 15 15:06:45 2004 From: joe@REDACTED (Joe Armstrong) Date: Wed, 15 Sep 2004 15:06:45 +0200 (CEST) Subject: Erlang Book In-Reply-To: <1095246043.414820db09c5b@www.cdc.unict.it> References: <1095246043.414820db09c5b@www.cdc.unict.it> Message-ID: The book describes a sub-set of Erlang :-) It needs some complementary material. The basic "educational" package could be 1) The book (part 1 is free on the net) http://www.erlang.org/download/erlang-book-part1.pdf 2) Getting started with Erlang http://www.erlang.se/doc/doc-5.0.1/pdf/getting_started-5.0.1.pdf 3) Reference Manual http://www.erlang.org/doc/r9c/pdf/reference_manual-5.3.pdf 4) Programming examples http://www.erlang.org/doc/r9c/doc/programming_examples/part_frame.html Then if you're teacher there is a complete 4 day course http://www.erlang.org/course/course.html This is 4 days of (guess 4 hours teaching + 3 hours exercises) So represents enough material for 8 x 2 hour lectures Part 2 of the book is worth looking at for the examples - Part 1 is technique - part 2 is extended applications. /Joe On Wed, 15 Sep 2004, Corrado Santoro wrote: > Hi all, > > some people at my Univerisity are interested in Erlang and asked me for some > documentation and books. > > I've seen that Amazon still sells some copies of the Erlang book by Armstrong, > Virding, et al.. However, the last edition of the book is of 1996. So I would > ask you (and above all to book authors) if the language and the runtime system > have been substantially modified since 1996, or the book can be still > considered up to date. > > I now that there is the book from Mickael Remond, but unfortunatelly, we don't > understand Frech ;-) > > Ciao, > -Corrado > > -- > ====================================================== > Eng. Corrado Santoro, Ph.D. > > University of Catania - Engineering Faculty > Department of Computer Science and > Telecommunications Engineering > Viale A. Doria, 6 - 95125 CATANIA (ITALY) > > Tel: +39 095 7382380 Fax: +39 095 338280 > +39 095 7382365 > +39 095 7382364 > > EMail: csanto@REDACTED > Personal Home Page: > http://www.diit.unict.it/users/csanto > > NUXI Home Page: > http://nuxi.iit.unict.it > ====================================================== > > ------------------------------------------------- > This mail sent through IMP: http://www.cdc.unict.it/ > From nick@REDACTED Wed Sep 15 15:12:50 2004 From: nick@REDACTED (Niclas Eklund) Date: Wed, 15 Sep 2004 15:12:50 +0200 (MEST) Subject: Erlang Book In-Reply-To: Message-ID: Don't forget: http://www.erlang.org/doc/r9c/doc/efficiency_guide/part_frame.html /Nick On Wed, 15 Sep 2004, Joe Armstrong wrote: > > The book describes a sub-set of Erlang :-) > > It needs some complementary material. > > The basic "educational" package could be > > 1) The book (part 1 is free on the net) > > http://www.erlang.org/download/erlang-book-part1.pdf > > 2) Getting started with Erlang > > http://www.erlang.se/doc/doc-5.0.1/pdf/getting_started-5.0.1.pdf > > 3) Reference Manual > > http://www.erlang.org/doc/r9c/pdf/reference_manual-5.3.pdf > > 4) Programming examples > > http://www.erlang.org/doc/r9c/doc/programming_examples/part_frame.html > > Then if you're teacher there is a complete 4 day course > > http://www.erlang.org/course/course.html > > This is 4 days of (guess 4 hours teaching + 3 hours exercises) > > So represents enough material for 8 x 2 hour lectures > > Part 2 of the book is worth looking at for the examples - Part 1 is > technique - part 2 is extended applications. > > > /Joe > > > > > On Wed, 15 Sep 2004, > > > Corrado Santoro wrote: > > > Hi all, > > > > some people at my Univerisity are interested in Erlang and asked me for some > > documentation and books. > > > > I've seen that Amazon still sells some copies of the Erlang book by Armstrong, > > Virding, et al.. However, the last edition of the book is of 1996. So I would > > ask you (and above all to book authors) if the language and the runtime system > > have been substantially modified since 1996, or the book can be still > > considered up to date. > > > > I now that there is the book from Mickael Remond, but unfortunatelly, we don't > > understand Frech ;-) > > > > Ciao, > > -Corrado > > > > -- > > ====================================================== > > Eng. Corrado Santoro, Ph.D. > > > > University of Catania - Engineering Faculty > > Department of Computer Science and > > Telecommunications Engineering > > Viale A. Doria, 6 - 95125 CATANIA (ITALY) > > > > Tel: +39 095 7382380 Fax: +39 095 338280 > > +39 095 7382365 > > +39 095 7382364 > > > > EMail: csanto@REDACTED > > Personal Home Page: > > http://www.diit.unict.it/users/csanto > > > > NUXI Home Page: > > http://nuxi.iit.unict.it > > ====================================================== > > > > ------------------------------------------------- > > This mail sent through IMP: http://www.cdc.unict.it/ From matthias@REDACTED Wed Sep 15 16:07:23 2004 From: matthias@REDACTED (Matthias Lang) Date: Wed, 15 Sep 2004 16:07:23 +0200 Subject: Erlang/OTP and SDL In-Reply-To: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> References: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> Message-ID: <16712.19611.952646.633967@antilipe.corelatus.se> Eranga> How good is the SDL support in Erlang? Are there any tools Eranga> that can generate Erlang code from a SDL spec? Ulf> In general, one can say that it's entirely straightforward Ulf> to generate Erlang from SDL Just as an example: MTP-2 is defined in about 50 pages of SDL diagrams. Without knowing anything about MTP-2, I "brainlessly" translated it into Erlang. By "brainlessly", I mean I used a process whenever SDL had a process, sent a message whenever SDL sent a message and sat in receive whenever SDL wanted me to wait for a message. The result was just over 2000 lines of Erlang code. While doing that, I found two bugs in the SDL in the MTP-2 standard, both of which have been corrected in a later version. The Erlang code was hopelessly slow, but that was OK: the goal was to build a reference implementation to test the real (hardware-accelerated) implementation against. I didn't use any tools. Matthias From erlang@REDACTED Wed Sep 15 16:30:05 2004 From: erlang@REDACTED (Inswitch Solutions - Erlang Evaluation) Date: Wed, 15 Sep 2004 11:30:05 -0300 Subject: Erlang/OTP and SDL References: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> <16712.19611.952646.633967@antilipe.corelatus.se> Message-ID: <10e301c49b30$81ab28f0$1e00a8c0@design> Hi Matthias, In your last mail you wrote: >MTP-2 is defined in about 50 pages of SDL.... >..... The Erlang code was hopelessly >slow, but that was OK: the goal was to build a reference >implementation to test the real (hardware-accelerated) implementation >against. Why was Erlang code for MTP2 slow? Would you recommend developing higher layers (MTP3 or ISUP) in Erlang? thanks, Eduardo Figoli INSwitch Solutions ----- Original Message ----- From: "Matthias Lang" To: "Ulf Wiger (AL/EAB)" Cc: Sent: Wednesday, September 15, 2004 11:07 AM Subject: RE: Erlang/OTP and SDL > > > Eranga> How good is the SDL support in Erlang? Are there any tools > Eranga> that can generate Erlang code from a SDL spec? > > Ulf> In general, one can say that it's entirely straightforward > Ulf> to generate Erlang from SDL > > Just as an example: MTP-2 is defined in about 50 pages of SDL > diagrams. Without knowing anything about MTP-2, I "brainlessly" > translated it into Erlang. By "brainlessly", I mean I used a process > whenever SDL had a process, sent a message whenever SDL sent a message > and sat in receive whenever SDL wanted me to wait for a message. > > The result was just over 2000 lines of Erlang code. While doing that, > I found two bugs in the SDL in the MTP-2 standard, both of which have > been corrected in a later version. The Erlang code was hopelessly > slow, but that was OK: the goal was to build a reference > implementation to test the real (hardware-accelerated) implementation > against. > > I didn't use any tools. > > Matthias From casper2000a@REDACTED Thu Sep 16 06:47:40 2004 From: casper2000a@REDACTED (Casper) Date: Thu, 16 Sep 2004 10:47:40 +0600 Subject: Erlang Book In-Reply-To: Message-ID: <20040916042632.515D54000C1@mail.omnibis.com> Hi, I think Erlang has a good documentation. I started looking at Erlang just about 1 month back and went through the Part 1 of Erlang book (erlang-book-part1.pdf) and now only depend on Erlang Documentation. If you need to go in to more complex methods, there're vast amount of research and other papers on the net. Regards, Eranga -----Original Message----- From: owner-erlang-questions@REDACTED [mailto:owner-erlang-questions@REDACTED] On Behalf Of Niclas Eklund Sent: Wednesday, September 15, 2004 7:13 PM To: Joe Armstrong Cc: Corrado Santoro; erlang-questions@REDACTED Subject: Re: Erlang Book Don't forget: http://www.erlang.org/doc/r9c/doc/efficiency_guide/part_frame.html /Nick On Wed, 15 Sep 2004, Joe Armstrong wrote: > > The book describes a sub-set of Erlang :-) > > It needs some complementary material. > > The basic "educational" package could be > > 1) The book (part 1 is free on the net) > > http://www.erlang.org/download/erlang-book-part1.pdf > > 2) Getting started with Erlang > > http://www.erlang.se/doc/doc-5.0.1/pdf/getting_started-5.0.1.pdf > > 3) Reference Manual > > http://www.erlang.org/doc/r9c/pdf/reference_manual-5.3.pdf > > 4) Programming examples > > http://www.erlang.org/doc/r9c/doc/programming_examples/part_frame.html > > Then if you're teacher there is a complete 4 day course > > http://www.erlang.org/course/course.html > > This is 4 days of (guess 4 hours teaching + 3 hours exercises) > > So represents enough material for 8 x 2 hour lectures > > Part 2 of the book is worth looking at for the examples - Part 1 is > technique - part 2 is extended applications. > > > /Joe > > > > > On Wed, 15 Sep 2004, > > > Corrado Santoro wrote: > > > Hi all, > > > > some people at my Univerisity are interested in Erlang and asked me for some > > documentation and books. > > > > I've seen that Amazon still sells some copies of the Erlang book by Armstrong, > > Virding, et al.. However, the last edition of the book is of 1996. So I would > > ask you (and above all to book authors) if the language and the runtime system > > have been substantially modified since 1996, or the book can be still > > considered up to date. > > > > I now that there is the book from Mickael Remond, but unfortunatelly, we don't > > understand Frech ;-) > > > > Ciao, > > -Corrado > > > > -- > > ====================================================== > > Eng. Corrado Santoro, Ph.D. > > > > University of Catania - Engineering Faculty > > Department of Computer Science and > > Telecommunications Engineering > > Viale A. Doria, 6 - 95125 CATANIA (ITALY) > > > > Tel: +39 095 7382380 Fax: +39 095 338280 > > +39 095 7382365 > > +39 095 7382364 > > > > EMail: csanto@REDACTED > > Personal Home Page: > > http://www.diit.unict.it/users/csanto > > > > NUXI Home Page: > > http://nuxi.iit.unict.it > > ====================================================== > > > > ------------------------------------------------- > > This mail sent through IMP: http://www.cdc.unict.it/ From casper2000a@REDACTED Thu Sep 16 07:08:54 2004 From: casper2000a@REDACTED (Casper) Date: Thu, 16 Sep 2004 11:08:54 +0600 Subject: Erlang/OTP and SDL In-Reply-To: <16712.19611.952646.633967@antilipe.corelatus.se> Message-ID: <20040916044745.AAAC44000C3@mail.omnibis.com> Matthias, Thanks for the info. Could you kindly give us some benchmark about the performance of your Erlang MTP2 implementation compared to your C or Hardware implementation? Do you think it's a semantic problem in your particular implementation or inherited to Erlang? I am planning to implement a GSM/UMTS MAP service provider layer in Erlang and develop the telecom platform on top of that. Do you think that's wise or just stick to plain old C/C++? Or (slow as hell) Java? Thanks! Eranga -----Original Message----- From: owner-erlang-questions@REDACTED [mailto:owner-erlang-questions@REDACTED] On Behalf Of Matthias Lang Sent: Wednesday, September 15, 2004 8:07 PM To: Ulf Wiger (AL/EAB) Cc: erlang-questions@REDACTED Subject: RE: Erlang/OTP and SDL Eranga> How good is the SDL support in Erlang? Are there any tools Eranga> that can generate Erlang code from a SDL spec? Ulf> In general, one can say that it's entirely straightforward Ulf> to generate Erlang from SDL Just as an example: MTP-2 is defined in about 50 pages of SDL diagrams. Without knowing anything about MTP-2, I "brainlessly" translated it into Erlang. By "brainlessly", I mean I used a process whenever SDL had a process, sent a message whenever SDL sent a message and sat in receive whenever SDL wanted me to wait for a message. The result was just over 2000 lines of Erlang code. While doing that, I found two bugs in the SDL in the MTP-2 standard, both of which have been corrected in a later version. The Erlang code was hopelessly slow, but that was OK: the goal was to build a reference implementation to test the real (hardware-accelerated) implementation against. I didn't use any tools. Matthias From matthias@REDACTED Thu Sep 16 10:59:59 2004 From: matthias@REDACTED (Matthias 3000a) Date: Thu, 16 Sep 2004 10:59:59 +0200 Subject: Erlang/OTP and SDL In-Reply-To: <20040916044745.AAAC44000C3@mail.omnibis.com> References: <16712.19611.952646.633967@antilipe.corelatus.se> <20040916044745.AAAC44000C3@mail.omnibis.com> Message-ID: <16713.22031.387419.347564@antilipe.corelatus.se> Eranga writes: > Could you kindly give us some benchmark about the performance of > your Erlang MTP2 implementation compared to your C or Hardware > implementation? The _key_ part of my comment was that taking a state machine specified by an SDL diagram and turning it into Erlang code was very easy. You end up with code which can easily be verified to implement the spec, the whole spec and nothing but the spec. That is a valuable property. But both you and Inswitch seized on an _aside_ about performance. The performance of that MTP-2 implementation tells you NOTHING AT ALL about the likely performance of MTP-3 or higher SS7 layers implemented in Erlang. Why? 1. The main performance-eating parts of MTP-2 are completely absent from the higher SS7 layers. You don't have to do bit-stuffing. You don't have to deal with floods of five-octet signal units. You don't have to compute CRCs on all those five-octet SUs. 2. That MTP-2 implementation was written with one goal: correctness. Performance did not figure at all. On a 166MHz 6x86 (my desktop PC at the time), it couldn't even keep up with one 64kbit/s timeslot. But I made no attempt to write the code to perform well. Here's an example of obviously inefficient code, it's the bit-unstuffer: unstuff([0,1,1,1, 1,1,1,0|T]) -> {Unstuffed, Leftover} = unstuff(T), {[flag|Unstuffed], Leftover}; unstuff([1,1,1,1, 1,1,1|T]) -> {Unstuffed, Leftover} = unstuff(T), {[abort|Unstuffed], Leftover}; unstuff([1,1,1,1,1,0|T]) -> % zero removal {Unstuffed, Leftover} = unstuff(T), {[1,1,1,1,1|Unstuffed], Leftover}; unstuff([Bit,A,B,C,D,E,F,G|T]) -> % have enough lookahead to not be boundary {Unstuffed, Leftover} = unstuff([A,B,C,D,E,F,G|T]), {[Bit|Unstuffed], Leftover}; unstuff(Other) -> {[], Other}. This is a poster example of something that is easy, almost trivial, in hardware. > I am planning to implement a GSM/UMTS MAP service provider layer in Erlang > and develop the telecom platform on top of that. Do you think that's wise or > just stick to plain old C/C++? Or (slow as hell) Java? I can't comment on your specific application, but I would expect implementing the higher layers of SS7 (i.e. MTP-3 and upwards) in Erlang would be quick to do and give reasonably good performance. The bit syntax is well suited to the manipulations you need to do on MTP-3 PDUs, which is not so surprising when you consider the bit syntax's history. The nasty parts of MTP-2 are not present higher in the stack. Matt From joe@REDACTED Thu Sep 16 13:10:37 2004 From: joe@REDACTED (Joe Armstrong) Date: Thu, 16 Sep 2004 13:10:37 +0200 (CEST) Subject: ANNOUNCE ml9 Message-ID: Hi, This is to announce ml9 - ml9 is a general purpose markup langauge. I designed ml9 to be the front end for erlguten - but it turned out that ml9 is was very useful for a wide range of tasks. I am therefore releasing it independently from erlguten. ml9 allows you to mix all sorts of differernt formats in a single framework, and to easly create meta-languages with a user-freindly syntax. Read all about it at: http://www.sics.se/~joe/ml9/doc.html All feedback is welcomed Cheers /Joe From serge@REDACTED Thu Sep 16 16:27:02 2004 From: serge@REDACTED (Serge Aleynikov) Date: Thu, 16 Sep 2004 10:27:02 -0400 Subject: Erlang/OTP and SDL In-Reply-To: <16712.19611.952646.633967@antilipe.corelatus.se> References: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> <16712.19611.952646.633967@antilipe.corelatus.se> Message-ID: <4149A2B6.5020806@hq.idt.net> Matthias, Do you think you could release the MTP-2 Erlang implementation to the Erlang community? Perhaps, this way people could review possible reasons for performance loss, and come up with reasonable suggestions. Serge Matthias Lang wrote: > > Eranga> How good is the SDL support in Erlang? Are there any tools > Eranga> that can generate Erlang code from a SDL spec? > > Ulf> In general, one can say that it's entirely straightforward > Ulf> to generate Erlang from SDL > > Just as an example: MTP-2 is defined in about 50 pages of SDL > diagrams. Without knowing anything about MTP-2, I "brainlessly" > translated it into Erlang. By "brainlessly", I mean I used a process > whenever SDL had a process, sent a message whenever SDL sent a message > and sat in receive whenever SDL wanted me to wait for a message. > > The result was just over 2000 lines of Erlang code. While doing that, > I found two bugs in the SDL in the MTP-2 standard, both of which have > been corrected in a later version. The Erlang code was hopelessly > slow, but that was OK: the goal was to build a reference > implementation to test the real (hardware-accelerated) implementation > against. > > I didn't use any tools. > > Matthias From kruegger@REDACTED Thu Sep 16 18:48:52 2004 From: kruegger@REDACTED (Stephen Han) Date: Thu, 16 Sep 2004 09:48:52 -0700 Subject: Erlang/OTP and SDL In-Reply-To: <4149A2B6.5020806@hq.idt.net> References: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> <16712.19611.952646.633967@antilipe.corelatus.se> <4149A2B6.5020806@hq.idt.net> Message-ID: <86f1f53504091609483b8bfce5@mail.gmail.com> If you don't own the SS7 stack including hardware, it is likely that you will use commercial SS7 stack. Most of the commercial SS7 stack does not come with MAP package but as separate product anyway. It may be much easier to integrate from MTP2 to TCAP part of commerical SS7 product into your GSM MAP and user applications. I think that approach makes more sense to me in terms of development overhead. regards, On Thu, 16 Sep 2004 10:27:02 -0400, Serge Aleynikov wrote: > Matthias, > > Do you think you could release the MTP-2 Erlang implementation to the > Erlang community? Perhaps, this way people could review possible > reasons for performance loss, and come up with reasonable suggestions. > > Serge > > > > Matthias Lang wrote: > > > > > Eranga> How good is the SDL support in Erlang? Are there any tools > > Eranga> that can generate Erlang code from a SDL spec? > > > > Ulf> In general, one can say that it's entirely straightforward > > Ulf> to generate Erlang from SDL > > > > Just as an example: MTP-2 is defined in about 50 pages of SDL > > diagrams. Without knowing anything about MTP-2, I "brainlessly" > > translated it into Erlang. By "brainlessly", I mean I used a process > > whenever SDL had a process, sent a message whenever SDL sent a message > > and sat in receive whenever SDL wanted me to wait for a message. > > > > The result was just over 2000 lines of Erlang code. While doing that, > > I found two bugs in the SDL in the MTP-2 standard, both of which have > > been corrected in a later version. The Erlang code was hopelessly > > slow, but that was OK: the goal was to build a reference > > implementation to test the real (hardware-accelerated) implementation > > against. > > > > I didn't use any tools. > > > > Matthias > From vances@REDACTED Thu Sep 16 22:28:57 2004 From: vances@REDACTED (Vance Shipley) Date: Thu, 16 Sep 2004 16:28:57 -0400 Subject: Erlang/OTP and SDL In-Reply-To: <4149A2B6.5020806@hq.idt.net> References: <37FB7AA6F5F9814FB634A7BF4C35A6F540287C@ESEALNT442.al.sw.ericsson.se> <16712.19611.952646.633967@antilipe.corelatus.se> <4149A2B6.5020806@hq.idt.net> Message-ID: <20040916202857.GO91901@frogman.motivity.ca> Folks, It is not suprising that Matthias' Erlang implementation of MTP2 did not perform well. This is work that is normally done in hardware. The MTP2 protocol should be implemented in silicon the same way HDLC is. In MTP2 there is no idle time, FISUs (Fill-In Signal Units) are sent continuously in the absence of payload. Each FISU has an FCS (Frame Check Sequence) which requires a CRC-16 calculation to be done. You will find that in any commercial product the CRC work and the handling of FISUs is done in hardware. This is the same as in HDLC where the flag delimiting, bit stuffing and CRC work are done in hardware. For these reasons MTP2 and HDLC are not appropriately handled in Erlang. Everything above that is quite practical to implement in Erlang. But I may be biased because I implement protocols in Erlang. -Vance Vance Shipley Motivity Telecom Inc. +1 519 240 3684 vances@REDACTED From Manjeet.Singh.Sardar@REDACTED Fri Sep 17 09:40:50 2004 From: Manjeet.Singh.Sardar@REDACTED (Manjeet.Singh Sardar (AC/EDD)) Date: Fri, 17 Sep 2004 09:40:50 +0200 Subject: How to run Erlang FTP client with Passive mode Message-ID: Hi, We have configured one of our ISP server to cater to the need of IPV6 and IPV4. When we are running unix ftp client its working fine. But when we are using erlang ftp client the same is not working.The difference is that the unix ftp client is running with "Passive mode" whereas the Erlang client doesnot. Could anybody suggest how to start erlang ftp client with passive mode. Thanks and Regards Manjeet From bengt.kleberg@REDACTED Fri Sep 17 14:26:57 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Fri, 17 Sep 2004 14:26:57 +0200 Subject: line oriented input, is there an alternative to the io module? Message-ID: <414AD811.90709@ericsson.com> greetings, if i want to (quickly) read the integers in a file, line by line, is there a faster alternative to io:fread( '', "~d" ) i am using the io:fread/2 for line oriented input. ever since i was told about httpd_util:to_upper/1 i know that there might be alternatives to ''standard'' modules/functions to be found in unexpected places. (to_upper/1 i would have expected in the lists module) i have tested io:get_line/1 followed by io_lib:fread/1. this was (predictably) slower. bengt From enano@REDACTED Sun Sep 19 02:03:35 2004 From: enano@REDACTED (Miguel Barreiro) Date: Sun, 19 Sep 2004 02:03:35 +0200 (CEST) Subject: sendfile (again) Message-ID: Some time ago I posted a (admittedly rough) patch adding a sendfile(2) interface to Erlang. Are there any plans to add sendfile to the standard Erlang distribution? Regards, Miguel From olgeni@REDACTED Sun Sep 19 13:28:47 2004 From: olgeni@REDACTED (Jimmy Olgeni) Date: Sun, 19 Sep 2004 13:28:47 +0200 (CEST) Subject: compiler error while building hipe Message-ID: <20040919131315.N9666@olgeni.olgeni> Hi, Looks like I can no longer build HIPE using gcc 3.4.2... $ gcc -v Using built-in specs. Configured with: FreeBSD/i386 system compiler Thread model: posix gcc version 3.4.2 [FreeBSD] 20040728 Full build log available here: http://pointyhat.freebsd.org/errorlogs/i386-5-full/erlang-r9c2_1,1.log Does anybody know what could be wrong? I can make it work by removing --enable-hipe but I'd like to deliver HIPE with 5.3-RELEASE :-) -- jimmy From mikpe@REDACTED Sun Sep 19 22:09:05 2004 From: mikpe@REDACTED (Mikael Pettersson) Date: Sun, 19 Sep 2004 22:09:05 +0200 (MEST) Subject: compiler error while building hipe Message-ID: <200409192009.i8JK95cm009288@harpo.it.uu.se> On Sun, 19 Sep 2004 13:28:47 +0200 (CEST), Jimmy Olgeni wrote: > Looks like I can no longer build HIPE using gcc 3.4.2... > > $ gcc -v > Using built-in specs. > Configured with: FreeBSD/i386 system compiler > Thread model: posix > gcc version 3.4.2 [FreeBSD] 20040728 > > Full build log available here: > > http://pointyhat.freebsd.org/errorlogs/i386-5-full/erlang-r9c2_1,1.log > > Does anybody know what could be wrong? I can make it work by removing > --enable-hipe but I'd like to deliver HIPE with 5.3-RELEASE :-) That log indicates that several key hipe runtime system files never were compiled, and that's what's leading to the large number of errors from the linker. You appear to have a 'make' problem. If you aren't using GNU make, then please do so. FWIW, the current system (which will become the new OTP release in a few weeks) is built regularly here with gcc-3.4.2, but our environments are all Linux, or Solaris + GNU tools. /Mikael From tim@REDACTED Mon Sep 20 08:23:24 2004 From: tim@REDACTED (Tim Lavoie) Date: Mon, 20 Sep 2004 01:23:24 -0500 Subject: Migration from Java? Message-ID: <87zn3lv4pv.fsf@theasylum.dyndns.org> Hello all, I've stumbled across Erlang fairly recently, and have started reading, stepping through tutorials and so on. So far, so good! This has been primarily for my own interest, so far, but I can see where it might scratch an itch or two for my employer as well. It hasn't been suggested yet, never mind approved, but I would like to explore the ways in which Erlang might help, as well as any land mines to avoid. Perhaps it would be helpful to describe the current scenario to some degree, and where I see Erlang being helpful. Our current environment is modular, running on a variety of hardware and operating systems, with a web-based interface. A Java app server runs the front part, perhaps with a separate web server out in front, handling static content. The Java app is the main piece I'm involved with, and it touches everything. XSL templates are used to generate the pages dynamically, and a relational database is used fairly extensively. Also, some operations involve passing beefy chunks of XML to a separate number-crunching server, which can run for minutes on end. I'm not expecting to get anyone to make huge changes any time soon, but would like to at demonstrate that there are alternatives to some design choices which might be good to know about. If that helps improve things down the road, I'm happy. My main area of concern tends to be performance, so I have run repeatedly into areas which could use help. First, XSL. I understand now why it was chosen, back in the mists of time. I don't know that Erlang is able to help directly here, but it does cause headaches. Even if things stay in Java, there is some hope that this will go away. It's fine for morphing documents on occasion, but brutal when generating many large, dynamic pages while someone is waiting. Incidentally, my boss was the original architect, but took it well when I ranted unwittingly about this particular ugliness in his baby. I'm guessing there is hope for future change. Now, the main issue as I see it is that scalability is a problem. The performance woes are less apparent when subjected to few users, and the application server layer can be scaled with more hardware... given sufficient will and resources. Still, a few dozen users on this large app, and the app server is suffering badly. One area I can see Erlang's approach helping is with asyncronous I/O, combined with message passing. Right now, everything effectively blocks sequentially. Page transitions mean that current state gets written to the database, though most often this is "just in case". Similarly, requests needing that back-end number cruncher essentially tie up the user's browser until it comes back. I can see the database writes being implemented as sending the message to a process which handles the details, with the original web request then continuing on its way without waiting. This isn't generally an issue in my performance-test environment, but on client sites, with different networking and servers, it creates delays. In the case where the original process needs the result, it could ask for notification back, and carry on from there. The requests to the back-end server(s) are similar, and also block until done. Some of these requests naturally take longer than others, so I see Erlang as providing something of a more intelligent queue. Now, all requests are spawned together, so they slow down if there are more requests than processors. I'd like to see this as a queue with a notification back, like the database. Also, since we know what type of requests take much longer, Erlang's selective receive mechanism is a natural for giving priority to those which should return quickly. Phew... Sorry, that was long-winded, and I still have questions. - Has anyone migrated a large project of this sort? How did it go? - Is there some equivalent of Java's JDBC? Relational databases are pretty much a given, and persistent connection pools are pretty much required. I have seen mention of ODBC for Erlang; if this does the trick, particularly from Linux, that's a good start. Targets are the main RDBMS vendors, on several platforms. - Any other suggestions are naturally welcome. Thanks! Tim Lavoie From valentin@REDACTED Mon Sep 20 20:37:57 2004 From: valentin@REDACTED (Valentin Micic) Date: Mon, 20 Sep 2004 20:37:57 +0200 Subject: Problem with DETS V9 Message-ID: <009901c49f41$059ca8a0$0100a8c0@MONEYMAKER2> Dear all, If an opened DETS file (Version 9) was updated but not closed properly, what are the odds to have an appropriate MD5 digest? To that end, what is the point of verifying MD5 digest before testing the "closed_properly" flag in dets_v9.erl? The following is a fragment from dets_v9:check_file_header that illustrates the above: if FH#fileheader.cookie /= ?MAGIC -> {error, not_a_dets_file}; FH#fileheader.type == badtype -> {error, invalid_type_code}; FH#fileheader.version /= ?FILE_FORMAT_VERSION -> {error, bad_version}; FH#fileheader.has_md5 == true, FH#fileheader.read_md5 /= FH#fileheader.md5 -> {error, not_a_dets_file}; % harsh but fair FH#fileheader.trailer /= FH#fileheader.eof -> {error, not_closed}; FH#fileheader.closed_properly == ?CLOSED_PROPERLY -> {ok, true}; FH#fileheader.closed_properly == ?NOT_PROPERLY_CLOSED -> {error, not_closed}; HashBif == undefined -> {error, bad_hash_bif}; true -> {error, not_a_dets_file} end, I had a problem with MNESIA start-up... well, to cut a story short, I've been using mensia:activity with async_dirty access context on mnesia_frag module. Somehow, after shutting MNESIA down, we ended up with a bunch of corrupted DETS files. MNESIA refused to start because of the above-mentioned issue, and the only way to fix it was to change the evaluation order in DETS_V9 module. This change allowed MNESIA to repair corrupted dets files, and start without dumping the core. Is the original testing order, as specified in above code fragment, there by design? Valentin. -------------- next part -------------- An HTML attachment was scrubbed... URL: From ok@REDACTED Tue Sep 21 05:25:47 2004 From: ok@REDACTED (Richard A. O'Keefe) Date: Tue, 21 Sep 2004 15:25:47 +1200 (NZST) Subject: Migration from Java? Message-ID: <200409210325.i8L3PlCH136050@atlas.otago.ac.nz> Tim Lavoie wrote: ... XSL templates are used to generate the pages dynamically, ... You have my heart-felt pity. I've come across worse languages for generating XML than XSL. (To be precise: assembly code and Intercal.) But for making a basically fairly simple tree-walking task difficult, XSL must take some kind of prize. (I assume that you're using XSLT rather than FO here.) First, XSL. I understand now why it was chosen, back in the mists of time. It would be interesting to hear the reason. I've got a 20-page library I wrote for Scheme, which makes XML walking and generation pretty easy (except that it doesn't handle namespaces, but it wouldn't be enormously hard to add that). My understanding is that the Erlang documentation is generated from SGML (essentially the same data structure as XML, but it doesn't have namespaces, thankfully) using an Erlang library, which probably isn't very big. SWI Prolog comes with an SGML and XML parser and is used to process gigabytes of RDF. It's also used for processing at least some of the SWI Prolog documentation. I have again my own little library package for Prolog, and it's dead simple to walk and generate XML. SWI's stuff does handle namespaces. There's a famous XML walking/generating library for Haskell called HaXML. In short, processing XML in _real_ declarative languages using their native data structures is so simple it's almost a pleasure. If it comes to that, I have a rather larger library written in C; about 84 pages, 3100 SLOC. Even _that_ is easier to use than XSL. How could Erlang *not* be easier? I don't know that Erlang is able to help directly here, It can, it can. - Is there some equivalent of Java's JDBC? Relational databases are pretty much a given, and persistent connection pools are pretty much required. I have seen mention of ODBC for Erlang; if this does the trick, particularly from Linux, that's a good start. Targets are the main RDBMS vendors, on several platforms. Don't forget that Erlang comes standard with Mnesia, a distributed replicated data base system. (Which has been used to store XML documents...) From erlang@REDACTED Tue Sep 21 10:50:16 2004 From: erlang@REDACTED (Peter-Henry Mander) Date: Tue, 21 Sep 2004 09:50:16 +0100 Subject: EUC. Do you know where that is? Message-ID: <20040921095016.787784e2.erlang@manderp.freeserve.co.uk> Hi Dudes, As Marlin says in Finding Nemo: "Okay, Crush, I need to get to the Erlang User Conference. EUC. Do you know where that is?" Ahem, seriously, I _do_ need directions. I'll land the previous day at Stockholm-Skavsta and I haven't got a measly clue how to proceed from there. Help me please? Pete. -- "The Tao of Programming flows far away and returns on the wind of morning." From zist@REDACTED Tue Sep 21 11:41:29 2004 From: zist@REDACTED (. zist) Date: Tue, 21 Sep 2004 09:41:29 +0000 Subject: Printing list of integers in hexadecimal instead of decimal ? Message-ID: An HTML attachment was scrubbed... URL: From raimo@REDACTED Tue Sep 21 11:49:53 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 21 Sep 2004 11:49:53 +0200 Subject: Printing list of integers in hexadecimal instead of decimal ? References: Message-ID: zist@REDACTED (. zist) writes: No, there is not. Using ~w you have printed a list of any terms in their default textual representation, which for integers are decimal. Write a loop(recurse), or use lists:foreach/2. >
Hello,
>
 
>
I have a list of integers, if I use io:format with a ~w format indication (io:format("~w",[List])),
>
the integers are printed in decimal, is there a way to print them in hexadecimal ?
>
(without printing each integer of the list one by one, as there is a possibility to print one integer in hexadecimal, with for instance ~2.16.0B).
>
 
>
Thanks


The new MSN 8: smart spam protection and 2 months FREE* > -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From matthias@REDACTED Tue Sep 21 15:06:46 2004 From: matthias@REDACTED (Matthias Lang) Date: Tue, 21 Sep 2004 15:06:46 +0200 Subject: EUC. Do you know where that is? In-Reply-To: <20040921095016.787784e2.erlang@manderp.freeserve.co.uk> References: <20040921095016.787784e2.erlang@manderp.freeserve.co.uk> Message-ID: <16720.10086.212580.565639@antilipe.corelatus.se> Peter-Henry Mander writes: > Ahem, seriously, I _do_ need directions. I'll land the previous day at > Stockholm-Skavsta and I haven't got a measly clue how to proceed from > there. Help me please? Skavsta is about 90 minutes from Stockholm (Arlanda, the main airport, is closer). Don't take a cab, it'll cost a fortune, if they'll take you at all. There's a direct bus ("Flygbuss") from the terminal to Stockholm Central Station, it leaves whenever a flight lands. Costs roughly 100sek (less than ten quid) and they take cards. The bus takes you to the bus terminal above Stockholm's main railway station. ("City Terminalen"). You didn't say where you were staying. If you're staying in the city, chances are it's within walking distance of the station. You can get a good zoomable map of Stockholm and surroundings by clicking your way through from http://kartor.eniro.se/ If you're staying in ?lvsj?, the quickest and cheapest way there is the commuter train ("pendelt?g"). Mail me privately if that's the case and I'll write some more detailed directions. Matthias From paris@REDACTED Tue Sep 21 15:51:10 2004 From: paris@REDACTED (Javier =?iso-8859-1?Q?Par=EDs_Fern=E1ndez?=) Date: Tue, 21 Sep 2004 15:51:10 +0200 Subject: Traversing a binary Message-ID: <20040921135110.GA22978@dc.fi.udc.es> Hi, I need to add all the two-byte pairs of a binary to make a checksum. Using the bit syntax is correct, but too slow. Is there a way to have some "iterator" over its contents without having to do pattern matching on the binary(Which is slow) ? Thanks. From raimo@REDACTED Tue Sep 21 17:16:05 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 21 Sep 2004 17:16:05 +0200 Subject: Traversing a binary References: <20040921135110.GA22978@dc.fi.udc.es> Message-ID: Post your code, there are fast and slow ways to traverse a binary. paris@REDACTED (Javier Par?s Fern?ndez) writes: > Hi, > > I need to add all the two-byte pairs of a binary to make a checksum. > Using the bit syntax is correct, but too slow. Is there a way to have > some "iterator" over its contents without having to do pattern matching > on the binary(Which is slow) ? > > Thanks. > -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From paris@REDACTED Tue Sep 21 17:46:26 2004 From: paris@REDACTED (Javier =?iso-8859-1?Q?Par=EDs_Fern=E1ndez?=) Date: Tue, 21 Sep 2004 17:46:26 +0200 Subject: Traversing a binary In-Reply-To: References: <20040921135110.GA22978@dc.fi.udc.es> Message-ID: <20040921154626.GA23451@dc.fi.udc.es> On Tue, Sep 21, 2004 at 05:16:05PM +0200, Raimo Niskanen wrote: > Post your code, there are fast and slow ways to traverse a binary. Ok, I only tried two things: checksum_1(<>, Csum) -> checksum_1(Remainder, Csum + Num); checksum_1(<<>>, Csum) -> Csum. The problem here seems to be the generation of sub-binaries. I tried to get more bytes at a time to reduce the number of binaries generated: checksum_1(Bin = <>, Csum) when size(Bin)>=16 -> checksum_1(Rem, Csum+N1+N2+N3+N4+N5+N6+N7+N8); Ok, this one was faster, but it is still much faster to do it in a C driver, specially if the binary is big (over 1 Mb). Is there a faster way to do this? Regards. From thomasl_erlang@REDACTED Tue Sep 21 18:45:05 2004 From: thomasl_erlang@REDACTED (Thomas Lindgren) Date: Tue, 21 Sep 2004 09:45:05 -0700 (PDT) Subject: Traversing a binary In-Reply-To: <20040921154626.GA23451@dc.fi.udc.es> Message-ID: <20040921164505.80205.qmail@web41904.mail.yahoo.com> --- Javier Par?s Fern?ndez wrote: > checksum_1(Bin = < N3:16/integer, > N4:16/integer, N5:16/integer, N6:16/integer, > N7:16/integer, N8:16/integer, Rem/binary>>, > Csum) when size(Bin)>=16 -> > checksum_1(Rem, Csum+N1+N2+N3+N4+N5+N6+N7+N8); > > Ok, this one was faster, but it is still much faster > to do it in a > C driver, specially if the binary is big (over 1 > Mb). Is there a faster way to do this? The C code will be difficult to beat in this sort of program. I can't see any obvious way to improve on the program above either. (Though I wonder if you really want '+' or 'bxor' in the above?) An Erlang compiler could theoretically generate code close to the C code, by recognizing (a) that we are iterating over a binary and hoisting tests and indirections out of the loop and (b) by recognizing that the '+' can be strength-reduced to something less expensive (perhaps all the way down to C:s weird arithmetic, which lacks even overflow detection :-). As far as I know, no Erlang compiler can do that. There is also another possibility. A few weeks ago, in the context of binary comprehensions, I floated the concept of fold operations over binaries. If one would restrict the operations suitably, a fast checksum might look like binary:foldl('16-bit +', 0, Bin) or something like that. ("Fast" in the sense that the runtime system could implement this family of operations by predefined loops, and in the sense that a compiler could more easily understand what was desired.) But that is in the future, if at all. At this point in time, I would tentatively recommend using your C driver. Best, Thomas __________________________________ Do you Yahoo!? Yahoo! Mail Address AutoComplete - You start. We finish. http://promotions.yahoo.com/new_mail From paris@REDACTED Tue Sep 21 19:19:17 2004 From: paris@REDACTED (Javier =?iso-8859-1?Q?Par=EDs_Fern=E1ndez?=) Date: Tue, 21 Sep 2004 19:19:17 +0200 Subject: Traversing a binary In-Reply-To: <20040921164505.80205.qmail@web41904.mail.yahoo.com> References: <20040921154626.GA23451@dc.fi.udc.es> <20040921164505.80205.qmail@web41904.mail.yahoo.com> Message-ID: <20040921171917.GA24469@dc.fi.udc.es> On Tue, Sep 21, 2004 at 09:45:05AM -0700, Thomas Lindgren wrote: > The C code will be difficult to beat in this sort of > program. I can't see any obvious way to improve on the > program above either. (Though I wonder if you really > want '+' or 'bxor' in the above?) It's the Tcp checksum, and it is defined that way in the rfc. I agree that it is a bit strange. > There is also another possibility. A few weeks ago, in > the context of binary comprehensions, I floated the > concept of fold operations over binaries. If one would > restrict the operations suitably, a fast checksum > might look like > > binary:foldl('16-bit +', 0, Bin) I was thinking in something like that too. Any chance it will be added sometime? :) > But that is in the future, if at all. At this point in > time, I would tentatively recommend using your C > driver. It seems the best for now. Thanks! From klacke@REDACTED Tue Sep 21 20:20:24 2004 From: klacke@REDACTED (klacke@REDACTED) Date: Tue, 21 Sep 2004 20:20:24 +0200 Subject: Traversing a binary In-Reply-To: <20040921135110.GA22978@dc.fi.udc.es> References: <20040921135110.GA22978@dc.fi.udc.es> Message-ID: <20040921182023.GA11041@hyber.org> On Tue, Sep 21, 2004 at 03:51:10PM +0200, Javier Par?s Fern?ndez wrote: > Hi, > > I need to add all the two-byte pairs of a binary to make a checksum. > Using the bit syntax is correct, but too slow. Is there a way to have > some "iterator" over its contents without having to do pattern matching > on the binary(Which is slow) ? > To get this _fast_, you have to write a linked-in driver. Make sure the binary doesn't copied down to the driver. /klacke -- Claes Wikstrom -- Caps lock is nowhere and http://www.hyber.org -- everything is under control From paris@REDACTED Tue Sep 21 22:15:51 2004 From: paris@REDACTED (Javier =?iso-8859-1?Q?Par=EDs_Fern=E1ndez?=) Date: Tue, 21 Sep 2004 22:15:51 +0200 Subject: Traversing a binary In-Reply-To: <20040921182023.GA11041@hyber.org> References: <20040921135110.GA22978@dc.fi.udc.es> <20040921182023.GA11041@hyber.org> Message-ID: <20040921201550.GA27262@dc.fi.udc.es> On Tue, Sep 21, 2004 at 08:20:24PM +0200, klacke@REDACTED wrote: > To get this _fast_, you have to write a linked-in driver. Make sure > the binary doesn't copied down to the driver. That's what i'm currently using, but it leaves a dirty feeling. :) Regards. From erik.stenman@REDACTED Tue Sep 21 22:52:09 2004 From: erik.stenman@REDACTED (Erik Stenman) Date: Tue, 21 Sep 2004 22:52:09 +0200 Subject: Traversing a binary In-Reply-To: <20040921171917.GA24469@dc.fi.udc.es> References: <20040921154626.GA23451@dc.fi.udc.es> <20040921164505.80205.qmail@web41904.mail.yahoo.com> <20040921171917.GA24469@dc.fi.udc.es> Message-ID: <41509479.3080107@bredband.net> Javier Par?s Fern?ndez wrote: >On Tue, Sep 21, 2004 at 09:45:05AM -0700, Thomas Lindgren wrote: > > >>The C code will be difficult to beat in this sort of >>program. I can't see any obvious way to improve on the >>program above either. (Though I wonder if you really >>want '+' or 'bxor' in the above?) >> >> > >It's the Tcp checksum, and it is defined that way in the >rfc. I agree that it is a bit strange. > > I'm no Tcp expert, but are you sure? Is it not defined as the 16-bit 1's complement sum? I.e. something like: '+'(A,B) -> S = A + B, S band 16#ffff + (S bsr 16). One problem with your code is that it generates bignums (heap-allocated large integers), but if it is the 16-bit 1's complement sum, then you don't need large integers. You could also traverse the binary without creating new sub-binaries, by keeping track of how many byte-pairs you have seen (N): c(N,Bin,Csum) -> case Bin of <<_:N/binary, Num:16/integer,_/binary>> -> c(N+2,Bin,'+'(Csum,Num)); <<_:N/binary, Num:8/integer>> -> '+'(Csum,Num bsl 8); _ -> Csum end. Unfortunately even with these two changes the code does not become much faster... I have attached a test program that calculates the checksum in 4 different ways, and prints the execution times in microseconds, but the function c/3 above is the fastest. /Erik - I'm Happi, you should be happy. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: tc.erl URL: From paris@REDACTED Tue Sep 21 23:22:04 2004 From: paris@REDACTED (Javier =?iso-8859-1?Q?Par=EDs_Fern=E1ndez?=) Date: Tue, 21 Sep 2004 23:22:04 +0200 Subject: Traversing a binary In-Reply-To: <41509479.3080107@bredband.net> References: <20040921154626.GA23451@dc.fi.udc.es> <20040921164505.80205.qmail@web41904.mail.yahoo.com> <20040921171917.GA24469@dc.fi.udc.es> <41509479.3080107@bredband.net> Message-ID: <20040921212204.GA27512@dc.fi.udc.es> On Tue, Sep 21, 2004 at 10:52:09PM +0200, Erik Stenman wrote: > I'm no Tcp expert, but are you sure? > Is it not defined as the 16-bit 1's complement sum? > I.e. something like: > '+'(A,B) -> > S = A + B, > S band 16#ffff + (S bsr 16). It is as you say. I didn't post all the code, only the part that looped through the binary. I only add the carry at the end, as the result is the same. > One problem with your code is that it generates bignums (heap-allocated > large integers), > but if it is the 16-bit 1's complement sum, then you don't need large > integers. I assume that a bignum is an integer bigger than the word size of the machine (Correct me if i'm wrong). I don't think i can have a checksum bigger than 4Gb. The biggest packet i may have is 64Kb (Because of ip). So, in the worst case there would be 2^15 two byte pairs. If all are 16#ffff that would add to 2^31, which fits in the 32 bits machine word. > You could also traverse the binary without creating new sub-binaries, by > keeping > track of how many byte-pairs you have seen (N): > > c(N,Bin,Csum) -> > case Bin of > <<_:N/binary, Num:16/integer,_/binary>> -> > c(N+2,Bin,'+'(Csum,Num)); > <<_:N/binary, Num:8/integer>> -> > '+'(Csum,Num bsl 8); > _ -> Csum > end. That's something i hadn't think about. Seems a good idea. > Unfortunately even with these two changes the code does not become much > faster... > I have attached a test program that calculates the checksum in 4 different > ways, > and prints the execution times in microseconds, but the function c/3 above > is the fastest. I'll try it then. Maybe it's fast enough. Thanks! From erik.stenman@REDACTED Wed Sep 22 00:11:40 2004 From: erik.stenman@REDACTED (Erik Stenman) Date: Wed, 22 Sep 2004 00:11:40 +0200 Subject: Traversing a binary In-Reply-To: <20040921212204.GA27512@dc.fi.udc.es> References: <20040921154626.GA23451@dc.fi.udc.es> <20040921164505.80205.qmail@web41904.mail.yahoo.com> <20040921171917.GA24469@dc.fi.udc.es> <41509479.3080107@bredband.net> <20040921212204.GA27512@dc.fi.udc.es> Message-ID: <4150A71C.5000105@epfl.ch> Javier Par?s Fern?ndez wrote: >I assume that a bignum is an integer bigger than the word size of the >machine (Correct me if i'm wrong). I don't think i can have a checksum >bigger than 4Gb. The biggest packet i may have is 64Kb (Because of ip). >So, in the worst case there would be 2^15 two byte pairs. If all are >16#ffff that would add to 2^31, which fits in the 32 bits machine word. > > > Unfortunately the tag-scheme used for Erlang takes some bits from the integers (i think it is 4 bits at the moment, but it is at least 2). With a limited packet size it might be that bignums are created very seldom. >> You could also traverse the binary without creating new sub-binaries, by >> keeping >> track of how many byte-pairs you have seen (N): >> >> >That's something i hadn't think about. Seems a good idea. > > >I'll try it then. Maybe it's fast enough. > > > If you compile to native code with hipe, then method 3 (in my small benchmark file) seems to be the fastest. /Erik From edward.ing@REDACTED Wed Sep 22 05:17:37 2004 From: edward.ing@REDACTED (Edward Ing) Date: Tue, 21 Sep 2004 23:17:37 -0400 Subject: Syntax is throughing my understanding off. Message-ID: <002a01c4a052$b6547fd0$0402a8c0@computer11x1> Hi, I am new to Erlang and I am trying to learn to use it to manipulate XML. I am lookng into the source files and see this definition: '#text#'(Text) -> export_text(Text). I cannot find any reference material to explain what this means, the '#text#'(Text). Obviously it is defining a function, but what is how do you invoke this function? Is '#text#' some kind of macro substitution? Pointers to the correct documentation would be appreciated. From bengt.kleberg@REDACTED Wed Sep 22 07:44:03 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Wed, 22 Sep 2004 07:44:03 +0200 Subject: Syntax is throughing my understanding off. In-Reply-To: <002a01c4a052$b6547fd0$0402a8c0@computer11x1> References: <002a01c4a052$b6547fd0$0402a8c0@computer11x1> Message-ID: <41511123.2030203@ericsson.com> Edward Ing wrote: > Hi, > I am new to Erlang and I am trying to learn to use it to manipulate XML. > I am lookng into the source files and see this definition: > > '#text#'(Text) -> > export_text(Text). > > I cannot find any reference material to explain what this means, the > '#text#'(Text). > > Obviously it is defining a function, but what is how do you invoke this > function? Is '#text#' some kind of macro substitution? 1 you call the function like an ordinary function: '#text#'("a text"). (or F = '#text', F("a text"), etc.) 2 it is not a macro. (macros are accessed with '?' ,ie ?A_MACRO). what is happening is the creation of an _atom_ . atoms are usually small letters, numbers and '_', but they can be anything. you just have to single quote (') them. eg 'This is an atom!' bengt From erlang@REDACTED Wed Sep 22 10:36:23 2004 From: erlang@REDACTED (Peter-Henry Mander) Date: Wed, 22 Sep 2004 09:36:23 +0100 Subject: Traversing a binary In-Reply-To: <4150A71C.5000105@epfl.ch> References: <20040921154626.GA23451@dc.fi.udc.es> <20040921164505.80205.qmail@web41904.mail.yahoo.com> <20040921171917.GA24469@dc.fi.udc.es> <41509479.3080107@bredband.net> <20040921212204.GA27512@dc.fi.udc.es> <4150A71C.5000105@epfl.ch> Message-ID: <20040922093623.4fa6493c.erlang@manderp.freeserve.co.uk> Thanks everyone, Method four is a worthy runner-up, and seems more generic way of parsing binaries too. Thanks for the debate, it's been an eye-opener. Pete. P.s. for the record: 10> c(tc,[native]). {ok,tc} 11> tc:t(). M1: {534026,5355} M2: {502536,5355} M3: {120267,5355} M4: {174551,5355} ok On Wed, 22 Sep 2004 00:11:40 +0200 Erik Stenman wrote: > > >I assume that a bignum is an integer bigger than the word size of the > >machine (Correct me if i'm wrong). I don't think i can have a checksum > >bigger than 4Gb. The biggest packet i may have is 64Kb (Because of ip). > >So, in the worst case there would be 2^15 two byte pairs. If all are > >16#ffff that would add to 2^31, which fits in the 32 bits machine word. > > > > > > > Unfortunately the tag-scheme used for Erlang takes some bits from the > integers (i think it is 4 > bits at the moment, but it is at least 2). > With a limited packet size it might be that bignums are created very seldom. > > >> You could also traverse the binary without creating new sub-binaries, by > >> keeping > >> track of how many byte-pairs you have seen (N): > >> > >> > >That's something i hadn't think about. Seems a good idea. > > > > > > >I'll try it then. Maybe it's fast enough. > > > > > > > If you compile to native code with hipe, then method 3 (in my small > benchmark file) seems to be the fastest. > > /Erik -- "The Tao of Programming flows far away and returns on the wind of morning." From thomasl_erlang@REDACTED Wed Sep 22 10:51:18 2004 From: thomasl_erlang@REDACTED (Thomas Lindgren) Date: Wed, 22 Sep 2004 01:51:18 -0700 (PDT) Subject: Traversing a binary In-Reply-To: <41509479.3080107@bredband.net> Message-ID: <20040922085118.12377.qmail@web41904.mail.yahoo.com> --- Erik Stenman wrote: > You could also traverse the binary without creating > new sub-binaries, by > keeping > track of how many byte-pairs you have seen (N): Nice trick. Perhaps something for a compiler to consider? I can think of two things here: - Adding notation for indexing into binaries (like indexing into arrays), which would just be syntactic sugar for what you're doing above; - Eliminating sub-binaries by replacing their selection with indexing as above ... but done automatically. Something for a high level optimizer perhaps? Best, Thomas __________________________________ Do you Yahoo!? Read only the mail you want - Yahoo! Mail SpamGuard. http://promotions.yahoo.com/new_mail From mikael.karlsson@REDACTED Wed Sep 22 11:29:49 2004 From: mikael.karlsson@REDACTED (Mikael Karlsson) Date: Wed, 22 Sep 2004 11:29:49 +0200 Subject: Migration from Java? In-Reply-To: <87zn3lv4pv.fsf@theasylum.dyndns.org> References: <87zn3lv4pv.fsf@theasylum.dyndns.org> Message-ID: <200409221129.49796.mikael.karlsson@creado.com> Hi Tim, this would be the Erlang applications I would investigate: As front end - Yaws : http://yaws.hyber.org/ for dynamic and static pages. It is a quite capable engine that has been benchmarked for 80000 parallell sessions. See: http://www.sics.se/~joe/apachevsyaws.html For your XML/XSL support you could use xmerl: http://sowap.sourceforge.net/ If you do not need to be XSL standards compliant xmerl has native support for transforms in an XSL:ish fashion: http://www.creado.com/xmerl_xs/index.html otherwise you have a Sablotron adapter: http://www.lfcia.org/projects/sablotron_adapter/ Database: The standard Erlang/OTP distribution comes with an odbc application as well as the Erlang native database Mnesia. See the database folder under: http://www.erlang.org/doc/r9c/doc/index.html If you use http calls to the backend servers the http client in the inets application (which is in Erlang/OTP) supports asynchromous calls. The Yaws webserver also has a reverse proxy. Now it is just to assemble the pieces and start the application :-) Good luck! Mikael Mon 20 Sep 2004 08:23 Tim Lavoie wrote: > Hello all, > > I've stumbled across Erlang fairly recently, and have started reading, > stepping through tutorials and so on. So far, so good! This has been > primarily for my own interest, so far, but I can see where it might > scratch an itch or two for my employer as well. It hasn't been > suggested yet, never mind approved, but I would like to explore the > ways in which Erlang might help, as well as any land mines to avoid. > > Perhaps it would be helpful to describe the current scenario to some > degree, and where I see Erlang being helpful. > > Our current environment is modular, running on a variety of hardware > and operating systems, with a web-based interface. A Java app server > runs the front part, perhaps with a separate web server out in front, > handling static content. The Java app is the main piece I'm involved > with, and it touches everything. XSL templates are used to generate > the pages dynamically, and a relational database is used fairly > extensively. Also, some operations involve passing beefy chunks of XML > to a separate number-crunching server, which can run for minutes on > end. > > I'm not expecting to get anyone to make huge changes any time soon, > but would like to at demonstrate that there are alternatives to some > design choices which might be good to know about. If that helps > improve things down the road, I'm happy. > > My main area of concern tends to be performance, so I have run > repeatedly into areas which could use help. > > First, XSL. I understand now why it was chosen, back in the mists of > time. I don't know that Erlang is able to help directly here, but it > does cause headaches. Even if things stay in Java, there is some hope > that this will go away. It's fine for morphing documents on occasion, > but brutal when generating many large, dynamic pages while someone is > waiting. Incidentally, my boss was the original architect, but took it > well when I ranted unwittingly about this particular ugliness in his > baby. I'm guessing there is hope for future change. > > Now, the main issue as I see it is that scalability is a problem. The > performance woes are less apparent when subjected to few users, and > the application server layer can be scaled with more hardware... given > sufficient will and resources. Still, a few dozen users on this large > app, and the app server is suffering badly. > > One area I can see Erlang's approach helping is with asyncronous I/O, > combined with message passing. Right now, everything effectively > blocks sequentially. Page transitions mean that current state gets > written to the database, though most often this is "just in > case". Similarly, requests needing that back-end number cruncher > essentially tie up the user's browser until it comes back. > > I can see the database writes being implemented as sending the message > to a process which handles the details, with the original web request > then continuing on its way without waiting. This isn't generally an > issue in my performance-test environment, but on client sites, with > different networking and servers, it creates delays. In the case where > the original process needs the result, it could ask for notification > back, and carry on from there. > > The requests to the back-end server(s) are similar, and also block > until done. Some of these requests naturally take longer than others, > so I see Erlang as providing something of a more intelligent > queue. Now, all requests are spawned together, so they slow down if > there are more requests than processors. I'd like to see this as a > queue with a notification back, like the database. Also, since we know > what type of requests take much longer, Erlang's selective receive > mechanism is a natural for giving priority to those which should > return quickly. > > Phew... Sorry, that was long-winded, and I still have questions. > > - Has anyone migrated a large project of this sort? How did it go? > > - Is there some equivalent of Java's JDBC? Relational databases are > pretty much a given, and persistent connection pools are pretty much > required. I have seen mention of ODBC for Erlang; if this does the > trick, particularly from Linux, that's a good start. Targets are the > main RDBMS vendors, on several platforms. > > - Any other suggestions are naturally welcome. > > > Thanks! > Tim Lavoie From rrerlang@REDACTED Wed Sep 22 12:37:29 2004 From: rrerlang@REDACTED (Robert Raschke) Date: Wed, 22 Sep 2004 11:37:29 +0100 Subject: User conference price? Message-ID: <4deec670533bec04aaa7145da4aece74@tombob.com> Hi, I tried sending this to euc@REDACTED, but it came back with 553 5.3.0 ... No such user here Hi, I am considering attending the Erlang User Conference in October. Since I have to fund this privately, I'd like to know how much you are expecting to charge for attending. Also, any information about reasonable accomodation would be very helpful. Thanks, Robby From tim@REDACTED Wed Sep 22 16:38:13 2004 From: tim@REDACTED (Tim Lavoie) Date: Wed, 22 Sep 2004 09:38:13 -0500 Subject: Migration from Java? In-Reply-To: <200409221129.49796.mikael.karlsson@creado.com> (Mikael Karlsson's message of "Wed, 22 Sep 2004 11:29:49 +0200") References: <87zn3lv4pv.fsf@theasylum.dyndns.org> <200409221129.49796.mikael.karlsson@creado.com> Message-ID: <877jqmz7vu.fsf@theasylum.dyndns.org> Hi Mikael, Thanks for the links, they're much appreciated. I have started tinkering with Yaws and Mnesia, but hadn't come across the XML/XSL links yet. The ability to make async, back-end HTTP calls would indeed be useful as well. Now if I could just get some time off to play... Cheers, Tim From matthias@REDACTED Wed Sep 22 17:32:37 2004 From: matthias@REDACTED (Matthias Lang) Date: Wed, 22 Sep 2004 17:32:37 +0200 Subject: User conference price? In-Reply-To: <4deec670533bec04aaa7145da4aece74@tombob.com> References: <4deec670533bec04aaa7145da4aece74@tombob.com> Message-ID: <16721.39701.184541.495545@antilipe.corelatus.se> Robert Raschke writes: > I am considering attending the Erlang User Conference in October. > Since I have to fund this privately, I'd like to know how much you are > expecting to charge for attending. Also, any information about > reasonable accomodation would be very helpful. Bjarne will probably post information about this soon, when he sends out the general invitation. In the meantime, if I recall correctly, the conference fee in previous years was less than 500kr (about 55 Euro). (Three years ago, it was about 1000kr, but that included a fancy dinner and boat tour of the inner archipelago). Last year, there was some discussion on the mailing list about accomodation. The default is the ?lvsj? hotel, in past years there were some rooms reserved there for the conference. ?lvsj? is not exactly a tourist destination, but it's a five minute walk from the conference. A cheaper option is "Hotel Formule 1", which is a 10 minute bus ride away. They have rooms for about 35 Euro. Another option which someone (?) mentioned was Hotell Bema in town. Probably costs twice as much, but a nicer place to stay, especially if you're here for a day or two before or after the conference. Web pages: http://www.hotellalvsjo.nu/eng/index.htm http://www.hotelformule1.com/formule1/fichehotel/gb/for/3065/fiche_hotel.shtml http://www.frommers.com/destinations/stockholm/H26472.html Matthias From edward.ing@REDACTED Thu Sep 23 03:51:08 2004 From: edward.ing@REDACTED (Edward Ing) Date: Wed, 22 Sep 2004 21:51:08 -0400 Subject: Syntax is throughing my understanding off. References: <002a01c4a052$b6547fd0$0402a8c0@computer11x1> <41511123.2030203@ericsson.com> Message-ID: <002001c4a10f$cbf4b590$0402a8c0@computer11x1> Okay, In most programming languages I work with, the name of a function is a 'symbol'. And characters like " ' " are tokens which demarcate a literal in between. Is it the case that erlang evaluating '#text#' to make up the function name symbol? ----- Original Message ----- From: "Bengt Kleberg" To: Sent: Wednesday, September 22, 2004 1:44 AM Subject: Re: Syntax is throughing my understanding off. > Edward Ing wrote: > > Hi, > > I am new to Erlang and I am trying to learn to use it to manipulate XML. > > I am lookng into the source files and see this definition: > > > > '#text#'(Text) -> > > export_text(Text). > > > > I cannot find any reference material to explain what this means, the > > '#text#'(Text). > > > > Obviously it is defining a function, but what is how do you invoke this > > function? Is '#text#' some kind of macro substitution? > > 1 you call the function like an ordinary function: > > '#text#'("a text"). > > (or F = '#text', F("a text"), etc.) > > > 2 it is not a macro. (macros are accessed with '?' ,ie ?A_MACRO). what > is happening is the creation of an _atom_ . atoms are usually small > letters, numbers and '_', but they can be anything. you just have to > single quote (') them. eg 'This is an atom!' > > > bengt From enewhuis@REDACTED Thu Sep 23 06:33:25 2004 From: enewhuis@REDACTED (Eric Newhuis) Date: Wed, 22 Sep 2004 23:33:25 -0500 Subject: Syntax is throughing my understanding off. In-Reply-To: <002001c4a10f$cbf4b590$0402a8c0@computer11x1> Message-ID: The previous response still holds. Erlang needs a hint that the function name is still just an atom like every other function name. There is nothing special about the use of an atom in the function name. The following are equivalent: myfun () -> 0. 'myfun' () -> 0. But because Erlang treats # as a special character you cannot declare an atom in a function declaration starting with the # sign. You must explicitly tell the parser/lexical analyzer that you are feeding it an atom. Atoms are expressed as words beginning with lower case letters or as single-quoted character globs. You'll also see stuff like this from time to time: 'CapitalLetterFunctionName' () -> 0. '$BettingThatNobodyElseThinksOfUsingDollarSignToAvoidGlobalNameConflict'() -> 0. Ciao. Happy Erlanging. On 9/22/04 8:51 PM, "Edward Ing" wrote: > Okay, > > In most programming languages I work with, the name of a function is a > 'symbol'. And characters like " ' " are tokens which demarcate a literal > in between. Is it the case that erlang evaluating '#text#' to make up the > function name symbol? > > ----- Original Message ----- > From: "Bengt Kleberg" > To: > Sent: Wednesday, September 22, 2004 1:44 AM > Subject: Re: Syntax is throughing my understanding off. > > >> Edward Ing wrote: >>> Hi, >>> I am new to Erlang and I am trying to learn to use it to manipulate XML. >>> I am lookng into the source files and see this definition: >>> >>> '#text#'(Text) -> >>> export_text(Text). >>> >>> I cannot find any reference material to explain what this means, the >>> '#text#'(Text). >>> >>> Obviously it is defining a function, but what is how do you invoke this >>> function? Is '#text#' some kind of macro substitution? >> >> 1 you call the function like an ordinary function: >> >> '#text#'("a text"). >> >> (or F = '#text', F("a text"), etc.) >> >> >> 2 it is not a macro. (macros are accessed with '?' ,ie ?A_MACRO). what >> is happening is the creation of an _atom_ . atoms are usually small >> letters, numbers and '_', but they can be anything. you just have to >> single quote (') them. eg 'This is an atom!' >> >> >> bengt From casper2000a@REDACTED Thu Sep 23 10:00:44 2004 From: casper2000a@REDACTED (Casper) Date: Thu, 23 Sep 2004 14:00:44 +0600 Subject: ASN Tcap question In-Reply-To: <019801c49ebf$69684600$a5e14e0a@huawei.com> Message-ID: Dear folks, I compiled TCAPMessage.asn file from ITU-T using Erlang asn1 compiler. It successfully compiled and generated the required files (which I have attached). But I cannot see the encoding/decoding methods for TCMessage, Unidirectional, Begin, End, Continue objects. But there're methods for Abort object. I wonder if this is a problem with the asn1 compiler or I am missing something. Please help. The only difference I see between Begin and Abort specification is Begin is using Information Objects as below Begin{OPERATION:Invokable, OPERATION:Returnable} .. Where as abort is not. Also when I compare 3gpp MAP asn.1 spec and ITU-T Tcap asn.1 specs, they use Information Objects in 2 different ways. 3GPP -> purgeMS OPERATION ::= { --Timer m ARGUMENT PurgeMS-Arg RESULT PurgeMS-Res -- optional ERRORS{ dataMissing | unexpectedDataValue| unknownSubscriber} CODE local:67 } ITU-T -> Begin{OPERATION:Invokable, OPERATION:Returnable} ::= SEQUENCE { otid OrigTransactionID, dialoguePortion DialoguePortion OPTIONAL, components ComponentPortion{{Invokable}, {Returnable}} OPTIONAL } Please advice me what am I missing here. How can I encode a TCAP Begin PDU? Thanks in advance. Eranga -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: TCAPMessages.hrl Type: application/octet-stream Size: 756 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: TCAPMessages.asn Type: application/octet-stream Size: 4128 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: TCAPMessages.erl Type: application/octet-stream Size: 15051 bytes Desc: not available URL: From kenneth@REDACTED Thu Sep 23 10:21:27 2004 From: kenneth@REDACTED (Kenneth Lundin) Date: Thu, 23 Sep 2004 10:21:27 +0200 Subject: [ASN1] ASN Tcap question In-Reply-To: Message-ID: The ASN.1 module TCAPMessages.asn that you provided does only contain definitions of Parameterized Types for what you are interested in. The Parameterized Type vital to your question is TCMessage which must be instantiated in order to get any useful encode/decode functions generated. You must find another standard asn1 module which imports from TCAPMessages and instantiates TCMessage of you have to create a module of your own which performs the instantiation (but there should be some standard module). /Kenneth -----Original Message----- From: asn1-bounces@REDACTED [mailto:asn1-bounces@REDACTED]On Behalf Of Casper Sent: den 23 september 2004 10:01 To: asn1@REDACTED; erlang-questions@REDACTED Subject: [ASN1] ASN Tcap question Dear folks, I compiled TCAPMessage.asn file from ITU-T using Erlang asn1 compiler. It successfully compiled and generated the required files (which I have attached). But I cannot see the encoding/decoding methods for TCMessage, Unidirectional, Begin, End, Continue objects. But there're methods for Abort object. I wonder if this is a problem with the asn1 compiler or I am missing something. Please help. The only difference I see between Begin and Abort specification is Begin is using Information Objects as below Begin{OPERATION:Invokable, OPERATION:Returnable} .. Where as abort is not. Also when I compare 3gpp MAP asn.1 spec and ITU-T Tcap asn.1 specs, they use Information Objects in 2 different ways. 3GPP -> purgeMS OPERATION ::= { --Timer m ARGUMENT PurgeMS-Arg RESULT PurgeMS-Res -- optional ERRORS{ dataMissing | unexpectedDataValue| unknownSubscriber} CODE local:67 } ITU-T -> Begin{OPERATION:Invokable, OPERATION:Returnable} ::= SEQUENCE { otid OrigTransactionID, dialoguePortion DialoguePortion OPTIONAL, components ComponentPortion{{Invokable}, {Returnable}} OPTIONAL } Please advice me what am I missing here. How can I encode a TCAP Begin PDU? Thanks in advance. Eranga -------------- next part -------------- An HTML attachment was scrubbed... URL: From casper2000a@REDACTED Thu Sep 23 13:26:53 2004 From: casper2000a@REDACTED (Casper) Date: Thu, 23 Sep 2004 17:26:53 +0600 Subject: [ASN1] ASN Tcap question In-Reply-To: Message-ID: Hi, Thanks for the reply. Still the thing is not clear to me. I'm new to ASN.1. Could you kindly show me how can I use those Parameterized Type definitions to encode and decode TCAP Messages? Even a sample or document would be greatly appreciated. Thanks! Eranga _____ From: Kenneth Lundin [mailto:kenneth@REDACTED] Sent: Thursday, September 23, 2004 2:21 PM To: Casper; asn1@REDACTED; erlang-questions@REDACTED Subject: RE: [ASN1] ASN Tcap question The ASN.1 module TCAPMessages.asn that you provided does only contain definitions of Parameterized Types for what you are interested in. The Parameterized Type vital to your question is TCMessage which must be instantiated in order to get any useful encode/decode functions generated. You must find another standard asn1 module which imports from TCAPMessages and instantiates TCMessage of you have to create a module of your own which performs the instantiation (but there should be some standard module). /Kenneth -----Original Message----- From: asn1-bounces@REDACTED [mailto:asn1-bounces@REDACTED]On Behalf Of Casper Sent: den 23 september 2004 10:01 To: asn1@REDACTED; erlang-questions@REDACTED Subject: [ASN1] ASN Tcap question Dear folks, I compiled TCAPMessage.asn file from ITU-T using Erlang asn1 compiler. It successfully compiled and generated the required files (which I have attached). But I cannot see the encoding/decoding methods for TCMessage, Unidirectional, Begin, End, Continue objects. But there're methods for Abort object. I wonder if this is a problem with the asn1 compiler or I am missing something. Please help. The only difference I see between Begin and Abort specification is Begin is using Information Objects as below Begin{OPERATION:Invokable, OPERATION:Returnable} .. Where as abort is not. Also when I compare 3gpp MAP asn.1 spec and ITU-T Tcap asn.1 specs, they use Information Objects in 2 different ways. 3GPP -> purgeMS OPERATION ::= { --Timer m ARGUMENT PurgeMS-Arg RESULT PurgeMS-Res -- optional ERRORS{ dataMissing | unexpectedDataValue| unknownSubscriber} CODE local:67 } ITU-T -> Begin{OPERATION:Invokable, OPERATION:Returnable} ::= SEQUENCE { otid OrigTransactionID, dialoguePortion DialoguePortion OPTIONAL, components ComponentPortion{{Invokable}, {Returnable}} OPTIONAL } Please advice me what am I missing here. How can I encode a TCAP Begin PDU? Thanks in advance. Eranga -------------- next part -------------- An HTML attachment was scrubbed... URL: From nick@REDACTED Thu Sep 23 17:14:27 2004 From: nick@REDACTED (Niclas Eklund) Date: Thu, 23 Sep 2004 17:14:27 +0200 (MEST) Subject: Off-line Message-ID: Hello! FYI, erlang.org will be off-line between 09:00 and 16:00 CET tomorrow (moving our servers to a new location). Naturally, one shouldn't forget Murphy's Laws (http://www.fourjokers.co.uk/murphy/): - "If there is a possibility of several things going wrong, the one that will cause the most damage will be the one to go wrong." /Nick From vances@REDACTED Thu Sep 23 18:37:30 2004 From: vances@REDACTED (Vance Shipley) Date: Thu, 23 Sep 2004 12:37:30 -0400 Subject: [ASN1] ASN Tcap question In-Reply-To: References: Message-ID: <20040923163730.GD33629@frogman.motivity.ca> Eranga, Have a look at ITU-T Q.775 Guidelines for using transaction capabilities. It includes ASN.1 examples. You must realize that the purpose of the ASN.1 in the specifications isn't really to give you something you can compile into a working library but in fact to specify the protocols. You will at a minimum need to write some of your own ASN.1 modules to pull it all together. -Vance Vance Shipley Motivity Telecom Inc. vances@REDACTED On Thu, Sep 23, 2004 at 05:26:53PM +0600, Casper wrote: } } Could you kindly show me how can I use those Parameterized Type definitions } to encode and decode TCAP Messages? Even a sample or document would be } greatly appreciated. } } Eranga From erlang-list@REDACTED Thu Sep 23 22:54:27 2004 From: erlang-list@REDACTED (Dominic Williams) Date: Thu, 23 Sep 2004 22:54:27 +0200 Subject: problem with filelib:fold_files/5 In-Reply-To: <20040909080916.3d8212b3.cpressey@catseye.mine.nu> References: <41402223.6070809@ericsson.com> <20040909080916.3d8212b3.cpressey@catseye.mine.nu> Message-ID: Le 9 sept. 04, ? 17:09, Chris Pressey a ?crit : > Not at all, Dominic Williams reported this bug in February: > > http://www.erlang.org/ml-archive/erlang-questions/200402/msg00029.html > > and I reported it a year ago: > > http://www.erlang.org/ml-archive/erlang-questions/200309/msg00198.html Indeed. Here's a patch (there are actually two distinct bugs): 46c46 < ????? {ok, _} -> --- > ????? {ok, #file_info{type=regular}} -> 87c87,89 ???? end; > fold_files([],_,_,_,_,Acc) -> >???? Acc. Cheers, Dominic Williams http://www.dominicwilliams.net ---- Dominic Williams http://www.dominicwilliams.net ---- From casper2000a@REDACTED Fri Sep 24 07:42:20 2004 From: casper2000a@REDACTED (Casper) Date: Fri, 24 Sep 2004 11:42:20 +0600 Subject: [ASN1] ASN Tcap question In-Reply-To: <20040923163730.GD33629@frogman.motivity.ca> Message-ID: Hi Vance/Kenneth, Thanks for the reply/advice. My main problem here is not understanding how to use TCAP or what're the TCMessages I should use. It's the code generated by ASN compiler. I don't know if you could see the code, there're encoding/decoding functions for TC Abort type, but has not generated the encoding/decoding function for TC Begin, TC End, TC Continue, etc. So I guess it's a problem with my knowledge on ASN. I appreciate if somebody could confirm whether the ASN compiler should generate encoding/decoding functions for those types (TC Begin, etc), or it's being generated hidden in some other methods. In other words, how can I encode/decode a TC Begin message using the generated code, for example? Thanks in advance! Best Regards, Eranga -----Original Message----- From: Vance Shipley [mailto:vances@REDACTED] Sent: Thursday, September 23, 2004 10:38 PM To: Casper Cc: asn1@REDACTED; erlang-questions@REDACTED Subject: Re: [ASN1] ASN Tcap question Eranga, Have a look at ITU-T Q.775 Guidelines for using transaction capabilities. It includes ASN.1 examples. You must realize that the purpose of the ASN.1 in the specifications isn't really to give you something you can compile into a working library but in fact to specify the protocols. You will at a minimum need to write some of your own ASN.1 modules to pull it all together. -Vance Vance Shipley Motivity Telecom Inc. vances@REDACTED On Thu, Sep 23, 2004 at 05:26:53PM +0600, Casper wrote: } } Could you kindly show me how can I use those Parameterized Type definitions } to encode and decode TCAP Messages? Even a sample or document would be } greatly appreciated. } } Eranga From raimo@REDACTED Fri Sep 24 09:10:03 2004 From: raimo@REDACTED (Raimo Niskanen) Date: 24 Sep 2004 09:10:03 +0200 Subject: problem with filelib:fold_files/5 References: , <20040909080916.3d8212b3.cpressey@catseye.mine.nu>, Message-ID: That seems to correct the wrong bug, that is, the fix on line 46. The documentation for filelib:is_file/1 says that it should return 'true' iff the file is 'regular' or 'directory', so the test for 'directory' is missing in your fix. Later, however, in filelib:fold_files/6, is_file/1 is used as if it was defined according to your fix, so fold_files/6 also has to be rewritten according to the documented behaviour of is_file/1. I dare not change that strange but documented behaviour. To the next release (or maybe now) I will probably add is_regular/1 to filelib. I think the fix on lines 87 to 89 is correct. erlang-list@REDACTED (Dominic Williams) writes: > Le 9 sept. 04, ? 17:09, Chris Pressey a ?crit : > > > Not at all, Dominic Williams reported this bug in February: > > > > http://www.erlang.org/ml-archive/erlang-questions/200402/msg00029.html > > > > and I reported it a year ago: > > > > http://www.erlang.org/ml-archive/erlang-questions/200309/msg00198.html > > Indeed. > > Here's a patch (there are actually two distinct bugs): > > 46c46 > < ????? {ok, _} -> > --- > > ????? {ok, #file_info{type=regular}} -> > 87c87,89 > --- > >???? end; > > fold_files([],_,_,_,_,Acc) -> > >???? Acc. > > Cheers, > > Dominic Williams > http://www.dominicwilliams.net > ---- > > Dominic Williams > http://www.dominicwilliams.net > ---- > -- / Raimo Niskanen, Erlang/OTP, Ericsson AB From micke@REDACTED Sat Sep 25 10:09:56 2004 From: micke@REDACTED (Michael Fogeborg) Date: Sat, 25 Sep 2004 10:09:56 +0200 Subject: There is an erlang job at T-mobile!!! In-Reply-To: References: <5.1.0.14.1.20030226144907.00b69728@online.no> <5.1.0.14.1.20030226144907.00b69728@online.no> Message-ID: <5.1.0.14.1.20040925100919.00bd9db0@online.no> There is an erlang job at T-mobile!!! http://jobsearch.monster.co.uk/jobsearch.asp?brd=1&cy=UK&brd=1&z=norespage&q=erlang&sort=rv&vw=d From mickael.remond@REDACTED Mon Sep 27 14:58:11 2004 From: mickael.remond@REDACTED (Mickael Remond) Date: Mon, 27 Sep 2004 14:58:11 +0200 Subject: Erlang Eclipse plugin Message-ID: <41580E63.8030900@erlang-fr.org> Hello, I am trying to make the Erlang plug-in work but did not manage to. I have Eclipse 3.0.1. I have downloaded the Eclipse Erlang plugin project but have difficulties building the plugin. I am using erlide2 from the sourceforge CVS. Did someone manage to do it ? Do you have some nive tips to share ? Thank you ! -- Micka?l R?mond http://www.erlang-projects.org/ From vlad_dumitrescu@REDACTED Mon Sep 27 15:31:57 2004 From: vlad_dumitrescu@REDACTED (Vlad Dumitrescu) Date: Mon, 27 Sep 2004 15:31:57 +0200 Subject: Erlang Eclipse plugin References: <41580E63.8030900@erlang-fr.org> Message-ID: Hi, Well, it works for me and it works for Eric (or at least it did). What are your problems? [maybe this discussion belongs on erlide-devel@REDACTED?] regards, Vlad ----- Original Message ----- From: "Mickael Remond" To: Sent: Monday, September 27, 2004 2:58 PM Subject: Erlang Eclipse plugin > Hello, > > I am trying to make the Erlang plug-in work but did not manage to. I have > Eclipse 3.0.1. I have downloaded the Eclipse Erlang plugin project but > have difficulties building the plugin. I am using erlide2 from the > sourceforge CVS. > > Did someone manage to do it ? Do you have some nive tips to share ? > > Thank you ! > > -- > Micka?l R?mond > http://www.erlang-projects.org/ > From gerd@REDACTED Mon Sep 27 16:20:06 2004 From: gerd@REDACTED (Gerd Flaig) Date: Mon, 27 Sep 2004 16:20:06 +0200 Subject: jungerl/lib/dbi/c_src missing files Message-ID: Hi, it seems util.{c,h} are missing in the C driver source directory on Jungerl. Would you be so kind to provide or maybe even add them? Thank you. Goodbyte, Gerd. -- Gerd Flaig Technik gerd@REDACTED Bei Schlund + Partner AG Brauerstra?e 48 D-76135 Karlsruhe Physics is like sex: sure, it may give some practical results, but that's not why we do it. -- Richard Feynman From mickael.remond@REDACTED Mon Sep 27 16:25:23 2004 From: mickael.remond@REDACTED (Mickael Remond) Date: Mon, 27 Sep 2004 16:25:23 +0200 Subject: Erlang Eclipse plugin In-Reply-To: References: <41580E63.8030900@erlang-fr.org> Message-ID: <415822D3.4090005@erlang-fr.org> Vlad Dumitrescu wrote: > Hi, > > Well, it works for me and it works for Eric (or at least it did). > > What are your problems? I first try to put the content of your binary archive in Eclipse plugins directory. But, I get many errors from Eclipse: For example: When creating a new Erlide projet, the wizard is working bu I get "problem encountered while setting project description". When I try to open an Erlang file in the editor, I get an error: Eclipse is not able to load the ErlangEditor Class. I thus tried to import the project into Eclipse and to recompile it (from CVS erlide2). I did not manage to find the right option to compile it (from the build.xml file). The default build.xml target simply generate an out of memory error during compile. > [maybe this discussion belongs on erlide-devel@REDACTED?] Ok. Let's keep on the discussion here. I was not aware that this list was active. Most of the time Sourceforge mailing lists are not very active. Thank you! -- Micka?l R?mond http://www.erlang-projects.org/ From cyberlync@REDACTED Mon Sep 27 19:24:06 2004 From: cyberlync@REDACTED (Eric Merritt) Date: Mon, 27 Sep 2004 10:24:06 -0700 Subject: Erlang Eclipse plugin In-Reply-To: <41580E63.8030900@erlang-fr.org> References: <41580E63.8030900@erlang-fr.org> Message-ID: On Mon, 27 Sep 2004 14:58:11 +0200, Mickael Remond wrote: > Hello, > > I am trying to make the Erlang plug-in work but did not manage to. I > have Eclipse 3.0.1. I have downloaded the Eclipse Erlang plugin project > but have difficulties building the plugin. I am using erlide2 from the > sourceforge CVS. The releases are always very much behind CVS. Its alpha so development moves quickly. Would you mind detailing your errors, or providing your .log file? > Did someone manage to do it ? Do you have some nive tips to share ? > -- I'm a programmer, I don't have to spell correctly; I just have to spell consistently From cyberlync@REDACTED Mon Sep 27 19:25:33 2004 From: cyberlync@REDACTED (Eric Merritt) Date: Mon, 27 Sep 2004 10:25:33 -0700 Subject: Erlang Eclipse plugin In-Reply-To: <415822D3.4090005@erlang-fr.org> References: <41580E63.8030900@erlang-fr.org> <415822D3.4090005@erlang-fr.org> Message-ID: On Mon, 27 Sep 2004 16:25:23 +0200, Mickael Remond wrote: > Vlad Dumitrescu wrote: > > Hi, > > > > Well, it works for me and it works for Eric (or at least it did). > > > > What are your problems? > > I first try to put the content of your binary archive in Eclipse plugins > directory. But, I get many errors from Eclipse: > > For example: When creating a new Erlide projet, the wizard is working bu > I get "problem encountered while setting project description". > When I try to open an Erlang file in the editor, I get an error: Eclipse > is not able to load the ErlangEditor Class. What version of Eclipse are you using? The .log from the .metadata directory of your workspace would be helpfull as well. > I thus tried to import the project into Eclipse and to recompile it > (from CVS erlide2). I did not manage to find the right option to compile > it (from the build.xml file). The default build.xml target simply > generate an out of memory error during compile. > > > [maybe this discussion belongs on erlide-devel@REDACTED?] > > Ok. Let's keep on the discussion here. I was not aware that this list > was active. Most of the time Sourceforge mailing lists are not very active. > > > > Thank you! > > -- > Micka?l R?mond > http://www.erlang-projects.org/ > -- I'm a programmer, I don't have to spell correctly; I just have to spell consistently From olgeni@REDACTED Tue Sep 28 11:49:03 2004 From: olgeni@REDACTED (Jimmy Olgeni) Date: Tue, 28 Sep 2004 11:49:03 +0200 (CEST) Subject: Starting embedded Orber Message-ID: <20040928114112.O39005@server.localdomain.net> Hi, I made an application that requires both Orber and Mnesia. The OTP documentation always uses mnesia:start() and orber:start() in the examples, but I was wondering if I could start the services by listing them in the ".app" file. Mnesia seems to work fine, but Orber just hangs waiting for something. Also, it would not start if it wasn't install()ed before. Calling "i()" gives the following report: Pid Initial Call Heap Reds Msgs Registered Current Function Stack <0.71.0> application_controller:init_start 987 23 0 proc_lib:sync_wait/2 12 <0.72.0> application_master:init/4 377 13 0 application_master:init_loop/4 16 <0.73.0> application_master:start_it/4 377 45 0 proc_lib:sync_wait/2 10 <0.74.0> supervisor:orber/1 233 38 0 orber_sup mnesia_controller:do_wait_for_tab 22 <0.75.0> mnesia_controller:wait_for_tables 233 16 0 mnesia_controller:rec_tabs/4 9 Total 48478 286800 0 698 ... but I couldn't find out what is mnesia_controller:do_wait_for_tab waiting for. Is Orber supposed to start from application files or should I simply add orber:start () to my application's start/0? :-) -- jimmy From ulf.wiger@REDACTED Tue Sep 28 13:15:57 2004 From: ulf.wiger@REDACTED (Ulf Wiger (AL/EAB)) Date: Tue, 28 Sep 2004 13:15:57 +0200 Subject: Starting embedded Orber Message-ID: <37FB7AA6F5F9814FB634A7BF4C35A6F540289B@ESEALNT442.al.sw.ericsson.se> It does seem as if orber were intended to be started from the app file, but you must make sure that it's installed first. Orber will hang waiting for tables, and since you didn't run orber:install() first, it will wait forever (mnesia doesn't volunteer the information that the tables have not been created.) The orber:install/2 function will automatically start mnesia as well, if it isn't already started. This means that you should make sure that mnesia is installed before installing orber. /Uffe > -----Original Message----- > From: owner-erlang-questions@REDACTED > [mailto:owner-erlang-questions@REDACTED]On Behalf Of Jimmy Olgeni > Sent: den 28 september 2004 11:49 > To: erlang-questions@REDACTED > Subject: Starting embedded Orber > > > > Hi, > > I made an application that requires both Orber and Mnesia. The OTP > documentation always uses mnesia:start() and orber:start() in the > examples, but I was wondering if I could start the services > by listing > them in the ".app" file. Mnesia seems to work fine, but Orber just > hangs waiting for something. Also, it would not start if it wasn't > install()ed before. > > Calling "i()" gives the following report: > > Pid Initial Call > Heap Reds Msgs > Registered Current Function Stack > > <0.71.0> application_controller:init_start > 987 23 0 > proc_lib:sync_wait/2 12 > <0.72.0> application_master:init/4 > 377 13 0 > application_master:init_loop/4 16 > <0.73.0> application_master:start_it/4 > 377 45 0 > proc_lib:sync_wait/2 10 > <0.74.0> supervisor:orber/1 > 233 38 0 > orber_sup mnesia_controller:do_wait_for_tab 22 > <0.75.0> mnesia_controller:wait_for_tables > 233 16 0 > mnesia_controller:rec_tabs/4 9 > Total > 48478 286800 0 > 698 > > ... but I couldn't find out what is mnesia_controller:do_wait_for_tab > waiting for. > > Is Orber supposed to start from application files or should I > simply add > orber:start () to my application's start/0? :-) > > -- > jimmy > From nick@REDACTED Tue Sep 28 14:56:56 2004 From: nick@REDACTED (Niclas Eklund) Date: Tue, 28 Sep 2004 14:56:56 +0200 (MEST) Subject: Starting embedded Orber In-Reply-To: <37FB7AA6F5F9814FB634A7BF4C35A6F540289B@ESEALNT442.al.sw.ericsson.se> Message-ID: Hello! Mnesia should always be started before invoking orber:install/1/2; especially if you intend to use a single-node installation (ram_copies). See also chapter 5.1 and 5.2 in Orber's User's Guide. /Nick > It does seem as if orber were intended to be started from the > app file, but you must make sure that it's installed first. > > Orber will hang waiting for tables, and since you didn't run > orber:install() first, it will wait forever (mnesia doesn't > volunteer the information that the tables have not been > created.) > > The orber:install/2 function will automatically start mnesia > as well, if it isn't already started. This means that you should > make sure that mnesia is installed before installing orber. > > /Uffe > > > -----Original Message----- > > From: owner-erlang-questions@REDACTED > > [mailto:owner-erlang-questions@REDACTED]On Behalf Of Jimmy Olgeni > > Sent: den 28 september 2004 11:49 > > To: erlang-questions@REDACTED > > Subject: Starting embedded Orber > > > > > > > > Hi, > > > > I made an application that requires both Orber and Mnesia. The OTP > > documentation always uses mnesia:start() and orber:start() in the > > examples, but I was wondering if I could start the services > > by listing > > them in the ".app" file. Mnesia seems to work fine, but Orber just > > hangs waiting for something. Also, it would not start if it wasn't > > install()ed before. > > > > Calling "i()" gives the following report: > > > > Pid Initial Call > > Heap Reds Msgs > > Registered Current Function Stack > > > > <0.71.0> application_controller:init_start > > 987 23 0 > > proc_lib:sync_wait/2 12 > > <0.72.0> application_master:init/4 > > 377 13 0 > > application_master:init_loop/4 16 > > <0.73.0> application_master:start_it/4 > > 377 45 0 > > proc_lib:sync_wait/2 10 > > <0.74.0> supervisor:orber/1 > > 233 38 0 > > orber_sup mnesia_controller:do_wait_for_tab 22 > > <0.75.0> mnesia_controller:wait_for_tables > > 233 16 0 > > mnesia_controller:rec_tabs/4 9 > > Total > > 48478 286800 0 > > 698 > > > > ... but I couldn't find out what is mnesia_controller:do_wait_for_tab > > waiting for. > > > > Is Orber supposed to start from application files or should I > > simply add > > orber:start () to my application's start/0? :-) > > > > -- > > jimmy From joe@REDACTED Tue Sep 28 17:00:39 2004 From: joe@REDACTED (Joe Armstrong) Date: Tue, 28 Sep 2004 17:00:39 +0200 (CEST) Subject: erlgtk question Message-ID: Hello, I'm trying to port my ex11 widget library to erlgtk. Two questions: 1) any ideas on how to set the background color of a top level widget? 2) failing that how can I add a new command to erlgtk? There is a function gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &color); Which should do what I want but it's not in the library Cheers /Joe From robert.virding@REDACTED Tue Sep 28 23:42:36 2004 From: robert.virding@REDACTED (Robert Virding) Date: Tue, 28 Sep 2004 23:42:36 +0200 Subject: Syntax is throughing my understanding off. References: Message-ID: <00a801c4a5a4$14295850$8200a8c0@Rovir> It's even more basic than that. A function name is an atom. An atom is either a lowercase letter followed by letters, digits and '_'. For example myfun, lotsOfStuff1 or even_more_stuff. or an atom is a single quote ' followed by any characters up to the next single quote. There are rules for entering funny characters in quoted atoms. For example '#text#', 'this is a n atom', or '->'. These rules apply to all atoms, everywhere. Robert ----- Original Message ----- From: "Eric Newhuis" To: "Edward Ing" ; Sent: Thursday, September 23, 2004 6:33 AM Subject: Re: Syntax is throughing my understanding off. > The previous response still holds. > > Erlang needs a hint that the function name is still just an atom like every > other function name. There is nothing special about the use of an atom in > the function name. > > The following are equivalent: > > myfun () -> 0. > > 'myfun' () -> 0. > > > But because Erlang treats # as a special character you cannot declare an > atom in a function declaration starting with the # sign. You must > explicitly tell the parser/lexical analyzer that you are feeding it an atom. > > > > Atoms are expressed as words beginning with lower case letters or as > single-quoted character globs. > > You'll also see stuff like this from time to time: > > 'CapitalLetterFunctionName' () -> 0. > > '$BettingThatNobodyElseThinksOfUsingDollarSignToAvoidGlobalNameConflict'() > -> 0. > > Ciao. Happy Erlanging. > > > On 9/22/04 8:51 PM, "Edward Ing" wrote: > > > Okay, > > > > In most programming languages I work with, the name of a function is a > > 'symbol'. And characters like " ' " are tokens which demarcate a literal > > in between. Is it the case that erlang evaluating '#text#' to make up the > > function name symbol? > > > > ----- Original Message ----- > > From: "Bengt Kleberg" > > To: > > Sent: Wednesday, September 22, 2004 1:44 AM > > Subject: Re: Syntax is throughing my understanding off. > > > > > >> Edward Ing wrote: > >>> Hi, > >>> I am new to Erlang and I am trying to learn to use it to manipulate XML. > >>> I am lookng into the source files and see this definition: > >>> > >>> '#text#'(Text) -> > >>> export_text(Text). > >>> > >>> I cannot find any reference material to explain what this means, the > >>> '#text#'(Text). > >>> > >>> Obviously it is defining a function, but what is how do you invoke this > >>> function? Is '#text#' some kind of macro substitution? > >> > >> 1 you call the function like an ordinary function: > >> > >> '#text#'("a text"). > >> > >> (or F = '#text', F("a text"), etc.) > >> > >> > >> 2 it is not a macro. (macros are accessed with '?' ,ie ?A_MACRO). what > >> is happening is the creation of an _atom_ . atoms are usually small > >> letters, numbers and '_', but they can be anything. you just have to > >> single quote (') them. eg 'This is an atom!' > >> > >> > >> bengt > > > From casper2000a@REDACTED Wed Sep 29 14:07:45 2004 From: casper2000a@REDACTED (Casper) Date: Wed, 29 Sep 2004 18:07:45 +0600 Subject: ASN.1 Parameterized Types... pls help In-Reply-To: <20040923163730.GD33629@frogman.motivity.ca> Message-ID: Hi All, I'm finding difficult in absorbing "How to use ASN.1 TCAPMessage to transport GSM MAP". The problem is how to generate TCAP Begin, Continue, End, etc messages. I read about the ASN.1 Parameterized Type, but still I could find the match of ASN.1 specs for MAP and TCAP. I thought below might be the way, but still that gives some compilation errors. mapSpecificAS ABSTRACT-SYNTAX ::= { MapSpecificPDUs IDENTIFIED BY gsm-MessagingId } MapSpecificPDUs ::= TCMessage{{ MAPOperations-Invokable}, { MAPOperations-Returnable}} MAPOperations-Invokable OPERATION ::= {sendRoutingInfoForSM | mo-ForwardSM | mt-ForwardSM} MAPOperations-Returnable OPERATION ::= {reportSM-DeliveryStatus | alertServiceCentre | informServiceCentre | readyForSM} The error is as below (Erlang ASN.1 compiler), {error,{asn1,[{error,{type,57, 'TCAPMessages', 'MapSpecificPDUs', {asn1,{duplicates_of_the_tags, [{'UNIVERSAL','INTEGER'}]}}}}]}} For your information, I have attached TCAPMessages.asn and MAP-ShortMessageServiceOperations.asn. I appreciate if anybody out there can give me some clue to solve this problem. Thanks in advance! Eranga -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: TCAPMessages.asn Type: application/octet-stream Size: 5641 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: MAP-ShortMessageServiceOperations.asn Type: application/octet-stream Size: 3140 bytes Desc: not available URL: From mats.cronqvist@REDACTED Wed Sep 29 14:12:29 2004 From: mats.cronqvist@REDACTED (mats cronqvist) Date: Wed, 29 Sep 2004 14:12:29 +0200 Subject: erlgtk question In-Reply-To: References: Message-ID: gtk_widget_modify_fg is gtk 2.0 (erlgtk is based on gtk 1.2). i think you should use gtk:widget_modify_style and (erlgtk-specific) gtk:rc_style_put_fg mats > > Hello, > > I'm trying to port my ex11 widget library to erlgtk. > > Two questions: > > 1) any ideas on how to set the background color of a top level widget? > > 2) failing that how can I add a new command to erlgtk? > > There is a function > > gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &color); > > Which should do what I want but it's not in the library > > Cheers > > /Joe From mats.cronqvist@REDACTED Wed Sep 29 16:39:20 2004 From: mats.cronqvist@REDACTED (mats cronqvist) Date: Wed, 29 Sep 2004 16:39:20 +0200 Subject: line oriented input, is there an alternative to the io module? In-Reply-To: <414AD811.90709@ericsson.com> References: <414AD811.90709@ericsson.com> Message-ID: On Fri, 17 Sep 2004 14:26:57 +0200, Bengt Kleberg wrote: > if i want to (quickly) read the integers in a file, line by line, is > there a faster alternative to > io:fread( '', "~d" ) using file:read can be quite a bit faster. i wrote something called bio (for block io) that has an interface similar to lists:foldl; bio:string(Filename, Function, Accumulator) will open Filename and call Function for each line in the file. Function is a fun with arguments (String,Acc) that returns NewAcc, String is a line of text. if FN is a textfile that contains 10,000 lines with one integer on each line, this; bio:string(FN,fun(T,A)->[list_to_integer(T)|A] end,[]) is about 10 times faster than something similar using io:fread. mats %%%------------------------------------------------------------------- %%% File : bio.erl %%% Author : Mats Cronqvist %%% Description : block io %%% %%% Created : 13 Mar 2003 by Mats Cronqvist %%%------------------------------------------------------------------- -module(bio). -export([string/3,term/3]). -define(BLOCK, 8092). string(FN, Fun, Acc) -> Bfun = fun(_, O) -> {ok, lists:reverse(O)} end, in(FN, Fun, Acc, Bfun). term(FN, Fun, Acc) -> Bfun = fun(C, O) -> to_term(C, lists:reverse([10|O])) end, in(FN, Fun, Acc, Bfun). in(FN, Fun, Acc, Bfun) -> case file:open(FN, [read, raw]) of {ok, FD} -> R = in(FD, file:read(FD, ?BLOCK), Fun, Bfun, {[], [], Acc}), file:close(FD), R; {error,R} -> exit({open_error, R, FN}) end. in(FD, eof, Fun, Bfun, {Cont, [], Acc}) -> Acc; in(FD, eof, Fun, Bfun, {Cont, O, Acc}) -> case Bfun(Cont, O) of {ok, Term} -> Fun(Term, Acc); {cont, NCont} -> exit({incomplete_input, NCont}) end; in(FD, {ok, List}, Fun, Bfun, State) -> in(FD, file:read(FD, ?BLOCK), Fun, Bfun, do(List, Fun, Bfun, State)). do([], Fun, Bfun, State) -> State; do([13,10|R], Fun, Bfun, {Cont, O, Acc}) -> %dos... do([10|R], Fun, Bfun, {Cont, O, Acc}); do([10|R], Fun, Bfun, {Cont, O, Acc}) -> case Bfun(Cont, O) of {cont, NCont} -> do(R, Fun, Bfun, {NCont, [], Acc}); {ok, Term} -> do(R, Fun, Bfun, {[], [], Fun(Term, Acc)}) end; do([H|R], Fun, Bfun, {Cont, O, Acc}) -> do(R, Fun, Bfun, {Cont, [H|O], Acc}). to_term(Cont, Str) -> case catch erl_scan:tokens(Cont, Str, 1) of {done, {ok, Toks, _}, []} -> case catch erl_parse:parse_term(Toks) of {ok, Term} -> {ok, Term}; {error, R} -> exit({parser_failed, R, Str}) end; {more, Ncont} -> {cont, Ncont}; _ -> exit({scanner_failed, Str}) end. From hal@REDACTED Wed Sep 29 17:21:28 2004 From: hal@REDACTED (Hal Snyder) Date: Wed, 29 Sep 2004 10:21:28 -0500 Subject: when to add a process [and plug for Erlang Workshop] Message-ID: <87brfpw16v.fsf@ghidra.vail> This is a note to indicate how much I enjoyed the Erlang Workshop at Snowbird last week. It was great to meet Erlang experts, learn of new developments, and exchange ideas. Just a few examples: HiPE on AMD64, Joe's EX11 GUI, a demo of the Dialyzer catching errors in Erlang code, and the SSH2 protocol in Erlang. Jay Nelson's talk, "Structured Programming Using Processes", made me wonder - when is it a good idea to create a new Erlang process? Here are a couple cases: 1. Tracking state - any state machine, whether coded with the OTP behavior or not. Protocol drivers are classic examples. Another example is tracking which of several external redundant resources is to be used in a high availability setting. (Of course everything is an fsm at some level, but there is a practical principle here as well.) 2. Serializing access to a resource. 3. Monitoring an external Unix process (Erlang port). From bengt.kleberg@REDACTED Wed Sep 29 17:43:00 2004 From: bengt.kleberg@REDACTED (Bengt Kleberg) Date: Wed, 29 Sep 2004 17:43:00 +0200 Subject: file:read/2 on stdin? Message-ID: <415AD804.8040805@ericsson.com> greetings, is there a way to use file:read/2 to read 1 character from stdin? i have tried file:read( standard_io, 1). i got {error, einval}. i used the atom standard_io since the io module will allow it as a Io_Device. in this case, ie in another module, it did not work. it has been most intelligently suggested to me that i should use file:read/2 to get faster line oriented io. (background: i asked about a faster alternative to io:fread/2 some time ago). this is faster for regular files. but in this case (see http://shootout.alioth.debian.org/bench/sumcol, ''About this test'' as to why i read from stdin) it have trouble using it. suggestions anyone? it is ok to point me to where ericsson has the source code to the file module. bengt From ulf.wiger@REDACTED Wed Sep 29 17:51:50 2004 From: ulf.wiger@REDACTED (Ulf Wiger (AL/EAB)) Date: Wed, 29 Sep 2004 17:51:50 +0200 Subject: when to add a process [and plug for Erlang Workshop] Message-ID: <37FB7AA6F5F9814FB634A7BF4C35A6F54028A3@ESEALNT442.al.sw.ericsson.se> One way to look at processes, that may seem simplistic at first, is: - too few processes will complicate your state machine logic - too many processes may add delays & overhead and/or complicate your error handling It is _very_ important to avoid multiplexing several state machine instances in one process. Whatever you think you'll gain by doing so, it is not worth it. I'm working on a tutorial to illustrate this. A related point is: don't use the OTP behaviours gen_server or gen_fsm for anything but very simple state machines (a stateless server is the simplest possible state machine ;-) I agree with the verdict on the workshop. It was quite pleasant. Richard Carlsson's talk on exception handling was very good, explaining the pitfalls of the current exception handling in Erlang, and describing an upcoming framework that looks very promising. John Hughes gets bonus points for giving the obligatory type checker talk, but succeeding in explaining why it is so difficult to design a static type checker for Erlang. (: Daniel Shutte keeps conquering the third world with Erlang. I've never made the connection that banking and lotteries would be essentially the same thing. (: I hesitate to draw the analogy any further... /Uffe > -----Original Message----- > From: owner-erlang-questions@REDACTED > [mailto:owner-erlang-questions@REDACTED]On Behalf Of Hal Snyder > Sent: den 29 september 2004 17:21 > To: erlang-questions@REDACTED > Subject: when to add a process [and plug for Erlang Workshop] > > > This is a note to indicate how much I enjoyed the Erlang Workshop at > Snowbird last week. It was great to meet Erlang experts, learn of new > developments, and exchange ideas. > > Just a few examples: HiPE on AMD64, Joe's EX11 GUI, a demo of the > Dialyzer catching errors in Erlang code, and the SSH2 protocol in > Erlang. > > > Jay Nelson's talk, "Structured Programming Using Processes", made me > wonder - when is it a good idea to create a new Erlang process? > Here are a couple cases: > > 1. Tracking state - any state machine, whether coded with the OTP > behavior or not. Protocol drivers are classic examples. Another > example is tracking which of several external redundant resources is > to be used in a high availability setting. (Of course everything is an > fsm at some level, but there is a practical principle here as well.) > > 2. Serializing access to a resource. > > 3. Monitoring an external Unix process (Erlang port). > From jamesh@REDACTED Wed Sep 29 18:29:25 2004 From: jamesh@REDACTED (James Hague) Date: Wed, 29 Sep 2004 11:29:25 -0500 Subject: when to add a process [and plug for Erlang Workshop] Message-ID: >Jay Nelson's talk, "Structured Programming >Using Processes", made me wonder - when is >it a good idea to create a new Erlang process? >Here are a couple cases: 4. Recovering from errors - when it is possible for a sub-part of the overall program to fail and not take down the entire system. If there's one process per window in a GUI-driven application, then a bug can only take down one window, not all of them (provided that the error handling is done correctly!). Or in a video game a bug in the logic for one creature would at worst "crash" that creature, but the entire game doesn't have to crash. During development, there's benefit in being able to at least partially run unstable applications. From bjarne@REDACTED Wed Sep 29 20:29:11 2004 From: bjarne@REDACTED (=?iso-8859-1?Q?Bjarne_D=E4cker?=) Date: Wed, 29 Sep 2004 20:29:11 +0200 Subject: when to add a process [and plug for Erlang Workshop] References: <87brfpw16v.fsf@ghidra.vail> Message-ID: <001c01c4a652$3ba95a20$7c1069d4@segeltorp> Some phots from the workshop can be seen here http://www.erlang.se/workshop/2004/photos/ Bjarne ----- Original Message ----- From: "Hal Snyder" To: Sent: Wednesday, September 29, 2004 5:21 PM Subject: when to add a process [and plug for Erlang Workshop] > This is a note to indicate how much I enjoyed the Erlang Workshop at > Snowbird last week. It was great to meet Erlang experts, learn of new > developments, and exchange ideas. > > Just a few examples: HiPE on AMD64, Joe's EX11 GUI, a demo of the > Dialyzer catching errors in Erlang code, and the SSH2 protocol in > Erlang. > > > Jay Nelson's talk, "Structured Programming Using Processes", made me > wonder - when is it a good idea to create a new Erlang process? > Here are a couple cases: > > 1. Tracking state - any state machine, whether coded with the OTP > behavior or not. Protocol drivers are classic examples. Another > example is tracking which of several external redundant resources is > to be used in a high availability setting. (Of course everything is an > fsm at some level, but there is a practical principle here as well.) > > 2. Serializing access to a resource. > > 3. Monitoring an external Unix process (Erlang port). From casper2000a@REDACTED Thu Sep 30 11:55:30 2004 From: casper2000a@REDACTED (Casper) Date: Thu, 30 Sep 2004 15:55:30 +0600 Subject: ASN.1 Parameterized Types... pls help Message-ID: Hi All, I'm finding difficult in absorbing "How to use ASN.1 TCAPMessage to transport GSM MAP". The problem is how to generate TCAP Begin, Continue, End, etc messages. I read about the ASN.1 Parameterized Type, but still I could find the match of ASN.1 specs for MAP and TCAP. I thought below might be the way, but still that gives some compilation errors. mapSpecificAS ABSTRACT-SYNTAX ::= { ? MapSpecificPDUs ? IDENTIFIED BY? gsm-MessagingId } MapSpecificPDUs ::= ? TCMessage{{ MAPOperations-Invokable}, { MAPOperations-Returnable}} MAPOperations-Invokable OPERATION ::= ????? {sendRoutingInfoForSM | mo-ForwardSM | mt-ForwardSM} MAPOperations-Returnable OPERATION ::= ????? {reportSM-DeliveryStatus | alertServiceCentre | informServiceCentre | readyForSM} The error is as below (Erlang ASN.1 compiler), ????? {error,{asn1,[{error,{type,57, ?????????????????????????? 'TCAPMessages', ?????????????????????????? 'MapSpecificPDUs', ?????????????????????????? {asn1,{duplicates_of_the_tags, ???????????????????????????????????? [{'UNIVERSAL','INTEGER'}]}}}}]}} For your information, I have attached TCAPMessages.asn and MAP-ShortMessageServiceOperations.asn. I appreciate if anybody out there can give me some clue to solve this problem. Thanks in advance! Eranga -------------- next part -------------- A non-text attachment was scrubbed... Name: TCAPMessages.asn Type: application/octet-stream Size: 5641 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: MAP-ShortMessageServiceOperations.asn Type: application/octet-stream Size: 3140 bytes Desc: not available URL: From damien_kakpo@REDACTED Thu Sep 30 12:36:16 2004 From: damien_kakpo@REDACTED (Damien Kakpo) Date: Thu, 30 Sep 2004 12:36:16 +0200 (CEST) Subject: sending SMS Message-ID: <20040930103616.78619.qmail@web25408.mail.ukl.yahoo.com> Greetings to erlang developpers ! I'm a erlang beginner . My first goal is to send a SMS within a erlang program ? Are there somebody to point me to a function a module or a source code that can help me to ? Damien from C?te d'Ivoire ! --------------------------------- Cr?ez gratuitement votre Yahoo! Mail avec 100 Mo de stockage ! Cr?ez votre Yahoo! Mail Le nouveau Yahoo! Messenger est arriv? ! D?couvrez toutes les nouveaut?s pour dialoguer instantan?ment avec vos amis.T?l?chargez GRATUITEMENT ici ! -------------- next part -------------- An HTML attachment was scrubbed... URL: From serge@REDACTED Thu Sep 30 14:32:14 2004 From: serge@REDACTED (Serge Aleynikov) Date: Thu, 30 Sep 2004 08:32:14 -0400 Subject: Interoperability examples Message-ID: <415BFCCE.4020508@hq.idt.net> Hi! I've been trying to locate the sample sources mentioned in the "Interoperability Tutorial" of Erlang documentation without any success. Do they get installed separately? I have R9C-0 installed and otp_html_R9C-0.tar.gz, but still cannot locate the following files: port_driver.c complex.c complex5.erl Could you point me where to look? Thanks, Serge From erlang@REDACTED Thu Sep 30 14:46:46 2004 From: erlang@REDACTED (Inswitch Solutions - Erlang Evaluation) Date: Thu, 30 Sep 2004 10:46:46 -0200 Subject: Linking two Pids of nodes that are in the same machine - noconnection signal! Message-ID: <00ed01c4a6eb$b18e12a0$1e00a8c0@design> The attached code links to pids of nodes that are in the same machine and I don't know why I receive a noconnection signal when the LAN cable is disconnected. This does no happen when running the code with the LAN cable disconnected and connecting/disconnecting it later. If someone wants to give a try, I send a code to test this situation and you should modify on node1.erl the blue text line below: {node2Pid, node2@REDACTED} ! {self()}, with the corresponding machine name where you will run it. On the same machine do the following: 1 - "erl -sname node2" 2 - "node2:start()." 2 - "erl -sname node1" 3 - "node1:start()." 4 - The pid is linked and a message is shown on node1. 5 - node2Pid shows a message every 1 sec while checking the queue message 6 - node1 process loops checking the queue message 7 - Disconnect LAN cable 8 - node2Pid receives a noconnection signal 9 - node1 process receives an {'EXIT',Pid,noconnection} - When linking Pids of different nodes that are in the same machine why do I receive a "noconnection" signal? - Having the LAN cable disconnected and doing steps 1..6 8..9, if I connect/disconnect the LAN cable the "noconnection" signal is never received (correct behaviour). - If in the source code I do not use "process_flag(trap_exit, true)," the processes terminate, why is this happenning as no kill signal is sent? thanks in advance, Eduardo Figoli INSwitch Solutions -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: node2.erl Type: application/octet-stream Size: 569 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: node1.erl Type: application/octet-stream Size: 498 bytes Desc: not available URL: From mpquique@REDACTED Thu Sep 30 14:47:29 2004 From: mpquique@REDACTED (Enrique Marcote =?iso-8859-1?q?Pe=F1a?=) Date: Thu, 30 Sep 2004 14:47:29 +0200 Subject: sending SMS In-Reply-To: <20040930103616.78619.qmail@web25408.mail.ukl.yahoo.com> References: <20040930103616.78619.qmail@web25408.mail.ukl.yahoo.com> Message-ID: <200409301447.29564.mpquique@udc.es> On Thursday 30 September 2004 12:36, Damien Kakpo wrote: > Greetings to erlang developpers ! > I'm a erlang beginner . > My first goal is to send a SMS within a erlang program ? > Are there somebody to point me to a function a module or a source code that > can help me to ? Damien from C?te d'Ivoire ! > > > > --------------------------------- > Cr?ez gratuitement votre Yahoo! Mail avec 100 Mo de stockage ! > Cr?ez votre Yahoo! Mail > > Le nouveau Yahoo! Messenger est arriv? ! D?couvrez toutes les nouveaut?s > pour dialoguer instantan?ment avec vos amis.T?l?chargez GRATUITEMENT ici ! Hi Damien, If you are planning to use SMPP to connect to your SMSC you may want to take a loot at: http://oserl.sourceforge.net/ EMI UCP is on the way and should be finished by November. Best regards, -- Quique http://www.des.udc.es/~mpquique/ From serge@REDACTED Thu Sep 30 15:01:39 2004 From: serge@REDACTED (Serge Aleynikov) Date: Thu, 30 Sep 2004 09:01:39 -0400 Subject: Interoperability examples In-Reply-To: <415BFCCE.4020508@hq.idt.net> References: <415BFCCE.4020508@hq.idt.net> Message-ID: <415C03B3.3010104@hq.idt.net> Sorry for bothering. The machine I was looking at didn't have the otp_html_R9C-0.tar.gz untar'd. The files are in: doc/tutorial/ Serge Aleynikov wrote: > Hi! > > I've been trying to locate the sample sources mentioned in the > "Interoperability Tutorial" of Erlang documentation without any success. > Do they get installed separately? I have R9C-0 installed and > otp_html_R9C-0.tar.gz, but still cannot locate the following files: > > port_driver.c > complex.c > complex5.erl > > Could you point me where to look? > > Thanks, > > Serge From bjarne@REDACTED Thu Sep 30 18:40:22 2004 From: bjarne@REDACTED (=?Windows-1252?Q?Bjarne_D=E4cker?=) Date: Thu, 30 Sep 2004 18:40:22 +0200 Subject: Welcome to Erlang User Conference 2004 Message-ID: <000801c4a710$5d322820$750c69d4@segeltorp> All Erlang users, developers, researchers, enthusiasts and other interested people are most heartily welcome to the 10th International Erlang/OTP User Conference in Stockholm on October 21 http://www.erlang.se/euc/04/ Please mail your registration to euc@REDACTED also stating possible affiliation, home town and country. Please say also whether you like to join the (kindly sponsored) ErLounge in the evening following the event. Best wishes and see you at EUC Bjarne -------------- next part -------------- An HTML attachment was scrubbed... URL: From mickael.remond@REDACTED Thu Sep 30 19:29:20 2004 From: mickael.remond@REDACTED (Mickael Remond) Date: Thu, 30 Sep 2004 19:29:20 +0200 Subject: when to add a process [and plug for Erlang Workshop] In-Reply-To: <001c01c4a652$3ba95a20$7c1069d4@segeltorp> References: <87brfpw16v.fsf@ghidra.vail> <001c01c4a652$3ba95a20$7c1069d4@segeltorp> Message-ID: <415C4270.4070605@erlang-fr.org> Bjarne D?cker wrote: > Some phots from the workshop can be seen here > > http://www.erlang.se/workshop/2004/photos/ Do you know if there are any plan to publish the proceedings on the Web ? -- Micka?l R?mond http://www.erlang-projects.org/