From cvrincea@REDACTED Wed Dec 1 15:33:24 1999 From: cvrincea@REDACTED (Costel Vrinceanu [4692]) Date: Wed, 1 Dec 1999 06:33:24 -0800 (PST) Subject: IG withdrawen ? Message-ID: <199912011433.GAA03818@taurus.glenvan.glenayre.com> Was IG phased out? It seemed a convenient way to maintain a single source of data type definitions for both E and C worlds. Was there a reason to take it out? Thanks costel From ebernard@REDACTED Wed Dec 1 23:52:36 1999 From: ebernard@REDACTED (Emmanuelle BERNARD) Date: Wed, 01 Dec 1999 23:52:36 +0100 Subject: inet_dns module Message-ID: <3845A6B4.60941703@email.enst.fr> Hi, I would like to use the functions encode and decode of the inet_dns module How to use them? The little program : """""""""""""""""""""""""""""""""""""""""""""""""""" -module(i). -export([test/0]). test()-> Var={dns_rec,{dns_header,10,0,0,0,0,1,0,0,0},[{dns_query,"ada.eu.org",a,in}],[],[],[]}, io:format("~p~n", [Var]), Packet=inet_dns:encode(Var), io:format("~p~n", [Packet]), Result=inet_dns:decode(Packet), io:format("~p~n", [Result]). """"""""""""""""""""""""""""""""""""""""""""""" returns me: ######################################## 3> c(i). {ok,i} 4> i:test(). {dns_rec,{dns_header,10,0,0,0,0,1,0,0,0}, [{dns_query,"ada.eu.org",a,in}], [], [], []} {ok,[0,10,1,0,0,1,0,0,0,0,0,0,3,97,100,97,2,101,117,3,111,114,103,0,0,1,0,1]} {error,fmt} ok ###################################### Why is there a format error? Should I use binary_to_list(Data) or list_to_binary(Data) anywhere? Thanks, Emmanuelle From Pekka.Hedqvist@REDACTED Thu Dec 2 00:11:52 1999 From: Pekka.Hedqvist@REDACTED (Pekka.Hedqvist@REDACTED) Date: Thu, 2 Dec 1999 10:11:52 +1100 (EST) Subject: inet_dns module In-Reply-To: <3845A6B4.60941703@email.enst.fr> References: <3845A6B4.60941703@email.enst.fr> Message-ID: <14405.43832.914274.53696@eddieware.eddieware.org> You can find some good examples of usage of the inet_dns module in the load balancing dns implementation of Eddie, an open source project at http://www.eddieware.org. From vances@REDACTED Thu Dec 2 00:40:38 1999 From: vances@REDACTED (Vance Shipley) Date: Wed, 1 Dec 1999 18:40:38 -0500 Subject: Porting R6B to Unixware Message-ID: I have just completed my initial port of R6B-0 to SCO Unixware v2.1.3. Below are the steps neccesary to make it compile. You will also have to install the BSD Compatibility (bsdcompat) and Graphics Development (dtxtdev) packages. The later is needed for the X11 header files. -Vance 1) In ./erts/autoconf/i386-univel-sysv4.2MP/config.h: Undefine HAVE_IEEE_HANDLER (Note: Unixware requires the header file In the last release just adding this define to sys.c worked but now there are additional complications. By undefining HAVE_IEEE_HANDLER you disable support for the floating point signals altogether ) 2) In ./lib/erl_interface/src/i386-univel-sysv4.2MP/Makefile: Add -DNO_PRAGMA_WEAK to CFLAGS (Note: The configure script should handle this and does in fact define NO_PRAGMA_WEAK in config.h however it doesn't seem to get used. The linker will complain unless you include this ) 3) In ./lib/gs/c_src/lib/tcl7.6/compat/strncasecmp.c at line 66: Fix broken prototype. Change: int strcasecmp _ANSI_ARGS_((CONST char *s1, CONST char *s2, size_t n)); to: int strcasecmp _ANSI_ARGS_((CONST char *s1, CONST char *s2)); (Note: This is simply a mistake which apparently doesn't show up in other ports. ) 3) In ./lib/etk/c_src/etk_drv.c at line 49: Add an include for synch.h: #if defined(POSIX_THREADS) #include typedef pthread_t THREAD_T; typedef pthread_mutex_t LOCK_T; #elif defined(SOLARIS_THREADS) #include + #include typedef thread_t THREAD_T; typedef mutex_t LOCK_T; (Note: Unixware threads are very much like Solaris threads but require the synch.h header file. ) -------------------------------------------------------------------------------- ---------------------- From vances@REDACTED Thu Dec 2 03:54:34 1999 From: vances@REDACTED (Vance Shipley) Date: Wed, 1 Dec 1999 21:54:34 -0500 Subject: net_adm:names failing (still) In-Reply-To: Message-ID: Unfortunately the newest release doesn't solve my problem with net_adm:names() failing under Unixware. :( It's the strangest thing. The epmd server on the Unixware machine can dish out responses to WinNT, Solaris, etc. but the Unixware client side can't get answers from any of these machines. To debug I changed erl_epmd.erl as: do_get_names(Socket) -> inet_tcp:send(Socket, [?int16(1),?EPMD_NAMES]), receive % {tcp, Socket, [P0,P1,P2,P3|T]} -> % EpmdPort = ?u32(P0,P1,P2,P3), % if EpmdPort == ?erlang_daemon_port -> % names_loop(Socket, T, []); % true -> % close(Socket), % {error, address} % end; % {tcp_closed, Socket} -> % {ok, []} Stuff -> Stuff end. Now I get tcp_closed consistantly: (foo@REDACTED)1> net_adm:names(). {tcp_closed,{socket,<0.42.0>,#Port<0.13>,inet_tcp}} The really strange thing is that I can make it work by putting a sleep(1) into the epmd server after it sends the response. I've been banging my head against the desk for quite some time but I can't see where this is going wrong. Any ideas? -Vance From magnus@REDACTED Thu Dec 2 08:19:32 1999 From: magnus@REDACTED (Magnus =?iso-8859-1?Q?Fr=F6berg?=) Date: Thu, 02 Dec 1999 08:19:32 +0100 Subject: inet_dns module References: <3845A6B4.60941703@email.enst.fr> Message-ID: <38461D84.2B9D35E6@bluetail.com> Emmanuelle BERNARD wrote: > > Hi, > > I would like to use the functions encode and decode of the inet_dns > module > How to use them? > > The little program : > """""""""""""""""""""""""""""""""""""""""""""""""""" > -module(i). > -export([test/0]). > > test()-> > > Var={dns_rec,{dns_header,10,0,0,0,0,1,0,0,0},[{dns_query,"ada.eu.org",a,in}],[],[],[]}, > > io:format("~p~n", [Var]), > Packet=inet_dns:encode(Var), > io:format("~p~n", [Packet]), > Result=inet_dns:decode(Packet), > io:format("~p~n", [Result]). > """"""""""""""""""""""""""""""""""""""""""""""" > > > Why is there a format error? inet_dns:encode returns {ok, P}, i.e. you should match that tuple. As you supplies {ok, P} to inet_dns:decode/1 you got the {error, fmt}. ... {ok, Pkt} = inet_dns:encode(Var), Result = inet_dns:decode(Pkt), ... Instead of creating the dns_rec tuple you should include inet_dns.hrl and use the record definitions. You have to include it as: -include("$ERL/lib/kernel-$KERNEL_VSN/src/inet_dns.hrl") as the inet_dns module was not intended for use outside the kernel application (e.g. you cant find a man-page for it). (Note: $ERL above is your erlang install directory and $KERNEL_VSN is the version of the kernel application in your installation) /Magnus -- Magnus Fr?berg Tel: +46 (0)8 692 22 06 Bluetail AB Email: magnus@REDACTED Hantverkargatan 78 WWW: http://www.bluetail.com SE-112 38 Stockholm, SWEDEN From per@REDACTED Thu Dec 2 10:06:13 1999 From: per@REDACTED (Per Hedeland) Date: Thu, 2 Dec 1999 10:06:13 +0100 (MET) Subject: net_adm:names failing (still) Message-ID: <199912020906.KAA18731@super.du.uab.ericsson.se> >Unfortunately the newest release doesn't solve my problem >with net_adm:names() failing under Unixware. :( Hmmm, does $ERL_TOP/bin/--/epmd -names work? --Per Hedeland per@REDACTED From gunilla@REDACTED Thu Dec 2 11:56:44 1999 From: gunilla@REDACTED (Gunilla Hugosson) Date: Thu, 02 Dec 1999 11:56:44 +0100 Subject: IG withdrawen ? References: <199912011433.GAA03818@taurus.glenvan.glenayre.com> Message-ID: <3846506C.903E7E@erix.ericsson.se> Yes, IG has been phased out. It has been replaced by IC which was introduced in OTP R4B (released last year). IC is an IDL compiler which compared to IG: * uses a standardized way of describing the interface. (IDL) * is able to generate not only Erlang-C interfaces, but also Erlang-Java and Erlang-Corba (and Erlang-Erlang) interfaces. / Gunilla "Costel Vrinceanu [4692]" wrote: > > Was IG phased out? > It seemed a convenient way to maintain a single source of data type > definitions for both E and C worlds. > Was there a reason to take it out? > > Thanks > costel From etxuwig@REDACTED Thu Dec 2 11:58:09 1999 From: etxuwig@REDACTED (Ulf Wiger) Date: Thu, 2 Dec 1999 11:58:09 +0100 (MET) Subject: inet_dns module In-Reply-To: <38461D84.2B9D35E6@bluetail.com> Message-ID: On Thu, 2 Dec 1999, Magnus Fr?berg wrote: magnus>Instead of creating the dns_rec tuple you should include magnus>inet_dns.hrl and use the record definitions. You have to magnus>include it as: magnus>-include("$ERL/lib/kernel-$KERNEL_VSN/src/inet_dns.hrl") as magnus>the inet_dns module was not intended for use outside the magnus>kernel application (e.g. you cant find a man-page for it). magnus>(Note: $ERL above is your erlang install directory and magnus>$KERNEL_VSN is the version of the kernel application in your magnus>installation) Magnus, wouldn't it be better to use -include_lib("kernel/src/inet_dns.hrl"). ?? /Uffe -- Ulf Wiger, Chief Designer AXD 301 Ericsson Telecom AB tfn: +46 8 719 81 95 Varuv?gen 9, ?lvsj? mob: +46 70 519 81 95 S-126 25 Stockholm, Sweden fax: +46 8 719 43 44 From magnus@REDACTED Thu Dec 2 13:22:42 1999 From: magnus@REDACTED (Magnus =?iso-8859-1?Q?Fr=F6berg?=) Date: Thu, 02 Dec 1999 13:22:42 +0100 Subject: inet_dns module References: Message-ID: <38466492.1B273D8B@bluetail.com> Ulf Wiger wrote: > > On Thu, 2 Dec 1999, Magnus Fr?berg wrote: > > magnus>Instead of creating the dns_rec tuple you should include > magnus>inet_dns.hrl and use the record definitions. You have to > magnus>include it as: > magnus>-include("$ERL/lib/kernel-$KERNEL_VSN/src/inet_dns.hrl") as > magnus>the inet_dns module was not intended for use outside the > magnus>kernel application (e.g. you cant find a man-page for it). > magnus>(Note: $ERL above is your erlang install directory and > magnus>$KERNEL_VSN is the version of the kernel application in your > magnus>installation) > > Magnus, wouldn't it be better to use > > -include_lib("kernel/src/inet_dns.hrl"). > Oops;-) Of course, thats the way to do it. /Magnus -- Magnus Fr?berg Tel: +46 (0)8 692 22 06 Bluetail AB Email: magnus@REDACTED Hantverkargatan 78 WWW: http://www.bluetail.com SE-112 38 Stockholm, SWEDEN From tobbe@REDACTED Thu Dec 2 13:28:13 1999 From: tobbe@REDACTED (Torbjorn Tornkvist) Date: 02 Dec 1999 13:28:13 +0100 Subject: IG withdrawen ? In-Reply-To: Gunilla Hugosson's message of "Thu, 02 Dec 1999 11:56:44 +0100" References: <199912011433.GAA03818@taurus.glenvan.glenayre.com> <3846506C.903E7E@erix.ericsson.se> Message-ID: > Yes, IG has been phased out. It has been replaced by IC which > was introduced in OTP R4B (released last year). IC is an IDL > compiler which compared to IG: I haven't looked into IC in the new release, but in the old release it wasn't trivial to do the same thing with IC as you could (can) do with IG. As I remember it, with IC you had to generate a number of backends and write the main loop program yourself. Furthermore, IC used an if-else construction doing strcmp() to decide which function to call, where IG use(d) an index into a table of function pointers to do the dispatching. A question: since IG has been removed; do there exist a way to automatically or manually (e.g with a nice instruction) move from an existing IG interface to IC ? If not, then I would be happy to continue an (unofficial) support of IG. Just put it somewhere where I can get it. Cheers /Tobbe -- Torbj?rn T?rnkvist , tel: +46 8 692 22 15 , fax: +46 8 654 70 71 Bluetail AB , Hantverkargatan 78 , SE-112 38 Stockholm , Sweden Email: tobbe@REDACTED , Web: http://www.bluetail.com/~tobbe From markn@REDACTED Fri Dec 3 07:19:55 1999 From: markn@REDACTED (Mark NG) Date: Fri, 3 Dec 1999 17:19:55 +1100 Subject: Latest BEAM spec? In-Reply-To: ; from James Hague on Tue, Nov 30, 1999 at 01:07:06PM -0600 References: Message-ID: <19991203171955.A9106@murlibobo.cs.mu.OZ.AU> On Tue, Nov 30, 1999 at 01:07:06PM -0600, James Hague wrote: > I've been looking at the BEAM emulator source code and a BEAM > specification document (the latter is from October 1997, version 1.2). It Is the specs available for download somewhere ?? wouldn't mind getting my hands on it, even though it is outdated. :-) thanks, mark From gunilla@REDACTED Fri Dec 3 08:26:05 1999 From: gunilla@REDACTED (Gunilla Hugosson) Date: Fri, 03 Dec 1999 08:26:05 +0100 Subject: IG withdrawen ? References: <199912011433.GAA03818@taurus.glenvan.glenayre.com> <3846506C.903E7E@erix.ericsson.se> Message-ID: <3847708D.69C67E6C@erix.ericsson.se> Torbjorn Tornkvist wrote: > > > Yes, IG has been phased out. It has been replaced by IC which > > was introduced in OTP R4B (released last year). IC is an IDL > > compiler which compared to IG: > > I haven't looked into IC in the new release, but in the > old release it wasn't trivial to do the same thing with IC > as you could (can) do with IG. As I remember it, with IC you > had to generate a number of backends and write the main loop > program yourself. Furthermore, IC used an if-else construction > doing strcmp() to decide which function to call, where IG use(d) > an index into a table of function pointers to do the dispatching. Yes, that's right. The reason for replacing IG with IC, instead of just adding IC and keeping IG, is mainly that we don't have enough resources to maintain them both. > > A question: since IG has been removed; do there exist a way > to automatically or manually (e.g with a nice instruction) > move from an existing IG interface to IC ? No. > > If not, then I would be happy to continue an (unofficial) > support of IG. Just put it somewhere where I can get it. That would be great, Tobbe! I'll see to that it is put somewhere on the Open Source site. / Gunilla > > Cheers /Tobbe > -- > Torbj?rn T?rnkvist , tel: +46 8 692 22 15 , fax: +46 8 654 70 71 > Bluetail AB , Hantverkargatan 78 , SE-112 38 Stockholm , Sweden > Email: tobbe@REDACTED , Web: http://www.bluetail.com/~tobbe From chris.williams@REDACTED Fri Dec 3 14:16:16 1999 From: chris.williams@REDACTED (Chris Williams) Date: Fri, 03 Dec 1999 13:16:16 +0000 Subject: erl -sname Message-ID: <3847C2A0.4A6FEC0D@ericsson.com> When trying to start a node with the following command: erl -sname a.b the node crashes at startup. We tried all possible combinations like erl -sname 'a.b' erl -sname \'a.b\' and such. How do we start a node with a name which has a few '.'s in it?? regards, Chris -- ============================================================================ Christopher Williams Phone: +353 902 31365 Ericsson Systems ECN: 8301365 Expertise Limited, Mob: +353 87 670 58 47 Athlone, Fax: +353 902 31304 Co.Westmeath, http://www.eei.ericsson.se/~eeiaxm3 Ireland chris.williams@REDACTED ============================================================================ From per@REDACTED Fri Dec 3 15:21:59 1999 From: per@REDACTED (Per Hedeland) Date: Fri, 3 Dec 1999 15:21:59 +0100 (MET) Subject: erl -sname Message-ID: <199912031421.PAA09098@aalborg.du.uab.ericsson.se> Chris Williams wrote: >How do we start a node with a name which has a few '.'s in >it?? You don't. That part of the name may only consist of characters A-Z, a-z, 0-9, '-', and '_' - that should be plenty.:-) I guess this is documented somewhere... --Per Hedeland per@REDACTED From jhague@REDACTED Fri Dec 3 16:00:10 1999 From: jhague@REDACTED (James Hague) Date: Fri, 3 Dec 1999 09:00:10 -0600 (EST) Subject: Latest BEAM spec? In-Reply-To: <19991203171955.A9106@murlibobo.cs.mu.OZ.AU> Message-ID: On Fri, 3 Dec 1999, Mark NG wrote: > > Is the specs available for download somewhere ?? > wouldn't mind getting my hands on it, even though it is outdated. :-) http://www.ericsson.se/cslab/~bogdan/BEAM_instr.html James From vances@REDACTED Fri Dec 3 16:11:05 1999 From: vances@REDACTED (Vance Shipley) Date: Fri, 3 Dec 1999 10:11:05 -0500 Subject: net_adm:names failing (still) In-Reply-To: <199912020906.KAA18731@super.du.uab.ericsson.se> Message-ID: } Hmmm, does } } $ERL_TOP/bin/--/epmd -names } } work? } } --Per Hedeland Yes it does. $ /usr/local/lib/erlang/erts-4.9.1/bin/epmd -names epmd: up and running on port 4369 with data: name foo at port 1140 -Vance From Bruce@REDACTED Fri Dec 3 16:44:43 1999 From: Bruce@REDACTED (Bruce Fitzsimons) Date: Fri, 3 Dec 1999 16:44:43 +0100 Subject: INET_GETHOST.EXE In-Reply-To: Message-ID: <000001bf3da5$527a2ce0$1e21970a@fitzsimons> Hullo, Is anyone else having a few problems with this monster? Using ETK under R6B this program starts, as well as WISH42.EXE, but it never completes (as I guess it is supposed to). I'm running under Win95 with no DNS configured, but with -sname blah. It looks like this code is new for R6B. Etk always used to work fine...now even the demos won't run. Cheers, Bruce PS I had a quick (very!) look for the source code and couldn't find it. So I'm not sure what it wants to do, I presume its resolving the host name of the local host. From tgahling@REDACTED Fri Dec 3 17:53:12 1999 From: tgahling@REDACTED (Tony Gahlinger) Date: Fri, 03 Dec 1999 11:53:12 -0500 Subject: tkwait command in etk Message-ID: <3847F577.9B1CB4D6@ieee.org> I'm just about done converting a tcl/tk application into etk-0.9, but I'm stymied by one instruction: tkwait visibility $win Any suggestions on how to erlangize this critter? --Tony -------------------------------- Tony Gahlinger & Associates Inc. Telecommunication Consultants and Software Development 48 Combermere Crescent, Waterloo ON N2L 5B1 519-888-6267 Fax: 519-888-9127 From vances@REDACTED Fri Dec 3 18:12:00 1999 From: vances@REDACTED (Vance Shipley) Date: Fri, 3 Dec 1999 12:12:00 -0500 Subject: etk broken in R6B-0? (was INET_GETHOST.EXE) In-Reply-To: <000001bf3da5$527a2ce0$1e21970a@fitzsimons> Message-ID: Damn, he's right. ETK seems to be broken in R6B-0. I can't get wtour or etk_demo to work either in the WinNT or Unix environments. :( -Vance } -----Original Message----- } From: owner-erlang-questions@REDACTED } [mailto:owner-erlang-questions@REDACTED]On Behalf Of Bruce Fitzsimons } Sent: Friday, December 03, 1999 10:45 AM } To: erlang-questions@REDACTED } Subject: INET_GETHOST.EXE } } } Hullo, } } Is anyone else having a few problems with this monster? Using ETK under R6B } this program starts, as well as WISH42.EXE, but it never completes (as I } guess it is supposed to). } } I'm running under Win95 with no DNS configured, but with -sname blah. } } It looks like this code is new for R6B. Etk always used to work fine...now } even the demos won't run. } } Cheers, } Bruce } } PS I had a quick (very!) look for the source code and couldn't find it. So } I'm not sure what it wants to do, I presume its resolving the host name of } the local host. } } From bjorn@REDACTED Fri Dec 3 19:03:52 1999 From: bjorn@REDACTED (Bjorn Gustavsson) Date: 03 Dec 1999 19:03:52 +0100 Subject: etk broken in R6B-0? (was INET_GETHOST.EXE) In-Reply-To: "Vance Shipley"'s message of Fri, 3 Dec 1999 12:12:00 -0500 References: Message-ID: The problem (at least on Unix) seems to be that the file etk/src/tkstr.erl is never compiled. The workaround is to compile tkstr.erl and place the resulting .beam file into etk/ebin. /Bj?rn "Vance Shipley" writes: > > Damn, he's right. ETK seems to be broken in R6B-0. I can't get wtour or > etk_demo to work either in the WinNT or Unix environments. :( > > -Vance > > } -----Original Message----- > } From: owner-erlang-questions@REDACTED > } [mailto:owner-erlang-questions@REDACTED]On Behalf Of Bruce Fitzsimons > } Sent: Friday, December 03, 1999 10:45 AM > } To: erlang-questions@REDACTED > } Subject: INET_GETHOST.EXE > } > } > } Hullo, > } > } Is anyone else having a few problems with this monster? Using ETK under R6B > } this program starts, as well as WISH42.EXE, but it never completes (as I > } guess it is supposed to). > } > } I'm running under Win95 with no DNS configured, but with -sname blah. > } > } It looks like this code is new for R6B. Etk always used to work fine...now > } even the demos won't run. > } > } Cheers, > } Bruce > } > } PS I had a quick (very!) look for the source code and couldn't find it. So > } I'm not sure what it wants to do, I presume its resolving the host name of > } the local host. > } > } > -- Bj?rn Gustavsson Ericsson Utvecklings AB bjorn@REDACTED ?T2/UAB/F/P BOX 1505 125 25 ?lvsj? From crd@REDACTED Fri Dec 3 19:22:20 1999 From: crd@REDACTED (Craig Dickson) Date: Fri, 3 Dec 1999 10:22:20 -0800 Subject: etk broken in R6B-0? (was INET_GETHOST.EXE) References: Message-ID: <002f01bf3dbb$58abdc60$b102a8c0@int2.inversenet.com> Bjorn Gustavsson wrote: > The problem (at least on Unix) seems to be that the file etk/src/tkstr.erl > is never compiled. The Windows R6B distribution has no such file. Craig From vances@REDACTED Fri Dec 3 20:14:03 1999 From: vances@REDACTED (Vance Shipley) Date: Fri, 3 Dec 1999 14:14:03 -0500 Subject: etk broken in R6B-0? (was INET_GETHOST.EXE) In-Reply-To: Message-ID: } The problem (at least on Unix) seems to be that the file etk/src/tkstr.erl } is never compiled. The tk Makefile is missing two files. To correct edit ./lib/etk/src/Makefile: MODULES = \ tk \ etk \ etk_menu \ tkbutton \ tkconsole \ tkdialog \ tkentry \ tkfocus \ tklib \ tklistbox \ tkmenu \ tkoptmenu \ + tkrender \ tkscale \ tkscrlbar \ + tkstr \ tktearoff \ tktext -Vance From Bruce@REDACTED Fri Dec 3 21:08:46 1999 From: Bruce@REDACTED (Bruce Fitzsimons) Date: Fri, 3 Dec 1999 21:08:46 +0100 Subject: tkwait command in etk In-Reply-To: <3847F577.9B1CB4D6@ieee.org> Message-ID: <000001bf3dca$3588a920$1e21970a@fitzsimons> > > I'm just about done converting a tcl/tk application into etk-0.9, but > I'm stymied by one instruction: > > tkwait visibility $win > Hi Tony, According to the manual, this command waits (forever) for the window to become fully visible. I don't like it much, its just sugaring the events...the nicer command is binding (bind command) to the window, on the visibility event. This event is supported under tk4.2 so it should work with Erlang/ETk Using that command you can execute a fun whenever the visibility changes(I guess, my manuals not clear), so you could bind, go into a receive loop, then unbind. How does that sound? Bruce From len@REDACTED Mon Dec 6 12:58:03 1999 From: len@REDACTED (Leonard Weincier) Date: Mon, 6 Dec 1999 13:58:03 +0200 Subject: Real-Time - Newbie Message-ID: <010b01bf3fe1$26559e40$1a0110ac@medikredit.co.za> Hi I have seen (briefly) some talk about soft real time properties of the erlang runtime. Could someone clarify this for me. I am looking at using erlang for a rules engine and am trying to asses feasability. TIA Len From etxuwig@REDACTED Mon Dec 6 14:44:59 1999 From: etxuwig@REDACTED (Ulf Wiger) Date: Mon, 6 Dec 1999 14:44:59 +0100 (MET) Subject: Real-Time - Newbie In-Reply-To: <010b01bf3fe1$26559e40$1a0110ac@medikredit.co.za> Message-ID: On Mon, 6 Dec 1999, Leonard Weincier wrote: len>Hi len> len>I have seen (briefly) some talk about soft real time properties of the len>erlang runtime. len>Could someone clarify this for me. Soft real-time, as opposed to hard real-time gives no guarantees about response times. Erlang programs on a reasonably responsive computer will have response times in the order of milliseconds normally. Under unusual circumstances, response times can reach the 1-5 second range. What are those unusual circumstances? - Some calls in the I/O system are blocking, and normally quite fast, but if the I/O system is busy, the VM will block until they return (I've seen lseek() take 2-3 seconds when the disk was misconfigured) The Erlang I/O system is not threaded at the lowest level. - Garbage collection can take a second or so on rapidly growing, very large heaps. It's usually not difficult to avoid such behaviour in your programs As an example, I can tell you that the AXD 301 ATM Switch has a mean call setup delay of 25 ms at 30 calls/s. To assess this, it's important to know that one call uses about 8 internal messages and takes about 8 ms of CPU time. So basically, the mean latency is about 17 ms in external and internal signaling. Somewhere in the neighbourhood of 2 ms/message, I would venture to guess. len>I am looking at using erlang for a rules len>engine and len>am trying to asses feasability. So basically, your latency requirements will depend on what your rules engine is supposed to analyse. Another aspect is of course processing efficiency. I wrote a fuzzy-logic evaluator in Erlang to try to learn the basics in fuzzy logic. When I implemented the classic "crane controller", I could see that my Erlang controller, on a 16 MHz Ultra 10, behaved roughly like a conventional controller on an 8-bit MCU (low-cost controller). This means that each control cycle took about 1 ms (GC included, but not comm latency). I've attached the crane controller implementation. I used precalculated membership functions to speed things up a bit. Personally, I thought the result was rather satisfying. Performance wasn't pitiful, if not great, and the controller implementation was reasonably simple to understand. Also, it's not too bad to be able to modify the controller in runtime. The big GC pauses I talked about above wouldn't be a problem here. /Uffe -- Ulf Wiger, Chief Designer AXD 301 Ericsson Telecom AB tfn: +46 8 719 81 95 Varuv?gen 9, ?lvsj? mob: +46 70 519 81 95 S-126 25 Stockholm, Sweden fax: +46 8 719 43 44 -------------- next part -------------- -module(crane). -compile(export_all). -include("fuz.hrl"). -define(distance, (#mbf{min = -10, max = 40})). distance(far) -> ?distance#mbf{name = {distance, far}, point1 = 10, slope1 = 0.07273, point2 = 23.75, slope2 = 0, area = 23.125}; distance(medium) -> ?distance#mbf{name = {distance, medium}, point1 = 5, slope1 = 0.148148, point2 = 11.75, slope2 = -0.08333, area = 9.375}; distance(close) -> ?distance#mbf{name = {distance, close}, point1 = 0, slope1 = 0.2, point2 = 5, slope2 = -0.2, area = 5}; distance(zero) -> ?distance#mbf{name = {distance, zero}, point1 = -5.125, slope1 = 0.195122, point2 = 0, slope2 = -0.20513, area = 5}; distance(too_far) -> ?distance#mbf{name = {distance, too_far}, point1 = nil, slope1 = 0, point2 = 0, slope2 = -0.195122, area = 7.4375}. -define(angle, (#mbf{min = -90, max = 90})). angle(pos_big) -> ?angle#mbf{name = {angle, pos_big}, point1 = 6.67000, slope1 = 0.023079, point2 = 50, slope2 = 0, area = 61.665}; angle(pos_small) -> ?angle#mbf{name = {angle, pos_small}, point1 = 0, slope1 = 0.149925, point2 = 6.67, slope2 = -0.023079, area = 25}; angle(zero) -> ?angle#mbf{name = {angle, zero}, point1 = -6.67, slope1 = 0.149925, point2 = 0, slope2 = -0.149925, area = 6.67}; angle(neg_small) -> ?angle#mbf{name = {angle, neg_small}, point1 = -50, slope1 = 0.023079, point2 = -6.67, slope2 = -0.149925, area = 25}; angle(neg_big) -> ?angle#mbf{name = {angle, neg_big}, point1 = nil, slope1 = 0, point2 = -6.67, slope2 = -0.023079, area = 61.665}. -define(power, (#mbf{min = -30, max = 30, defuz_method = 'COM'})). power(neg_high) -> ?power#mbf{name = {power, neg_high}, point1 = -30, slope1 = 0.3, point2 = -26.6667, slope2 = -0.0545453, area = 10.8333}; power(neg_medium) -> ?power#mbf{name = {power, neg_medium}, point1 = -26.667, slope1 = 0.0562493, point2 = -8.89, slope2 = -0.1125, area = 13.3335}; power(zero) -> ?power#mbf{name = {power, zero}, point1 = -8.33333, slope1 = 0.12, point2 = 0, slope2 = -0.12, area = 800}; power(pos_medium) -> ?power#mbf{name = {power, pos_medium}, point1 = 0, slope1 = 0.12, point2 = 8.33333, slope2 = -0.0545453, area = 13.3333}; power(pos_high) -> ?power#mbf{name = {power, pos_high}, point1 = 8.33333, slope1 = 0.0545453, point2 = 26.6667, slope2 = -0.3, area = 10.8333}. %% %% control() -> [{IF, THEN}]. %% IF :: = {'AND', [IfCond]} | {'OR', [IfCond]} %% THEN ::= ThenCond %% IfCond ::= {Variable, Value, LinguisticValue} %% ThenCond ::= {Variable, LingusticValue} %% control(D, A) -> [{{'AND', [{distance, D, far}, {angle, A, zero}]}, {power, pos_medium}}, {{'AND', [{distance, D, far}, {angle, A, neg_small}]}, {power, pos_high}}, {{'AND', [{distance, D, medium}, {angle, A, neg_small}]}, {power, pos_high}}, {{'AND', [{distance, D, medium}, {angle, A, neg_big}]}, {power, pos_medium}}, {{'AND', [{distance, D, close}, {angle, A, pos_small}]}, {power, neg_medium}}, {{'AND', [{distance, D, close}, {angle, A, zero}]}, {power, zero}}, {{'AND', [{distance, D, close}, {angle, A, neg_small}]}, {power, pos_medium}}, {{'AND', [{distance, D, zero}, {angle, A, pos_small}]}, {power, neg_medium}}, {{'AND', [{distance, D, zero}, {angle, A, zero}]}, {power, zero}}]. -------------- next part -------------- %%% fuz.hrl -define(NORMAL, 100). -define(HALF_NORMAL, 50). -define(dbg(), ok). %-define(dbg(), io:format("~p.~n", [{?MODULE, ?LINE}])). -record(mbf, {name, min = 0, max = ?NORMAL, point1 = 0, slope1 = 0, point2 = 0, slope2 = 0, area = 0, fuz_method = 'CMBF', % currently ignored defuz_method = 'COM'}). % Supported: 'MOM' and 'COM' %% Defuzzyfication: %% 'MOM' - Mean of Maximum. This is used to calculate the most %% probable linguistic value (and a typical numeric value). %% This is useful when calculating state. %% The value chosen is the one with the highest comination %% of (degree of truth) and weight. %% %% 'COM' - Center of Maximum. This is used to calculate the best %% compromise. It returns a weighted value which is a %% compromise of those rules which were at all true. From Bruce@REDACTED Mon Dec 6 16:00:27 1999 From: Bruce@REDACTED (Bruce Fitzsimons) Date: Mon, 6 Dec 1999 16:00:27 +0100 Subject: etk is broken in R6B-0 under Windows Message-ID: <000101bf3ffa$a21ac320$1e21970a@bruce> Peoples, Just to summarise, after my slightly hasty posting last week, and after Vance and I tried a few things. 1. When running any of the ETk sample programs, the program runs but the windows never appear. Task Manager = wish42.exe (tk) is there, etk.exe is there, sometimes inet_gethost.exe is there. 2. inet_gethost.exe appears to be a C based server for gethostbyname and gethostbyaddr services. I'm not sure why it only runs sometimes, on some machines. Maybe the DNS setup (or lack of it). (this isn't a problem, just an observation) 3. Vance noted that some ETk files are not being compiled by the install (tkrender, tkstr) 4. Those files are also not supplied in the windows install version 5. Installing those files, including the .beam's in the correct places doesn't fix the lockups/infinite wait. I've tested with 3 machines (not including Vance's), including one clean NT4 SP6a system that has nothing else installed on it. All have the same problem. I'm not sure how to trace this problem. Any assistance or fixes gratefully received, I just want to get my widgets working under R6B. Cheers, Bruce From len@REDACTED Tue Dec 7 14:28:07 1999 From: len@REDACTED (Leonard Weincier) Date: Tue, 7 Dec 1999 15:28:07 +0200 Subject: Rules engines Message-ID: <003201bf40b6$ea2b6040$1a0110ac@medikredit.co.za> Hi Thanks for the previous responses. I am looking at building a transaction processing engine and any thoughts ideas would be most welcome. Briefly, As each transaction arrives in the system, a number of rules must be applied, e.g. membership in a certain set of values or transaction values within calculated limits. The sequence and types of rules rate of change is relatively high. I am looking for any ideas or pointers to formalised thinking in this area - rules engines / schemes ? I think that erlang and mnesia would be a great environment to start experimenting with different architechtures. TIA Len From esanchez@REDACTED Tue Dec 7 16:21:45 1999 From: esanchez@REDACTED (Enrique Sanchez Vela) Date: Tue, 07 Dec 1999 09:21:45 -0600 Subject: test suite Message-ID: <384D2609.B7B0230@citi.com.mx> is there a test suite for erlang, I just built erlang for aix 4.3.2 and would like to test if it is working properly. thanks, Enrique -- Enrique Sanchez Vela tel/phone (01-8)/(011-528) 357-2267 CITI Consultores S.A. de C.V fax/fax Soporte Tecnico From vances@REDACTED Tue Dec 7 22:29:40 1999 From: vances@REDACTED (Vance Shipley) Date: Tue, 7 Dec 1999 16:29:40 -0500 Subject: Problems linking etk_drv.so Message-ID: I have encountered the following problem building R6B-0 on x86 Solaris v2.6. Does anyone have any idea what this is about? Some digging suggests to me that the '-z text' option to ld is causing this error but can I change it? -Vance make[4]: Entering directory `/usr/local/src/otp_src_R6B-0/lib/etk/c_src' LD_LIBRARY_PATH=i386-pc-solaris2.6::; \ export LD_LIBRARY_PATH; \ /usr/ccs/bin/ld -G -z text -o /usr/local/src/otp_src_R6B-0/lib/etk/priv/bin/i386-pc-solaris2.6/etk_drv.so i386-pc-solaris2.6/tclParseCmd..o i386-pc-solaris2.6/panic..o i386-pc-solaris2.6/regexp..o i386-pc-solaris2.6/tclAsync..o i386-pc-solaris2.6/tclBasic..o i386-pc-solaris2.6/tclCkalloc..o i386-pc-solaris2.6/tclClock..o i386-pc-solaris2.6/tclDate..o i386-pc-solaris2.6/tclEnv..o i386-pc-solaris2.6/tclEvent..o i386-pc-solaris2.6/tclExpr..o i386-pc-solaris2.6/tclFCmd..o i386-pc-solaris2.6/tclFHandle..o i386-pc-solaris2.6/tclFileName..o i386-pc-solaris2.6/tclGet..o i386-pc-solaris2.6/tclHash..o i386-pc-solaris2.6/tclHistory..o i386-pc-solaris2.6/tclIO..o i386-pc-solaris2.6/tclIOSock..o i386-pc-solaris2.6/tclIOUtil..o i386-pc-solaris2.6/tclLink..o i386-pc-solaris2.6/tclLoad..o i386-pc-solaris2.6/tclNotify..o i386-pc-solaris2.6/tclParse..o i386-pc-solaris2.6/tclPkg..o i386-pc-solaris2.6/tclPosixStr..o i386-pc-solaris2.6/tclPreserve..o i386-pc-solaris2.6/tclProc..o i386-pc-solaris2.6/tclUtil..o i386-pc-solaris2.6/tclVar..o i386-pc-solaris2.6/tclLoadDl..o i386-pc-solaris2.6/tclMtherr..o i386-pc-solaris2.6/tclUnixChan..o i386-pc-solaris2.6/tclUnixFCmd..o i386-pc-solaris2.6/tclUnixFile..o i386-pc-solaris2.6/tclUnixNotfy..o i386-pc-solaris2.6/tclUnixSock..o i386-pc-solaris2.6/tclUnixTime..o i386-pc-solaris2.6/tclUnixInit..o i386-pc-solaris2.6/tk3d..o i386-pc-solaris2.6/tkArgv..o i386-pc-solaris2.6/tkAtom..o i386-pc-solaris2.6/tkBind..o i386-pc-solaris2.6/tkBitmap..o i386-pc-solaris2.6/tkClipboard..o i386-pc-solaris2.6/tkCmds..o i386-pc-solaris2.6/tkColor..o i386-pc-solaris2.6/tkConfig..o i386-pc-solaris2.6/tkCursor..o i386-pc-solaris2.6/tkError..o i386-pc-solaris2.6/tkEvent..o i386-pc-solaris2.6/tkFocus..o i386-pc-solaris2.6/tkFont..o i386-pc-solaris2.6/tkGet..o i386-pc-solaris2.6/tkGC..o i386-pc-solaris2.6/tkGeometry..o i386-pc-solaris2.6/tkGrab..o i386-pc-solaris2.6/tkGrid..o i386-pc-solaris2.6/tkOption..o i386-pc-solaris2.6/tkPack..o i386-pc-solaris2.6/tkPlace..o i386-pc-solaris2.6/tkSelect..o i386-pc-solaris2.6/tkSend..o i386-pc-solaris2.6/tkUtil..o i386-pc-solaris2.6/tkVisual..o i386-pc-solaris2.6/tkWindow..o i386-pc-solaris2.6/tkUnix..o i386-pc-solaris2.6/tkUnixCursor..o i386-pc-solaris2.6/tkUnixDialog..o i386-pc-solaris2.6/tkUnixDraw..o i386-pc-solaris2.6/tkUnixEvent..o i386-pc-solaris2.6/tkUnixPmap..o i386-pc-solaris2.6/tkUnixSelect..o i386-pc-solaris2.6/tkUnixWm..o i386-pc-solaris2.6/tkUnixXId..o i386-pc-solaris2.6/tkButton..o i386-pc-solaris2.6/tkEntry..o i386-pc-solaris2.6/tkFrame..o i386-pc-solaris2.6/tkListbox..o i386-pc-solaris2.6/tkMenu..o i386-pc-solaris2.6/tkMenubutton..o i386-pc-solaris2.6/tkMessage..o i386-pc-solaris2.6/tkScale..o i386-pc-solaris2.6/tkScrollbar..o i386-pc-solaris2.6/tkCanvas..o i386-pc-solaris2.6/tkCanvArc..o i386-pc-solaris2.6/tkCanvBmap..o i386-pc-solaris2.6/tkCanvImg..o i386-pc-solaris2.6/tkCanvLine..o i386-pc-solaris2.6/tkCanvPoly..o i386-pc-solaris2.6/tkCanvPs..o i386-pc-solaris2.6/tkCanvText..o i386-pc-solaris2.6/tkCanvUtil..o i386-pc-solaris2.6/tkCanvWind..o i386-pc-solaris2.6/tkRectOval..o i386-pc-solaris2.6/tkTrig..o i386-pc-solaris2.6/tkImage..o i386-pc-solaris2.6/tkImgBmap..o i386-pc-solaris2.6/tkImgGIF..o i386-pc-solaris2.6/tkImgJPEG..o i386-pc-solaris2.6/tkImgPPM..o i386-pc-solaris2.6/tkImgXPM..o i386-pc-solaris2.6/tkImgPNG..o i386-pc-solaris2.6/tkImgPhoto..o i386-pc-solaris2.6/tkPhotoUtil..o i386-pc-solaris2.6/tkImgPmap..o i386-pc-solaris2.6/tkText..o i386-pc-solaris2.6/tkTextBTree..o i386-pc-solaris2.6/tkTextDisp..o i386-pc-solaris2.6/tkTextIndex..o i386-pc-solaris2.6/tkTextMark..o i386-pc-solaris2.6/tkTextTag..o i386-pc-solaris2.6/tkTextWind..o i386-pc-solaris2.6/tkstr..o i386-pc-solaris2.6/etkMisc..o i386-pc-solaris2.6/etk_drv..o -R /usr/local/lib \ -lthread -lX11 -ldl -lsocket -lnsl -lm -lc -lm -lc Text relocation remains referenced against symbol offset in file __ctype 0x48c i386-pc-solaris2.6/tkCanvPs..o __ctype 0x1d4 i386-pc-solaris2.6/tkGet..o __ctype 0x1b8 i386-pc-solaris2.6/tkGet..o ld: fatal: relocations remain against allocatable but non-writable sections make[4]: *** [/usr/local/src/otp_src_R6B-0/lib/etk/priv/bin/i386-pc-solaris2.6/etk_drv.so] Error 1 From hakan@REDACTED Wed Dec 8 09:06:20 1999 From: hakan@REDACTED (Hakan Mattsson) Date: Wed, 8 Dec 1999 09:06:20 +0100 (MET) Subject: test suite In-Reply-To: <384D2609.B7B0230@citi.com.mx> Message-ID: > is there a test suite for erlang, I just built erlang for aix 4.3.2 and > would like to test if it is working properly. Try with the test suite of Mnesia: http://www.ericsson.se/cslab/~hakan/mnesia_test_3.8.2.tgz It does not diagnose the entire Erlang/OTP system, but it may give you some indications of its health. The test suite of Mnesia has its own light weight test server, which makes it possible to run it without the whole infrastructure of the internal test system of Erlang/OTP. See the README-file for the details of the test suite. /H?kan From sam@REDACTED Wed Dec 8 18:50:57 1999 From: sam@REDACTED (Samuel Tardieu) Date: 08 Dec 1999 18:50:57 +0100 Subject: [PATCH] Small trouble with multicast sockets Message-ID: <1999-12-08-18-50-59+trackit+sam@inf.enst.fr> I decided to play with multicast sockets in Erlang, and discovered 3 problems with the following code: -module (tm). -export ([test/0]). -include_lib ("kernel/src/inet_int.hrl"). -define (MULTIADDR, {224, 225, 224, 225}). -define (MULTIPORT, 1501). ip4_reverse ({A, B, C, D}) -> {D, C, B, A}. test () -> {ok, S} = inet_udp:open (?MULTIPORT, [{reuseadddr, 1}, {multicast_ttl, 16}, {multicast_loop, true}, {add_membership, {ip4_reverse (?MULTIADDR), {0, 0, 0, 0}}}]), inet_udp:send (S, ?MULTIADDR, ?MULTIPORT, "toto"), receive X -> io:format ("~p~n", [X]) end, inet_udp:close (S). The three problems are: (1) If an option is given an invalid name, or if it has a bad argument, it is silently ignored. Try changing reuseaddr into reuseaddddr, it should succeed. *WISHLIST* (2) One needs to use {0, 0, 0, 0} to mean INADDR_ANY. Maybe ip_any/1 could be exported from inet.erl so that it can be used easily. *WISHLIST* (3) On my Intel Linux box, I need to reverse the multicast group address given to setsockopt (..., ADD_MEMBERSHIP, ...). On my Sparc box, I must NOT use this address reversing. There is some suspicious code in inet_drv.c that may concern this: L_set_mreq: mreq_val.imr_multiaddr.s_addr = ival; mreq_val.imr_interface.s_addr = get_int32(ptr); I just wrote the following patch, but may not have the time to have it tested tonight (I have no Erlang semi-compiled here). If someone volunteers to test it, she will be welcome :) Otherwise, I'll give the answer tomorrow. --- erts/emulator/drivers/common/inet_drv.c.orig Wed Dec 8 18:46:00 1999 +++ erts/emulator/drivers/common/inet_drv.c Wed Dec 8 18:47:22 1999 @@ -1514,8 +1514,8 @@ type = IP_DROP_MEMBERSHIP; DEBUGF(("Descriptor %d: [IPPROTO_IP] IP_DROP_MEMBERSHIP(%d)\n",desc->s,ival)); L_set_mreq: - mreq_val.imr_multiaddr.s_addr = ival; - mreq_val.imr_interface.s_addr = get_int32(ptr); + mreq_val.imr_multiaddr.s_addr = sock_htonl (ival); + mreq_val.imr_interface.s_addr = sock_htonl (get_int32(ptr)); ptr += 4; len -= 4; arg_ptr = (char*)&mreq_val; Sam From sam@REDACTED Thu Dec 9 12:40:00 1999 From: sam@REDACTED (Samuel Tardieu) Date: 09 Dec 1999 12:40:00 +0100 Subject: [PATCH] Small trouble with multicast sockets In-Reply-To: Samuel Tardieu's message of "08 Dec 1999 18:50:57 +0100" References: <1999-12-08-18-50-59+trackit+sam@inf.enst.fr> Message-ID: <1999-12-09-12-40-00+trackit+sam@inf.enst.fr> >>>>> "Sam" == Samuel Tardieu writes: Sam> I just wrote the following patch, but may not have the time Sam> to have it tested tonight (I have no Erlang semi-compiled Sam> here). After applying and testing it, it looks like multicast now works fine.e I repost the (tiny) patch for inclusion in Erlang. Sam -- Samuel Tardieu -- sam@REDACTED -------------- next part -------------- A non-text attachment was scrubbed... Name: PATCH.ERLANG Type: text/x-patch Size: 656 bytes Desc: Multicast patch for Erlang URL: From cklin@REDACTED Fri Dec 10 10:04:52 1999 From: cklin@REDACTED (Chuan-kai Lin) Date: Fri, 10 Dec 1999 17:04:52 +0800 Subject: Erlang SSL application status Message-ID: <19991210170452.A16633@oink.cc.ntu.edu.tw> Greetings, I was wondering that if the SSL application uses ssleay for all the cryptography operations, why it cannot be included in the open source release of Erlang? There does not need to be any cryptography code in the package, as all we need is the hook to the SSL library, which should be perfectly exportable. Could anyone enlighten me please? -- Chuan-kai Lin From klacke@REDACTED Fri Dec 10 10:41:11 1999 From: klacke@REDACTED (Klacke) Date: Fri, 10 Dec 1999 10:41:11 +0100 Subject: Erlang SSL application status In-Reply-To: <19991210170452.A16633@oink.cc.ntu.edu.tw> References: <19991210170452.A16633@oink.cc.ntu.edu.tw> Message-ID: <19991210104111.A35411@bluetail.com> On Fri, Dec 10, 1999 at 05:04:52PM +0800, Chuan-kai Lin wrote: > Greetings, > > I was wondering that if the SSL application uses ssleay for all > the cryptography operations, why it cannot be included in the open > source release of Erlang? There does not need to be any cryptography > code in the package, as all we need is the hook to the SSL library, > which should be perfectly exportable. I _heard_ (I don't know) that the export regulation laws apply not just to encryption packages, but also to code that provides hooks to encryption packages. I don't know, it sounds weird. What's even more weird is that the other the day. I installed FreeBSD 3.3, which I received in the mail on a CD from Walnut Creek. Well it comes with the *source* for DES, how can that be ?? Anyway, it would be nice if somebody could confirm that this "hook to encryption packages" theory is correct. All these crypto regulations really suck !! /klacke -- Claes Wikstrom Bluetail AB http://www.bluetail.com From nick@REDACTED Fri Dec 10 11:11:42 1999 From: nick@REDACTED (Niclas Eklund) Date: Fri, 10 Dec 1999 11:11:42 +0100 (MET) Subject: Erlang SSL application status In-Reply-To: <19991210104111.A35411@bluetail.com> Message-ID: On Fri, 10 Dec 1999, Klacke wrote: > On Fri, Dec 10, 1999 at 05:04:52PM +0800, Chuan-kai Lin wrote: > > I was wondering that if the SSL application uses ssleay for all > > the cryptography operations, why it cannot be included in the open > > source release of Erlang? There does not need to be any cryptography > > code in the package, as all we need is the hook to the SSL library, > > which should be perfectly exportable. > I _heard_ (I don't know) that the export regulation laws > apply not just to encryption packages, but also to code > that provides hooks to encryption packages. I don't know, > it sounds weird. > > What's even more weird is that the other > the day. I installed FreeBSD 3.3, which I received in the > mail on a CD from Walnut Creek. Well it comes with the *source* for > DES, how can that be ?? Different countries, different export regulations. (IMHO) Usually a country don't restrict import and export of sensitive material in the same way :-) According to what I've heard, your statement above is correct. /Nick _____________________________________________________________ Niclas Eklund, Ericsson Network Core Products, +46-8-72 75765 From svg@REDACTED Fri Dec 10 20:12:26 1999 From: svg@REDACTED (svg@REDACTED) Date: Sat, 11 Dec 1999 00:12:26 +0500 Subject: Loading external drivers Message-ID: <19991211001226O.svg@disney.surnet.ru> I have founded that with standard installation procedure of Erlang R6B-0 on my RH Linux 6.1 box, beam emulator was linked without `-rdynamic' flag. That is why it couldn't load dynamically external drivers from `crypto' and `runtime_tool' modules. After relinking with `-rdynamic' flag this problem was solved. Regards --- Vladimir G. Sekissov From klacke@REDACTED Sat Dec 11 00:25:41 1999 From: klacke@REDACTED (Klacke) Date: Sat, 11 Dec 1999 00:25:41 +0100 Subject: Loading external drivers In-Reply-To: <19991211001226O.svg@disney.surnet.ru> References: <19991211001226O.svg@disney.surnet.ru> Message-ID: <19991211002541.B30064@bluetail.com> On Sat, Dec 11, 1999 at 12:12:26AM +0500, svg@REDACTED wrote: > > I have founded that with standard installation procedure of Erlang R6B-0 > on my RH Linux 6.1 box, beam emulator was linked without `-rdynamic' flag. > That is why it couldn't load dynamically external drivers from `crypto' > and `runtime_tool' modules. > > After relinking with `-rdynamic' flag this problem was solved. That is indeed correct. I'll attach a patch for the rest of the user community to apply /klacke -- Claes Wikstrom Bluetail AB http://www.bluetail.com -------------- next part -------------- Index: erts/emulator/Makefile.in =================================================================== RCS file: /home/share/erlang/cvsroot/otp_r6b/erts/emulator/Makefile.in,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -c -b -r1.1.1.1 -r1.4 *** Makefile.in 1999/11/25 13:53:52 1.1.1.1 --- Makefile.in 1999/12/01 13:05:01 1.4 *************** *** 63,70 **** RANLIB = @RANLIB@ STRIP = strip PERL = @PERL@ - LIBS = @LIBS@ -L$(ERL_TOP)/erts/obj/$(TARGET) -lz OBJDIR = $(ERL_TOP)/erts/obj$(TYPEMARKER).beam/$(TARGET) --- 63,70 ---- RANLIB = @RANLIB@ STRIP = strip PERL = @PERL@ + DEXPORT = @DEXPORT@ LIBS = @LIBS@ -L$(ERL_TOP)/erts/obj/$(TARGET) -lz OBJDIR = $(ERL_TOP)/erts/obj$(TYPEMARKER).beam/$(TARGET) From klacke@REDACTED Sat Dec 11 02:43:54 1999 From: klacke@REDACTED (Klacke) Date: Sat, 11 Dec 1999 02:43:54 +0100 Subject: Loading external drivers In-Reply-To: <000101bf436e$807cf680$1e21970a@bruce> References: <19991211002541.B30064@bluetail.com> <000101bf436e$807cf680$1e21970a@bruce> Message-ID: <19991211024354.A36782@bluetail.com> > > > > > > After relinking with `-rdynamic' flag this problem was solved. > > > > That is indeed correct. > > Could this also be screwing up ETk? I'm not sure how to tell if it is > installed as a external driver in the standard install. Does Etk work under > Unix/X in R6B? > Not really, etk runs (or ehum, rather used to run) in either of two modes. The default is try to run etk in an external unix process, the option {driver, "etk_drv"} should start etk as a linked in driver (which I believe is the default on win32, can't verify that since I'm in blissful ignorance of the win32 stuff) However, etk did not work in r6b, !!!! First of all the .so file didn't build. At least not on linux. (It builds nice on FreeBSD) This isn't as bad as it sounds since the etk unix program is the default. Neverthe less it should build. This failed build was due to the -ieee switch passed to ld as previously noted here in the list. Here's a patch for that: otp_src_R6B-0> diff -c lib/etk/configure.in.orig lib/etk/configure.in *** lib/etk/configure.in.orig Sat Dec 11 01:55:21 1999 --- lib/etk/configure.in Sat Dec 11 01:55:33 1999 *************** *** 134,140 **** #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") ! AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Supply substitutes for missing POSIX header files. Special --- 134,140 ---- #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") ! #AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Supply substitutes for missing POSIX header files. Special *************** *** 1335,1341 **** MATH_LIBS="" AC_CHECK_FUNC(sin, , MATH_LIBS="-lm") ! AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # If this system doesn't have a memmove procedure, use memcpy --- 1335,1341 ---- MATH_LIBS="" AC_CHECK_FUNC(sin, , MATH_LIBS="-lm") ! #AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # If this system doesn't have a memmove procedure, use memcpy The second error was lot worse. It appears as if the etk exec as well as the .so file now resides in etk/priv/bin/$(TARGET) instead of as before etk/priv/bin. Oops. Here's a fix for that: otp_src_R6B-0> diff -c lib/etk/c_src/Makefile.in.orig lib/etk/c_src/Makefile.in *** lib/etk/c_src/Makefile.in.orig Sat Dec 11 01:58:04 1999 --- lib/etk/c_src/Makefile.in Sat Dec 11 01:58:09 1999 *************** *** 191,197 **** ETK_SRC_DIR = $(ETK_DIR)/c_src ETK_ERL_DIR = $(ETK_DIR)/src ! ETK_BIN_DIR = $(ETK_DIR)/priv/bin/$(TARGET) OBJDIR = $(TARGET) --- 191,197 ---- ETK_SRC_DIR = $(ETK_DIR)/c_src ETK_ERL_DIR = $(ETK_DIR)/src ! ETK_BIN_DIR = $(ETK_DIR)/priv/bin OBJDIR = $(TARGET) However, (still on linux rh6.1) I can't get the -withdrawn option to work $ etk/priv/bin/etk -withdrawn Just hangs, tk:start() works though, > I didn't really want to spend weeks getting ETk working so I've gone back to > the old Erlang release while I work on my widget. Wise move > Is it my imagination or > are the maintainers not very interested in fixing this? (or maybe they're > just busy) > No I think this is the case. etk was written by Tony Rogvall who's now at bluetail hacking smtp servers. The etk code is great, the only trouble is that it's written to work with a by now fairly old tk version (4.2) The source for gs sucks. gs is also written to interface old tk 4.2. As far as I know there's no person in the OTP group who cares much for neither gs nor etk. Somebody ought write an essay on the gui programming interfaces we've had over the years. Uhhhh. Personally I'm writing an interface to gtk+ instead :-) Cheers PS. As for the patches above, since they patch configure.in, we need to rerun autoconf and configure (in the lib/etk directory) /klacke -- Claes Wikstrom Bluetail AB http://www.bluetail.com From Bruce@REDACTED Sat Dec 11 13:07:30 1999 From: Bruce@REDACTED (Bruce Fitzsimons) Date: Sat, 11 Dec 1999 13:07:30 +0100 Subject: GUI's and CVS In-Reply-To: <19991211024354.A36782@bluetail.com> Message-ID: <000001bf43d0$4e00d840$1e21970a@bruce> Wow, that was a quick response... Thanks very much for spending some time on that Klacke, it is really appreciated. I'll try and build it under Windows later...I've never done that before. > > Personally I'm writing an interface to gtk+ instead :-) > I had a look at gtk last night (on www.gtk.org), it doesn't seem too radically different from Tk, but the packing algorithm seems easier to work with :-) Is there is any big differences? The Tk packer seemed simple until I wanted to do something and then nothing went quite where I thought it should. VTcl was a godsend. > Somebody ought write an essay on the gui programming > interfaces we've had over the years. Uhhhh. Well its an issue for Erlang...not least that all the existing code in one gui interface is useless if you use the next one. It sabotages the Open Source potential of building useful GUI libraries that extend the standard functionality, because of the constant wheel re-invention. While off the topic, I'd like to ask if anyone wants a CVS server for these things. I'd like to publish my file selection widget (Etk) for feedback but it is a work-in-progress and certainly not multi-platform yet or even usable yet. I know about the contrib's page it doesn't seem appropriate or a scalable solution. Also, I've already enhanced one or two of those contribs (well I think they are enhanced...the authors may disagree) but there really isn't a good way to make them available to everyone (I've made some changes to the SMTP parts of epop and I'm working on filesystem). Thoughts anyone? Cheers, Bruce PS My opinion of GS mirrors yours...except my viewpoint is more usability. Etk is so much easier to use and encapsulate. Still I guess GS was there before Funs, which would explain its bias towards messages instead of callbacks. From per@REDACTED Sat Dec 11 16:38:22 1999 From: per@REDACTED (Per Hedeland) Date: Sat, 11 Dec 1999 16:38:22 +0100 (MET) Subject: Loading external drivers Message-ID: <199912111538.QAA22847@super.du.uab.ericsson.se> Klacke wrote: >This failed build was due to the -ieee switch passed to ld >as previously noted here in the list. Well, as also previously noted:-), it was *really* due to a bug in some Linux libraries - Samuel Tardieu posted a pointer to his bug report, and added: Note that now that all popular Linux systems are using glibc 2.1+, the Erlang maintainers could remove the check for -lieee from configure.in, it would be much cleaner, even if the problem comes from the Debian libc6-dev package. The problem with this is that, in my experience, Linux installations tend to have any number of possible or impossible combinations of kernels/libraries/includes and still be "popular" (that was a diplomatic way of putting it, wasn't it?:-). I.e., just which installations will *break* if the -lieee is removed? Are they really fewer than those where it will fix things (and does this make it acceptable to do it)? Is there an easy way to find out which of these is the case at configure time? (I don't know the history of the -lieee test, but presumably it was put in for a reason.) >As far as I know there's no person in the OTP group who >cares much for neither gs nor etk. Caring or not, for better or worse, as far as I know the "officially supported" (whatever that might mean in the open-source context:-) GUI is still gs - which means that etk gets attention "as time permits", and I guess time hasn't permitted much of that lately. Still, I believe all problems reported for the Unix version of etk have also had fixes/workarounds posted here by our helpful open-source users - what remains is to collect them into a comprehensive and general patch, and unfortunately that isn't as easy as just concatentating them (see above for one example). And then there's the Windows version of course... --Per Hedeland per@REDACTED From sam@REDACTED Sat Dec 11 17:15:44 1999 From: sam@REDACTED (Samuel Tardieu) Date: 11 Dec 1999 17:15:44 +0100 Subject: Loading external drivers In-Reply-To: Per Hedeland's message of "Sat, 11 Dec 1999 16:38:22 +0100 (MET)" References: <199912111538.QAA22847@super.du.uab.ericsson.se> Message-ID: <1999-12-11-17-15-44+trackit+sam@inf.enst.fr> >>>>> "Per" == Per Hedeland writes: Per> Are they really fewer than those where it will fix things (and Per> does this make it acceptable to do it)? Is there an easy way to Per> find out which of these is the case at configure time? (I don't Per> know the history of the -lieee test, but presumably it was put in Per> for a reason.) Well, I am curious to know which reason. -lieee should never be needed to do basic math calculations which are covered by -lm. Sam -- Samuel Tardieu -- sam@REDACTED From mike@REDACTED Mon Dec 13 10:44:01 1999 From: mike@REDACTED (Michael C Williams) Date: Mon, 13 Dec 1999 10:44:01 +0100 (MET) Subject: Erlang SSL application status In-Reply-To: <19991210170452.A16633@oink.cc.ntu.edu.tw> Message-ID: The fact that it doesn't contain any cryptography code doesn't matter. I many countries, the fact that it makes cryptography available is enough to cause problems. We really don't want to get involved in this sort of legal hassle! /mike On Fri, 10 Dec 1999, Chuan-kai Lin wrote: > Greetings, > > I was wondering that if the SSL application uses ssleay for all > the cryptography operations, why it cannot be included in the open > source release of Erlang? There does not need to be any cryptography > code in the package, as all we need is the hook to the SSL library, > which should be perfectly exportable. > > Could anyone enlighten me please? > > -- Chuan-kai Lin > From seb@REDACTED Mon Dec 13 10:43:27 1999 From: seb@REDACTED (Sebastian Strollo) Date: 13 Dec 1999 10:43:27 +0100 Subject: Loading external drivers In-Reply-To: Klacke's message of "Sat, 11 Dec 1999 02:43:54 +0100" References: <19991211002541.B30064@bluetail.com> <000101bf436e$807cf680$1e21970a@bruce> <19991211024354.A36782@bluetail.com> Message-ID: Klacke writes: > > The second error was lot worse. It appears as if the etk exec > as well as the .so file now resides in etk/priv/bin/$(TARGET) > instead of as before etk/priv/bin. Oops. > > Here's a fix for that: The etk binary and the shared library was intentionally put in bin/$(TARGET) in lib/etk/c_src/Makefile.in, when you run make install they are put in the right place. The reason for building in an architecture private directory being that it should be possible to build for several platforms in one subdir without doing make clean in between. (The downside with this is that you can't run the application "in place", you have to do a make install. This is unfortunately solved different ways for different applications, e.g. os_mon works in this way but gs doesn't.) /Sebastian From mbj@REDACTED Tue Dec 14 10:38:20 1999 From: mbj@REDACTED (Martin Bjorklund) Date: Tue, 14 Dec 1999 10:38:20 +0100 Subject: new stack backtrace Message-ID: <19991214103820I.mbj@bluetail.com> The new stack backtrace printout on failures is great! But I just spent half an hour trying to find out what was wrong with the following function in the module 'bt_conf': init_gws(Node) -> Cf = bt_cmd:bgetconfig(Node, cluster), Gws = foldl( fun({_, "FrontendCluster", _, Vs}, Gws1) -> foldl( fun({_,Gw,[SNd, Ip, SPort, Profile],_},Gws2) -> Nd = list_to_atom(SNd), Port = list_to_integer(SPort), [{to_proto(Gw), Nd, Ip, Port, Profile} | Gws2]; (_, Gws2) -> Gws2 end, Gws1, Vs); (_, Gws1) -> Gws1 end, [], Cf), GwRs = collect(Gws), foreach(fun(GwR) -> ets:insert(bt_tab, {{gw, GwR#bt_gw.protocol}, GwR}) end, GwRs). ... after I got this crash: error_info: {undef,[{config_file,parse_string,["sh: /home...\n"]}, {bt_conf,init_gws,1}, {bt_conf,init_tab,1}, {btest,init_server,1}, {proc_lib,init_p,5}]} First of all, the stacktrace suggests that bt_conf calls config_file:parse_string, which crashes with the reason 'undef'. But the top entry on the stack look suspicious; the argument list is printed, not the arity. Thus, I thought that bt_conf calls the undefined function confgi_file:parse_string (a look in error_handler.erl confirms this, more about this below). Obviously, I have no calls to config_file:parse_string in init_gws/1, as indicated by the backtrace. But, init_gws calls bt_cmd:get_config, which looks like this: bgetconfig(Node, Type) -> Cmd = cmd("bgetconfig"), ibgetconfig(Cmd ++ " -t " ++ atom_to_list(Type) ++ " " ++ atom_to_list(Node)). ibgetconfig(Cmd) -> Res = os:cmd(Cmd), config_file:parse_string(Res). ... and there's the error. The first question is why these last two calls don't show up in the stack backtrace? The second question is why the backtrace looks like it does; in earlier releases the undef EXIT looked like this: {'EXIT',{undef,{Module,Function,Args}}} Wouldn't it be more consistent with the other exit reasons to use this format in the new release too, i.e. change error_handler:crash from: crash(MFA) -> {'EXIT',{undef,[Current|Mfas]}} = (catch erlang:fault(undef)), exit({undef,[MFA|Mfas]}). to: crash(MFA) -> {'EXIT',{undef,[Current|Mfas]}} = (catch erlang:fault(undef)), exit({{undef, MFA},Mfas}). /martin From etxuwig@REDACTED Tue Dec 14 11:09:44 1999 From: etxuwig@REDACTED (Ulf Wiger) Date: Tue, 14 Dec 1999 11:09:44 +0100 (MET) Subject: new stack backtrace In-Reply-To: <19991214103820I.mbj@bluetail.com> Message-ID: On Tue, 14 Dec 1999, Martin Bjorklund wrote: [...] mbj>init_gws(Node) -> mbj> Cf = bt_cmd:bgetconfig(Node, cluster), mbj> Gws = mbj> foldl( mbj> fun({_, "FrontendCluster", _, Vs}, Gws1) -> mbj> foldl( mbj> fun({_,Gw,[SNd, Ip, SPort, Profile],_},Gws2) -> mbj> Nd = list_to_atom(SNd), mbj> Port = list_to_integer(SPort), mbj> [{to_proto(Gw), Nd, Ip, Port, Profile} | Gws2]; mbj> (_, Gws2) -> mbj> Gws2 mbj> end, Gws1, Vs); mbj> (_, Gws1) -> mbj> Gws1 mbj> end, [], Cf), mbj> GwRs = collect(Gws), mbj> foreach(fun(GwR) -> ets:insert(bt_tab, {{gw, GwR#bt_gw.protocol}, GwR}) end, mbj> GwRs). mbj> mbj> mbj>... after I got this crash: mbj> mbj> error_info: {undef,[{config_file,parse_string,["sh: /home...\n"]}, mbj> {bt_conf,init_gws,1}, mbj> {bt_conf,init_tab,1}, mbj> {btest,init_server,1}, mbj> {proc_lib,init_p,5}]} mbj> [...] mbj>Obviously, I have no calls to config_file:parse_string in mbj>init_gws/1, as indicated by the backtrace. But, init_gws calls mbj>bt_cmd:get_config, which looks like this: mbj> mbj>bgetconfig(Node, Type) -> mbj> Cmd = cmd("bgetconfig"), mbj> ibgetconfig(Cmd ++ " -t " ++ atom_to_list(Type) ++ " " ++ mbj> atom_to_list(Node)). mbj> mbj>ibgetconfig(Cmd) -> mbj> Res = os:cmd(Cmd), mbj> config_file:parse_string(Res). mbj> mbj> mbj>... and there's the error. mbj> mbj> mbj>The first question is why these last two calls don't show up in the mbj>stack backtrace? I know this one... I think! (: ibgetconfig/1 is tail-recursive, so it doesn't consume a stack frame (I'm not sure whether that explanation is technically correct...) I've been surprised by this myself, but it's fairly logical, I think. Only functions with outstanding computations will show up in the stack trace. /Uffe -- Ulf Wiger, Chief Designer AXD 301 Ericsson Telecom AB tfn: +46 8 719 81 95 Varuv?gen 9, ?lvsj? mob: +46 70 519 81 95 S-126 25 Stockholm, Sweden fax: +46 8 719 43 44 From rv@REDACTED Tue Dec 14 11:09:37 1999 From: rv@REDACTED (Robert Virding) Date: Tue, 14 Dec 1999 11:09:37 +0100 Subject: new stack backtrace In-Reply-To: Your message of "Tue, 14 Dec 1999 10:38:20 +0100." <19991214103820I.mbj@bluetail.com> Message-ID: <199912141009.LAA19930@localhost.localdomain> Martin Bjorklund writes: >The new stack backtrace printout on failures is great! But I just >spent half an hour trying to find out what was wrong with the >following function in the module 'bt_conf': > > >init_gws(Node) -> > Cf = bt_cmd:bgetconfig(Node, cluster), >... > >Obviously, I have no calls to config_file:parse_string in >init_gws/1, as indicated by the backtrace. But, init_gws calls >bt_cmd:get_config, which looks like this: > >bgetconfig(Node, Type) -> > Cmd = cmd("bgetconfig"), > ibgetconfig(Cmd ++ " -t " ++ atom_to_list(Type) ++ " " ++ > atom_to_list(Node)). > >ibgetconfig(Cmd) -> > Res = os:cmd(Cmd), > config_file:parse_string(Res). > > >... and there's the error. > > >The first question is why these last two calls don't show up in the >stack backtrace? Easy. Seeing the call to config_file:parse_string/1 is the LAST CALL in ibgetconfig/1 which is the LAST CALL in bgetconfig/2 then the last call optimisation removes all traces of bgetconfig/2 and ibgetconfig/1. Abnd as you know we can't do without the LCO. :-) Robert -- Robert Virding Tel: +46 (0)8 692 22 12 Bluetail AB Email: rv@REDACTED Hantverkargatan 78 WWW: http://www.bluetail.com SE-112 38 Stockholm, SWEDEN "Folk s?ger att jag inte bryr mig om n?gonting, men det skiter jag i". From mbj@REDACTED Tue Dec 14 11:28:18 1999 From: mbj@REDACTED (Martin Bjorklund) Date: Tue, 14 Dec 1999 11:28:18 +0100 Subject: new stack backtrace In-Reply-To: Your message of "Tue, 14 Dec 1999 11:09:37 +0100" <199912141009.LAA19930@localhost.localdomain> References: <199912141009.LAA19930@localhost.localdomain> Message-ID: <19991214112818B.mbj@bluetail.com> Robert Virding wrote: > Easy. Seeing the call to config_file:parse_string/1 is the LAST CALL in > ibgetconfig/1 which is the LAST CALL in bgetconfig/2 then the last call > optimisation removes all traces of bgetconfig/2 and ibgetconfig/1. So this is waht happens: the call to bt_cmd:bgetconfig is pushed onto the stack since bgetconfig is tail-recursive, bgetconfig is popped, and ibgetconfig is pushed. since ibgetconfig is tail-recursive, ibgetconfig is popped, but before config_file:parse_string is pushed, the error handler is invoked because config_file doesn't exist. Interesting. Maybe the check for config_file:parse_string/1 could be done before ibgetconfig is popped. /martin From jim@REDACTED Thu Dec 16 00:12:10 1999 From: jim@REDACTED (Jim Larson) Date: Wed, 15 Dec 1999 15:12:10 -0800 Subject: spawn() vs. supervisor:start_child() Message-ID: <199912152312.PAA03367@lefse.jetcafe.org> We're building a long-running application where robustness is a key concern. The application can be a server for several clients (external processes, not coded in Erlang). Each client may be multithreaded, so each client's network connection uses a split-transaction protocol so that each request can be executed concurrently. We therefore need to launch many kinds of processes dynamically: - one for each new connection - one for each request on a connection - occasional dynamic processes related to the execution of a request, e.g. lock managers My question is whether we should be looking to put these dynamic processes in a supervision tree, or is it sufficient to link them to a process in the supervision tree? Which is the better style? Is it ever a good idea to dynamically create supervisors? An examination of the code in Kernel, hopefully an example of good design in Erlang, reveals a few top-level supervisors, but many occurrances of spawn()/spawn_link() and few of start_child(). Jim Larson jim@REDACTED From mbj@REDACTED Thu Dec 16 09:00:57 1999 From: mbj@REDACTED (Martin Bjorklund) Date: Thu, 16 Dec 1999 09:00:57 +0100 Subject: spawn() vs. supervisor:start_child() In-Reply-To: Your message of "Wed, 15 Dec 1999 15:12:10 -0800" <199912152312.PAA03367@lefse.jetcafe.org> References: <199912152312.PAA03367@lefse.jetcafe.org> Message-ID: <19991216090057X.mbj@bluetail.com> Jim Larson wrote: > We're building a long-running application where robustness is a > key concern. > > The application can be a server for several clients (external > processes, not coded in Erlang). Each client may be multithreaded, > so each client's network connection uses a split-transaction protocol > so that each request can be executed concurrently. > > We therefore need to launch many kinds of processes dynamically: > - one for each new connection > - one for each request on a connection > - occasional dynamic processes related to the execution > of a request, e.g. lock managers > > My question is whether we should be looking to put these dynamic > processes in a supervision tree, or is it sufficient to link them > to a process in the supervision tree? Which is the better style? The better style is the one that solves your specific problem in the best or most elegant way ;) It all depends on how you want to treat the processes. There are basically two separate reasons to put a process under a supervisor: - to handle failures either by restarting the process, or to propagate the failure in the supervision tree - to handle dynamic code change If you don't need these features, as might be the case for the "one process per connection", you don't "have" to use supervisors. In this case, if the process crashes, the connection to the client is terminated, but nothing else is affected (unless of course the process is linked to some other process and so on). If you're loading new code on the fly, the dynamic processes running the old code will continue (depending on how the code is structured; in the worst case they might crash), but new processes will use the new code. If you want to put dynamic processes under a supervisor, you might want to use the 'simple_one_for_one' child type, which is optimized for speed. If you go for the spawn() alternative, I'd recommend proc_lib:start/start_link/spawn/spawn_link, which produce nice crash reports on failure. > Is it ever a good idea to dynamically create supervisors? I'd say yes, but I have never done that, and I have never seen a situation where I would have used them. It all depends on your specific problem. /martin From etxmacr@REDACTED Thu Dec 16 13:36:32 1999 From: etxmacr@REDACTED (Mats Cronqvist) Date: Thu, 16 Dec 1999 13:36:32 +0100 Subject: erl keys on NT Message-ID: <199912161236.NAA18073@avc386.etxb.ericsson.se> I recently installed erlang on my WinNT box. works fine, but the shell has the annoying feature of not handling the control keys properly. if I hit ctrl-p it'll write "^P" on the screen. I don't know enough about NT to find the doc (if there is any), so any advise would be welcome. mats From bjorn@REDACTED Thu Dec 16 13:50:25 1999 From: bjorn@REDACTED (Bjorn Gustavsson) Date: 16 Dec 1999 13:50:25 +0100 Subject: erl keys on NT In-Reply-To: Mats Cronqvist's message of Thu, 16 Dec 1999 13:36:32 +0100 References: <199912161236.NAA18073@avc386.etxb.ericsson.se> Message-ID: This is a known bug in the Windows NT shell. :-) The workaround is to use the arrow keys. /Bj?rn Mats Cronqvist writes: > > I recently installed erlang on my WinNT box. works fine, but the shell has > the annoying feature of not handling the control keys properly. if I hit > ctrl-p it'll write "^P" on the screen. I don't know enough about NT to find > the doc (if there is any), so any advise would be welcome. > > mats > -- Bj?rn Gustavsson Ericsson Utvecklings AB bjorn@REDACTED ?T2/UAB/F/P BOX 1505 125 25 ?lvsj? From jim@REDACTED Fri Dec 17 23:17:14 1999 From: jim@REDACTED (Jim Larson) Date: Fri, 17 Dec 1999 14:17:14 -0800 Subject: R6B-0 build problems on FreeBSD 2.2.8 Message-ID: <199912172217.OAA21401@lefse.jetcafe.org> Not sure if you're interested in supporting a less-than-current FreeBSD platform, but in case you are, here are some problems I encountered in building R6B-0 under FreeBSD-2.2.8. 1) In lib/orber/c_src/setsockaddr_in.c, we needed to add #ifndef INADDR_LOOPBACK #define INADDR_LOOPBACK (u_int32_t)0x7f000001 #endif near the top. 2) In lib/runtime_tools/c_src, the ld invocations to create the shared objects didn't do quite the right thing: ld -share -soname trace_ip_drv.so \ -o ../priv/lib/i386-unknown-freebsd2.2.8/trace_ip_drv.so \ ../priv/obj/i386-unknown-freebsd2.2.8/trace_ip_drv.o \ -lc -ltermlib -lm The "-share" flag isn't in the ld(1) used in 2.2.8 (and in later versions, it seems to want "-shared"), so I edited the Makefile to use "-Bshareable". The "-soname [arg]" option isn't supported either, so I took it out. Jim Larson jim@REDACTED From per.bohlin@REDACTED Mon Dec 20 10:10:42 1999 From: per.bohlin@REDACTED (Per Bohlin) Date: Mon, 20 Dec 1999 10:10:42 +0100 Subject: jinterface questions Message-ID: <385DF292.3083E906@etx.ericsson.se> I tried to experiment a little bit with JInterface starting with making a hidden connection from a Java node to an Erlang Node. When doing this with the open source distribution on my Home-PC with Windows 98 and JDK 1.2 downloaded from javasoft.com I did not succeed. The erlang side refuses to accept the connection. Error printout: ** Connection attempt from disallowed node ... On the Java side I get an authorization exception I have found that there are some handshaking going on where a random number is sent from Erlang to Java. Some calculations are made on this number on both sides. The result is sent from Java to erlang and the results are compared. They are not identical so Erlang stops the connection. Doing the same thing at work with OTP-R6 on Sun/Solaris works fine. I have now patched both dist_util.erl in the kernel source and OtpConnection.java in jinterface so that the tests are avoided. This seem to work, but I guess that is not the way to solve it. What shall I do to make it work properly? I also have a question about the functionallity of JInterface. At first I thought that it provided the same functionallity to JAVA that you get to C when using erl_interface. I've used erl_interface a bit in a User Interface tool where C++ objects are represented with Erlang PID's. When receiving messages from erlang a dictionary is used to keep track of which object to transfer the message to based on the pid that the message is sent to. So effectivly the erlang side can send messages to C++ objects (represening windows) as if they where Erlang processes. In JInterface it is possible to create Erlang PIDs on the java side. But, I have not found any way of getting the PID that the Erlang message was sent to. The messages just ends up in the OtpConnection.receive without reference to the PID that the message was sent to. Is there a way to find the PID that the message was sent to? (And possibly also the PID of the process that the message was sent from, I don't need it but it is there in erl_interface) Thanks /Per Bohlin PS. I am new to this mailing list. Sorry if this has been discussed before DS. From Sean.Hinde@REDACTED Tue Dec 21 18:44:31 1999 From: Sean.Hinde@REDACTED (Sean Hinde) Date: Tue, 21 Dec 1999 17:44:31 -0000 Subject: Retrieving zero answers using mnemosyne Message-ID: All, I am writing an application which will retrieve zero or one answers from a mnemosyne query but have hit a problem. mnemosyne:next_answers/3 appears to be the only way to get a single answer from a match type query but if there are no matches it hangs. The obvious thing to do is set Nmin to 0 but this is not allowed. Has anyone come across this problem before or have any suggestions of how to retrieve a single match out of potentially more then one result? Thanks, Sean %% Example of what I am trying to achieve.. assign(User) -> Handle = query [ I.ip || I <- table(ip_pool), I.user == [] ] end, F = fun() -> Cursor = mnemosyne:cursor(Handle), case mnemosyne:next_answers(Cursor,1,1) of [] -> mnesia:abort(no_spare_ip_addresses); [IP] -> mnesia:write(#ip_pool{ip = IP, user = User, timestamp = now()}), mnemosyne:delete_cursor(Cursor), IP end end, mnesia:transaction(F). From hakan@REDACTED Tue Dec 21 19:32:38 1999 From: hakan@REDACTED (Hakan Mattsson) Date: Tue, 21 Dec 1999 19:32:38 +0100 (MET) Subject: Retrieving zero answers using mnemosyne In-Reply-To: Message-ID: On Tue, 21 Dec 1999, Sean Hinde wrote: Sean> I am writing an application which will retrieve zero or one answers from a Sean> mnemosyne query but have hit a problem. Sean> Sean> mnemosyne:next_answers/3 appears to be the only way to get a single answer Sean> from a match type query but if there are no matches it hangs. The obvious Sean> thing to do is set Nmin to 0 but this is not allowed. Sean> Sean> Has anyone come across this problem before or have any suggestions of how to Sean> retrieve a single match out of potentially more then one result? Which version of Mnemosyne do you use? In earlier versions Mnemosyne had the problem of not returning any answers even if there was matching records. I think hovewer that this issue has been fixed. I don't really know why Mnemosyne hangs in your query, but I suspect that it is the mnesia:write/1 call inside the query that is the problem. In fact, a query is not allowed to have any side effects at all. Picking just one answer looks rather nice in the Mnemosyne API, but in fact all answers are fetched and allocated on the heap, possibly sent as messages between a couple of processes and eventually one answer is returned to you. A plain: assign(User) -> Wild = mnesia:table_info(ip_pool, wild_pattern), case mnesia:match_object(Wild#ip_pool{user = []}) of [] -> mnesia:abort(no_spare_ip_addresses); [IP | _] -> mnesia:write(#ip_pool{ip = IP, user = User, timestamp = now()}), IP end. mnesia:transaction(fun assign/1, [User]). is a more efficient way to just pick one answer and then possibly update the matching record. (And it does not hang.) /H?kan Sean> Sean> Thanks, Sean> Sean> Sean Sean> Sean> %% Example of what I am trying to achieve.. Sean> assign(User) -> Sean> Handle = Sean> query Sean> [ I.ip || I <- table(ip_pool), Sean> I.user == [] ] Sean> end, Sean> F = fun() -> Sean> Cursor = mnemosyne:cursor(Handle), Sean> case mnemosyne:next_answers(Cursor,1,1) of Sean> [] -> Sean> mnesia:abort(no_spare_ip_addresses); Sean> [IP] -> Sean> mnesia:write(#ip_pool{ip = IP, Sean> user = User, Sean> timestamp = now()}), Sean> mnemosyne:delete_cursor(Cursor), Sean> IP Sean> end Sean> end, Sean> mnesia:transaction(F). Sean> From Sean.Hinde@REDACTED Tue Dec 21 20:08:20 1999 From: Sean.Hinde@REDACTED (Sean Hinde) Date: Tue, 21 Dec 1999 19:08:20 -0000 Subject: Retrieving zero answers using mnemosyne Message-ID: Thanks Hakan, I gave up and decided to implement separate tables for free and busy lists (which is what this thing does). This still leaves the problem of picking one entry from the free list table.. The solution I have tried is to use mnesia:dirty_first/1 in the transaction. This actually works, but with goodness knows what potential side effects! What happens if I put a write lock on the table then call mnesia:dirty_first/1? Surely if nothing can write to the table then I am safe...? Also, I've done a bit more digging on the mnemosyne problem. My code hangs in the line containing mnemosyne:next_answers(Cursor,1,1). Mnemosyne appears to get into an infinite loop in mnemosyne_exec:pending/10 while it is waiting for the answer which will never come. The documentation is also a little vague as it states that "If less than Nmin answers are returned; for example, 0, there are no more answers. If enough answers are not available, but more are expected the functions wait for them" This seems to imply that if there are less than Nmin answers available we will wait forever. As the minimum value for Nmin is 1, any time there are 0 answers available we wait. Thoughts? And... has anyone else out there implemented a free/busy list in erlang which they could share with us? Sean -----Original Message----- From: Hakan Mattsson [mailto:hakan@REDACTED] Sent: 21 December 1999 18:33 To: Sean Hinde Cc: erlang-questions@REDACTED Subject: Re: Retrieving zero answers using mnemosyne On Tue, 21 Dec 1999, Sean Hinde wrote: Sean> I am writing an application which will retrieve zero or one answers from a Sean> mnemosyne query but have hit a problem. Sean> Sean> mnemosyne:next_answers/3 appears to be the only way to get a single answer Sean> from a match type query but if there are no matches it hangs. The obvious Sean> thing to do is set Nmin to 0 but this is not allowed. Sean> Sean> Has anyone come across this problem before or have any suggestions of how to Sean> retrieve a single match out of potentially more then one result? Which version of Mnemosyne do you use? In earlier versions Mnemosyne had the problem of not returning any answers even if there was matching records. I think hovewer that this issue has been fixed. I don't really know why Mnemosyne hangs in your query, but I suspect that it is the mnesia:write/1 call inside the query that is the problem. In fact, a query is not allowed to have any side effects at all. Picking just one answer looks rather nice in the Mnemosyne API, but in fact all answers are fetched and allocated on the heap, possibly sent as messages between a couple of processes and eventually one answer is returned to you. A plain: assign(User) -> Wild = mnesia:table_info(ip_pool, wild_pattern), case mnesia:match_object(Wild#ip_pool{user = []}) of [] -> mnesia:abort(no_spare_ip_addresses); [IP | _] -> mnesia:write(#ip_pool{ip = IP, user = User, timestamp = now()}), IP end. mnesia:transaction(fun assign/1, [User]). is a more efficient way to just pick one answer and then possibly update the matching record. (And it does not hang.) /H?kan Sean> Sean> Thanks, Sean> Sean> Sean Sean> Sean> %% Example of what I am trying to achieve.. Sean> assign(User) -> Sean> Handle = Sean> query Sean> [ I.ip || I <- table(ip_pool), Sean> I.user == [] ] Sean> end, Sean> F = fun() -> Sean> Cursor = mnemosyne:cursor(Handle), Sean> case mnemosyne:next_answers(Cursor,1,1) of Sean> [] -> Sean> mnesia:abort(no_spare_ip_addresses); Sean> [IP] -> Sean> mnesia:write(#ip_pool{ip = IP, Sean> user = User, Sean> timestamp = now()}), Sean> mnemosyne:delete_cursor(Cursor), Sean> IP Sean> end Sean> end, Sean> mnesia:transaction(F). Sean> From hakan@REDACTED Tue Dec 21 21:12:21 1999 From: hakan@REDACTED (Hakan Mattsson) Date: Tue, 21 Dec 1999 21:12:21 +0100 (MET) Subject: Retrieving zero answers using mnemosyne In-Reply-To: Message-ID: On Tue, 21 Dec 1999, Sean Hinde wrote: Sean> The solution I have tried is to use mnesia:dirty_first/1 in the transaction. Sean> Sean> This actually works, but with goodness knows what potential side effects! Sean> What happens if I put a write lock on the table then call Sean> mnesia:dirty_first/1? Surely if nothing can write to the table then I am Sean> safe...? Yes, it is safe to call mnesia:dirty* functions inside transactions. Simultaneous dirty updates on the same records must as always be synchronized somehow (e.g. by using Mnesia's locker). But updating the table while your are iterating over it with mnesia:dirty_first/1 and mnesia:dirty_next/2 may cause surprises. If it is plain updates of existing records everything is fine, but if you are inserting new records or deleting old ones, your updates may cause the hash table may dynamically grow or shrink. As an effect of this, your iteration may find too many or too few keys. Sean> Also, I've done a bit more digging on the mnemosyne problem. My code hangs Sean> in the line containing mnemosyne:next_answers(Cursor,1,1). Mnemosyne appears Sean> to get into an infinite loop in mnemosyne_exec:pending/10 while it is Sean> waiting for the answer which will never come. Sean> Sean> The documentation is also a little vague as it states that "If less than Sean> Nmin answers are returned; for example, 0, there are no more answers. If Sean> enough answers are not available, but more are expected the functions wait Sean> for them" Sean> Sean> This seems to imply that if there are less than Nmin answers available we Sean> will wait forever. As the minimum value for Nmin is 1, any time there are 0 Sean> answers available we wait. Sean> Sean> Thoughts? I suspect that the bugfix I mentioned in my previous mail, never was released... Merry Christmas H?kan From per@REDACTED Thu Dec 23 10:46:45 1999 From: per@REDACTED (Per Hedeland) Date: Thu, 23 Dec 1999 10:46:45 +0100 (MET) Subject: Patches for christmas... Message-ID: <199912230946.KAA23713@super.du.uab.ericsson.se> Hello, I've finally gotten around to updating the "Bugs and Fixes" page on the web site (http://www.erlang.org/faq/bugs_and_fixes.html) with most of the problems that have been reported so far - notably still absent are fixes for Unixware and AIX support (there are some unresolved issues with those), as well as ETK for Windows. Sorry about the lack of individual responses to received reports, but I assure you that they are highly appreciated! --Per Hedeland per@REDACTED From cklin@REDACTED Tue Dec 28 01:54:03 1999 From: cklin@REDACTED (Chuan-kai Lin) Date: Tue, 28 Dec 1999 08:54:03 +0800 Subject: Mnemosyne aggregation functions Message-ID: <19991228085403.A30542@oink.cc.ntu.edu.tw> Greetings, Does anyone know how to use aggregation functions (such as min, max, sum, etc.) in a Mnemosyne query? I cannot find any documentation on this issue, and hope somebody on this list might be able to provide some suggestions. Regards, -- Chuan-kai Lin From gandalf@REDACTED Tue Dec 28 22:32:59 1999 From: gandalf@REDACTED (Vladimir Ulogov) Date: Tue, 28 Dec 1999 16:32:59 -0500 Subject: How scalable mnesia. Message-ID: <38692C8B.9BD447BD@control.att.com> Hello people, Merry Christmas and Happy New year to everybody. Just quick question, is anybody tried to use mnesia on the really bigdatabases (more than 0.5M records) is any restrictioins on number of keys, fields and number of records, how lower mnesia on the big tables. -- %% Vladimir I. Ulogov (gandalf@REDACTED) AT&T Labs "Where lands meets water. Where earth meets air. Where body meets mind. Where space meets time. We like to be on one side, and look at the other." D.Adams "Mostly harmless" From davidg@REDACTED Wed Dec 29 22:52:25 1999 From: davidg@REDACTED (David Gould) Date: Wed, 29 Dec 1999 13:52:25 -0800 Subject: Building RPMS for Erlang R6B, some questions. Message-ID: <19991229135225.A26356@dnai.com> Hi, I am building the recent Erlang source release (R6B) and am trying to make RPM packages for x86 Linux for it, mostly for the chance to do two new things at the same time. [apologies if this is double posted, but I didn't see it on the list the first time] Anyway, a couple of questions: - if I succeed and make a good .src.rpm and .ix86.rpm for Erlang would there be enough interest to post these on the erlang.org site for general consumption? And, would it be useful to submit them to eg, rpmfind, or Mandrake contrib or whatever? - for RPMS of Erlang, I can build either a barebones i386, will run anywhere version, and/or an optimized version for eg i586 and up. Preferences? - Finally, I noticed a lot (about four hundred) of apparently harmless compilation warnings during the build from both the C and the Erlang sources. My experience is that it is easier to maintain and enhance, or even make RPMS for a code tree that compiles completely cleanly. That way it is easy to tell what broke, since _any_ messages mean that your change or environment has a problem. Is there any thought of cleaning any of this up? I would be happy to pitch in and provide patches for some of it (say most of the C files on x86 Linux?). Is there enough interest in this to make it worthwhile? That is, can I get such a patch adopted? Would anyone else care to help? Thanks for your comments. -dg -- David Gould davidg@REDACTED http://www.dnai.com/~davidg 510.536.1443 -- A child of five could understand this! Fetch me a child of five. From esanchez@REDACTED Thu Dec 30 18:40:48 1999 From: esanchez@REDACTED (Enrique Sanchez Vela) Date: Thu, 30 Dec 1999 11:40:48 -0600 Subject: Patches for christmas... References: <199912230946.KAA23713@super.du.uab.ericsson.se> Message-ID: <386B991F.86273F13@citi.com.mx> > Hi, I belive the erl_exit call made out of safe_alloca and CHECK_MEMORY should be using CERR as parameter instead of 1, since using 1 instructs sys_printf to put the output in a temporal buffer who needs safe_alloca and CHECK_MEMORY to succeed in order to be a valid memory location. I also applied the patch as described here to fix the problem with extra_pointer bits and did not help at all, it again assign a 0x20000000 which will never make a match with the 0xc0000000 value of UNSAFE_MASK. If I change the value to 0xe0000000 it works well as well if I undef the Extra_pointer_bits value. regards, enrique. > Hello, > > I've finally gotten around to updating the "Bugs and Fixes" page on the > web site (http://www.erlang.org/faq/bugs_and_fixes.html) with most of > the problems that have been reported so far - notably still absent are > fixes for Unixware and AIX support (there are some unresolved issues > with those), as well as ETK for Windows. Sorry about the lack of > individual responses to received reports, but I assure you that they are > highly appreciated! > > --Per Hedeland > per@REDACTED -- Enrique Sanchez Vela tel/phone (01-8)/(011-528) 357-2267 CITI Consultores S.A. de C.V fax/fax Soporte Tecnico From per@REDACTED Fri Dec 31 00:06:23 1999 From: per@REDACTED (Per Hedeland) Date: Fri, 31 Dec 1999 00:06:23 +0100 (MET) Subject: Patches for christmas... Message-ID: <199912302306.AAA01330@super.du.uab.ericsson.se> Enrique Sanchez Vela wrote: > I belive the erl_exit call made out of safe_alloca and CHECK_MEMORY should >be using CERR as parameter instead of 1, since using 1 instructs sys_printf >to put the output in a temporal buffer who needs safe_alloca and >CHECK_MEMORY to succeed in order to be a valid memory location. Hmm, sounds like a catch-22:-) - we'll need to check that out, but with a correct configure check for EXTRA_POINTER_BITS, you shouldn't end up with *all* memory being "unusable". > I also applied the patch as described here to fix the problem with >extra_pointer bits and did not help at all, it again assign a 0x20000000 >which will never make a match with the 0xc0000000 value of UNSAFE_MASK. If I >change the value to 0xe0000000 it works well as well if I undef the >Extra_pointer_bits value. Strange, I can't see how the configure test could come up with 0x20000000 when using a mask of 0xc0000000 - you do realize that you have to apply the patches to a "virgin" distribution and then run configure? --Per From per@REDACTED Fri Dec 31 01:26:12 1999 From: per@REDACTED (Per Hedeland) Date: Fri, 31 Dec 1999 01:26:12 +0100 (MET) Subject: Building RPMS for Erlang R6B, some questions. Message-ID: <199912310026.BAA01792@super.du.uab.ericsson.se> David Gould wrote: >I am building the recent Erlang source release (R6B) and am trying to make >RPM packages for x86 Linux for it, mostly for the chance to do two new things >at the same time. > >[apologies if this is double posted, but I didn't see it on the list > the first time] You sent a message about this to erlang-maintainers only on the 24th (and haven't gotten a reply to that yet, shame on us:-). >Anyway, a couple of questions: > > - if I succeed and make a good .src.rpm and .ix86.rpm for Erlang would > there be enough interest to post these on the erlang.org site for > general consumption? Definitely. The reason there aren't RPMS for R6B there is basically lack of time and know-how on our part. However, I think the ideal solution would be for you (or anyone) to tell us (in simple words:-) how to build them, and we'll do that and put them there. It's not that I don't trust you:-), but putting up binary distributions received from someone else makes me uneasy, as a matter of principle. Also, Mustafa Kocaturk sent us an RPM spec (and pointed out that I had blown it on the old tclPosixStr.c patch:-) that he had created and was using to build an RPM. I suggested that he should hold off until I'd put up the additional patches that are now on the web site, but I don't know what his plans are. Anyway I'm enclosing his spec below in case it helps (it's all greek to me:-). > And, would it be useful to submit them to eg, rpmfind, or Mandrake > contrib or whatever? I've no idea, but the wider distribution the better...:-) > - for RPMS of Erlang, I can build either a barebones i386, will run anywhere > version, and/or an optimized version for eg i586 and up. Preferences? As far as putting on the web site goes, we can certainly do both, if only one I guess barebones is preferable. > - Finally, I noticed a lot (about four hundred) of apparently harmless > compilation warnings during the build from both the C and the Erlang > sources. My experience is that it is easier to maintain and enhance, or > even make RPMS for a code tree that compiles completely cleanly. That > way it is easy to tell what broke, since _any_ messages mean that your > change or environment has a problem. > > Is there any thought of cleaning any of this up? I would be happy to pitch > in and provide patches for some of it (say most of the C files on x86 > Linux?). Is there enough interest in this to make it worthwhile? That is, > can I get such a patch adopted? Would anyone else care to help? It *should* be cleaned up of course, and contributions are always welcome - I can't at the present time give any promises about such patches getting folded into the actual distribution though, there is always the tedious matter of making sure they don't break things on other platforms, and the necessary prioritization (is that a word?:-) between fixing things that are really broken and those that are "just" annoying. Thanks --Per Hedeland per@REDACTED otp_R6B-0.spec----------------------------------------------------------- # -*- Fundamental -*- Summary: Erlang/OTP BEAM Emulator Implementation Name: otp %define version R6B Version: %{version} Release: 0 %define srcname otp_src_%{version}-%{release} %define pname tmp_patch_%{version}%{release} Copyright: Erlang Public License Version 1.0 (http://www.erlang.org/EPL1_0.txt) Group: Development/Languages Source: http://www.erlang.org/download/%{srcname}.tar.gz URL: http://www.erlang.org Vendor: Ericsson Utveckling AB Packager: Mustafa.Kocaturk@REDACTED Provides: otp erlang erlang-gs_apps erlang-otp_libs Patch0: %{pname}.1.txt Patch1: %{pname}.2.txt Patch2: %{pname}.3.txt %description The Erlang/OTP base system --- Erlang is a programming language which has many features more commonly associated with an operating system than with a programming language: concurrent processes, scheduling, memory management, distribution, networking, etc. OTP stands for Open Telecommunication Platform, and provides an interface between Erlang applications and the underlying host operating system. This package contains all the executables and Erlang source files required to run and develop programs using Erlang, OTP, Erlang Graphics System (GS), and Erlang Applications bundled with the Open Source Erlang. HTML documents and Unix manual pages are excluded, but available as separate packages. %prep # rm -rf $RPM_BUILD_ROOT %setup -n %{srcname} %patch0 %patch1 %patch2 %build ./configure make %install make install %clean # rm -rf $RPM_BUILD_ROOT %files /usr/local/lib/erlang /usr/local/bin /usr/local/man %doc README From seb@REDACTED Fri Dec 31 04:16:55 1999 From: seb@REDACTED (Sebastian Strollo) Date: 31 Dec 1999 04:16:55 +0100 Subject: Patches for christmas... (and a FreeBSD port for New Years) In-Reply-To: Per Hedeland's message of "Thu, 23 Dec 1999 10:46:45 +0100 (MET)" References: <199912230946.KAA23713@super.du.uab.ericsson.se> Message-ID: Thanks for the christmas gift Per! I have now updated the Erlang FreeBSD port (the update is submitted with id ports/15791 and I guess it will be committed as soon as someone has the time). The port update includes the christmas patches (i.e. they are fetched from the erlang.org site). Too bad FreeBSD already released 3.4, this update port wont make it on the CD's for this release... If you can't wait for it to get into the FreeBSD CVS repository you can always fetch it from the pr-database at http://www.freebsd.org/cgi/query-pr.cgi?pr=15791 Happy New Years, /Sebastian