From laufer@REDACTED Sat Jul 1 01:47:17 2000 From: laufer@REDACTED (=?iso-8859-1?Q?Konstantin_L=E4ufer?=) Date: Fri, 30 Jun 2000 18:47:17 -0500 Subject: ICFP 2000 Preliminary Program Message-ID: PRELIMINARY PROGRAM ICFP 2000: International Conference on Functional Programming Montreal, Canada; 18--20 September 2000 http://diwww.epfl.ch/~odersky/icfp2000 associated with PLI 2000: Colloquium on Principles, Logics, and Implementations of High-Level Programming Languages http://www.cs.yorku.ca/pli-00 MONDAY, 18th September Invited Speaker: 8.45-9:45 Chaired by Philip Wadler Limsoon Wong, National University of Singapore, limsoon@REDACTED Session I: 10:15-11:15 Chaired by Shriram Krishnamurthi Regular Expression Types for XML Haruo Hosoya, Univ of Pennsylvania, hahosoya@REDACTED J?r?me Vouillon, University of Pennsylvania Benjamin Pierce, University of Pennsylvania The Influence of Browsers on Evaluators Christian Queinnec, Universite Paris 6, Christian.Queinnec@REDACTED Session II: 11:30-12:30 Chaired by Andrew Wright Static Enforcement of Security with Types Christian Skalka, Johns Hopkins University, ces@REDACTED Scott Smith, Johns Hopkins University Information Flow Inference For Free Francois Pottier, INRIA, Francois.Pottier@REDACTED Sylvain Conchon, INRIA Session III: 14:00-15:30 Chaired by Greg Morrisett Type-Safe Cast (Functional pearl) Stephanie Weirich, Cornell University, sweirich@REDACTED Typed Compilation of Inclusive Subtyping Karl Crary, Carnegie Mellon University, crary@REDACTED Fully Reflexive Intensional Type Analysis Zhong Shao, Yale University, shao-zhong@REDACTED Valery Trifonov, Yale University Bratin Saha, Yale University Session IV: 16:00-17:30 Chaired by Atsushi Ohori More Types for Nested Data Parallel Programming Manuel Chakravarty, University of New South Wales, chak@REDACTED Gabriele Keller, University of Technology, Sydney FranTk - A declarative GUI language for Haskell Meurig Sage, University of Glasgow, meurig@REDACTED Functional Programming in C++ Yannis Smaragdakis, Georgia Institute of Technology, yannis@REDACTED Brian McNamara, Georgia Institute of Technology Program chair's report, plus a teaser: 17:30-17:45 Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design (I) (Functional pearl) Chris Okasaki, Columbia University, cdo@REDACTED TUESDAY, 19th September Invited Speaker: 8.45-9:45 Chaired by Xavier Leroy Benjamin Pierce, University of Pennsylvania Session V: 10:15-11:15 Chaired by Richard Bird Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design (II) (Functional pearl) Chris Okasaki, Columbia University Calculating Linear Time Algorithms for Solving Maximum Weightsum Problems Isao Sasano, University of Tokyo Zhenjiang Hu, University of Tokyo Masato Takeichi, University of Tokyo Mizuhito Ogawa, NTT Session VI: 11:30-12:30 Chaired by Susan Eisenbach Cheap Eagerness: Speculative Evaluation in a Lazy Functional Language Karl-Filip Faxen, KTH, Stockholm An Operational Semantics for Parallel Lazy Evaluation Clem Baker-Finch, University of Canberra David King, Motorola Labs Phil Trinder, Heriot-Watt University Session VII: 14:00-15:30 Chaired by Eugenio Moggi Recursive Monadic Bindings Levent Erkok, Oregon Graduate Institute John Launchbury, Oregon Graduate Institute Deriving Backtracking Monad Transformers (Functional pearl) Ralf Hinze, Universit?t Bonn Intersection Types and Computational Effects Frank Pfenning, Carnegie Mellon University Rowan Davies, Carnegie Mellon University Session VIII: 16:00-17:30 Chaired by Ralf Hinze Syntactic Accidents in Program Analysis Olivier Danvy, BRICS, University of Aarhus Daniel Damian, BRICS, University of Aarhus Recursive Types for Dummies (Functional pearl) Vladimir Gapeyev Michael Levin, University of Pennsylvania Benjamin Pierce, University of Pennsylvania The Duality of Computation Hugo Herbelin, INRIA Pierre-Louis Curien, CNRS and University Paris 7 Programming Contest Award Presentations: 17:30-18:00 Chaired by Greg Morrisett WEDNESDAY, 20th September Invited Speaker: 8.45-9:45 Chaired by Andrew Wright Carl Seger, Intel Session IX: 10:15-11:15 Chaired by Xavier Leroy Understanding Memory Allocation of Scheme Programs Manuel Serrano, University of Nice Hans-J Boehm, Hewlett-Packard Non-stop Haskell Tony Field, Imperial College Andy Cheadle, Imperial College Simon Marlow, Microsoft Research Simon Peyton Jones, Microsoft Research Lyndon While, UWA, Perth Session X: 11:30-12:30 Chaired by Philip Wadler QuickCheck, A Lightweight Tool for Random Testing of Haskell Programs Koen Claessen, Chalmers University of Technology, koen@REDACTED John Hughes, Chalmers University of Technology Composing contracts: an adventure in financial engineering (Functional pearl) Simon Peyton Jones, Microsoft Research Jean-Marc Eber, Societe Generale Julian Seward, Glasgow University =========================================================================== For more information, see the web pages for PLI 2000 : http://www.cs.yorku.ca/pli-00 ICFP 2000: http://diwww.epfl.ch/~odersky/icfp2000 From richardc@REDACTED Tue Jul 4 14:10:27 2000 From: richardc@REDACTED (Richard Carlsson) Date: Tue, 4 Jul 2000 14:10:27 +0200 (MET DST) Subject: Constant lists In-Reply-To: <200006260306.WAA20991@node-02.advancenet.net> Message-ID: On Sun, 25 Jun 2000, James Hague wrote: > In Erlang, if you want to have a constant, medium-sized list, what's the > best way of dealing with it? In Lisp, for example, you use defparameter > to define a list and then reference it when you need it. > > In Erlang, you could do this: > > constant_list() -> [item1, item2, item3, item4, ...]. > > but then that list is actually created each time you call it, which is > messy. It's not really a constant in this case. For association lists, > you could code it in a Prolog style: > > name(john) -> 7; > name(bjorn) -> 3; > name(james) -> 9. > > but this isn't general. Or, you could read the term from disk, but then > only the current process has access to it. Putting it in a global ets > table results in the list being copied each time it is fetched. > > Sure would be nice to have honest-to-goodness constant lists and tuples. > Any thoughts? > > James This is something that the compiler should detect and handle better (by creating a static structure instead of generating code to rebuild it at each call), but it also requires that the garbage collector can handle special memory areas for constant data, so it is not all that easy to implement. The same problem occurs with e.g. floating-point constants. We are working on it in HiPE, but I don't know about coming releases of OTP. Bj?rn? Robert? /Richard Carlsson Richard Carlsson (richardc@REDACTED) (This space intentionally left blank.) E-mail: Richard.Carlsson@REDACTED WWW: http://www.csd.uu.se/~richardc/ From richardc@REDACTED Tue Jul 4 14:32:44 2000 From: richardc@REDACTED (Richard Carlsson) Date: Tue, 4 Jul 2000 14:32:44 +0200 (MET DST) Subject: Constant lists In-Reply-To: Message-ID: On Tue, 4 Jul 2000, Richard Carlsson wrote: > This is something that the compiler should detect and handle better (by > creating a static structure instead of generating code to rebuild it at > each call), but it also requires that the garbage collector can handle > special memory areas for constant data, so it is not all that easy to > implement. The same problem occurs with e.g. floating-point constants. We > are working on it in HiPE, but I don't know about coming releases of OTP. > Bj?rn? Robert? > > /Richard Carlsson Correction: we *are* already doing this in HiPE. (Thanks, Erik.) http://www.csd.uu.se/projects/hipe/osh/ (E.g., try calling, say, `io:module_info()' a couple of thousand times, probably being the most important Erlang benchmark ever :-).) /Richard Richard Carlsson (richardc@REDACTED) (This space intentionally left blank.) E-mail: Richard.Carlsson@REDACTED WWW: http://www.csd.uu.se/~richardc/ From rv@REDACTED Tue Jul 4 15:28:06 2000 From: rv@REDACTED (Robert Virding) Date: Tue, 04 Jul 2000 15:28:06 +0200 Subject: Constant lists In-Reply-To: Your message of "Tue, 04 Jul 2000 14:10:27 +0200." Message-ID: <200007041328.PAA20093@trana.bluetail.com> Richard Carlsson writes: > >This is something that the compiler should detect and handle better (by >creating a static structure instead of generating code to rebuild it at >each call), but it also requires that the garbage collector can handle >special memory areas for constant data, so it is not all that easy to >implement. The same problem occurs with e.g. floating-point constants. We >are working on it in HiPE, but I don't know about coming releases of OTP. >Bj?rn? Robert? This is something BEAM does not do at the moment, for just the reason you mention. There are no special areas for module data, constant or otherwise. As far as know there are no plans for this, at least Bj?rn has not said anything. He is on holidays now. Robert -- Robert Virding Tel: +46 (0)8 692 22 12 Bluetail AB Email: rv@REDACTED Hantverkargatan 78 WWW: http://www.bluetail.com/~rv SE-112 38 Stockholm, SWEDEN "Folk s?ger att jag inte bryr mig om n?gonting, men det skiter jag i". From daniel.neri@REDACTED Tue Jul 4 17:07:18 2000 From: daniel.neri@REDACTED (Daniel Neri) Date: 04 Jul 2000 17:07:18 +0200 Subject: Passive FTP Message-ID: Greetings, The lazy engineer in me wonders if someone has already hacked ftp.erl (from inets) to support this... Regards, --Daniel -- Daniel Neri mailto:dn@REDACTED Sigicom AB, Sweden http://www.sigicom.se From etxhste@REDACTED Wed Jul 5 12:10:08 2000 From: etxhste@REDACTED (Hakan Stenholm) Date: Wed, 05 Jul 2000 12:10:08 +0200 Subject: Erlang and multi processors Message-ID: <39630980.5853FF30@etxb.ericsson.se> How does Erlang deal with multi processor machines (i.e. more than one CPU in the same machine) ? Does spawn/3 get distributed on the CPUs or is spawn/4 needed - one node per CPU which would imply that one Erlang VM is run per CPU (which seams a bit costly if one has many CPUs) ? H?kan Stenholm ps: how does one relpy to questions on the mailling list so that the answear appears on the list ? - mails to erlang-questions@REDACTED as well ? From sam@REDACTED Wed Jul 5 12:37:15 2000 From: sam@REDACTED (Samuel Tardieu) Date: 05 Jul 2000 12:37:15 +0200 Subject: Erlang and multi processors In-Reply-To: Hakan Stenholm's message of "Wed, 05 Jul 2000 12:10:08 +0200" References: <39630980.5853FF30@etxb.ericsson.se> Message-ID: <2000-07-05-12-37-15+trackit+sam@antinea.enst.fr> >>>>> "Hakan" == Hakan Stenholm writes: Hakan> How does Erlang deal with multi processor machines (i.e. more Hakan> than one CPU in the same machine) ? Does spawn/3 get Hakan> distributed on the CPUs or is spawn/4 needed - one node per CPU Hakan> which would imply that one Erlang VM is run per CPU (which Hakan> seams a bit costly if one has many CPUs) ? The beam VM runs in one system thread AFAIK, which means on one processor at a time. You have to use multiple Erlang nodes, which will hopefully be placed appropriately by the operating system. Hakan> ps: how does one relpy to questions on the mailling list so Hakan> that the answear appears on the list ? - mails to Hakan> erlang-questions@REDACTED as well ? Yup. Would you like a erlang-answers@REDACTED alias? :) (just kidding) Sam -- Samuel Tardieu -- sam@REDACTED From dgud@REDACTED Wed Jul 5 12:42:57 2000 From: dgud@REDACTED (Dan Gudmundsson) Date: Wed, 5 Jul 2000 12:42:57 +0200 (MET DST) Subject: Erlang and multi processors In-Reply-To: <2000-07-05-12-37-15+trackit+sam@antinea.enst.fr> References: <39630980.5853FF30@etxb.ericsson.se> <2000-07-05-12-37-15+trackit+sam@antinea.enst.fr> Message-ID: <14691.4401.279098.821728@gargle.gargle.HOWL> Pekka Hedqvist (with Tony's help) did a multithreaded version as an master thesis a couple of years ago. But I assume the result wasn't as good as expected, cause that code was never used. /Dan Samuel Tardieu writes: > >>>>> "Hakan" == Hakan Stenholm writes: > > Hakan> How does Erlang deal with multi processor machines (i.e. more > Hakan> than one CPU in the same machine) ? Does spawn/3 get > Hakan> distributed on the CPUs or is spawn/4 needed - one node per CPU > Hakan> which would imply that one Erlang VM is run per CPU (which > Hakan> seams a bit costly if one has many CPUs) ? > > The beam VM runs in one system thread AFAIK, which means on one > processor at a time. You have to use multiple Erlang nodes, which will > hopefully be placed appropriately by the operating system. > > Hakan> ps: how does one relpy to questions on the mailling list so > Hakan> that the answear appears on the list ? - mails to > Hakan> erlang-questions@REDACTED as well ? > > Yup. Would you like a erlang-answers@REDACTED alias? :) (just > kidding) > > Sam > -- > Samuel Tardieu -- sam@REDACTED From sw@REDACTED Wed Jul 5 13:14:23 2000 From: sw@REDACTED (Stefan Willehadson) Date: Wed, 05 Jul 2000 13:14:23 +0200 Subject: xml/wml stylesheets Message-ID: <3963188F.C985AC31@cellpt.com> Has anyone used/implemented support for xml/wml stylesheets within Erlang? /stefan ------------------------------------------------------------------- Stefan Willehadson sw@REDACTED mobile: +46 707961474 CellPoint Systems www.cellpt.com office: +46 86332726 From etxuwig@REDACTED Wed Jul 5 13:18:31 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Wed, 5 Jul 2000 13:18:31 +0200 (MET DST) Subject: xml/wml stylesheets In-Reply-To: <3963188F.C985AC31@cellpt.com> Message-ID: On Wed, 5 Jul 2000, Stefan Willehadson wrote: >Has anyone used/implemented support for xml/wml stylesheets within >Erlang? > >/stefan If you can wait until the Erlang User Conference in October, there will be some work presented there. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From sw@REDACTED Wed Jul 5 13:21:04 2000 From: sw@REDACTED (Stefan Willehadson) Date: Wed, 05 Jul 2000 13:21:04 +0200 Subject: xml/wml stylesheets References: Message-ID: <39631A20.AF5CAC94@cellpt.com> Ulf Wiger wrote: > >Has anyone used/implemented support for xml/wml stylesheets within > >Erlang? > If you can wait until the Erlang User Conference in October, there > will be some work presented there. Unfortunately I cannot wait until October, I need to finish the things I'm doing now and it would be nice if I could use stylesheets when formatting wml pages that uses data formatted in xml. Maybe you have some code that you can share now ;-) /stefan ------------------------------------------------------------------- Stefan Willehadson sw@REDACTED mobile: +46 707961474 CellPoint Systems www.cellpt.com office: +46 86332726 From laufer@REDACTED Thu Jul 6 02:01:00 2000 From: laufer@REDACTED (=?iso-8859-1?Q?Konstantin_L=E4ufer?=) Date: Wed, 5 Jul 2000 19:01:00 -0500 Subject: Preliminary program for ICFP 2000 (updated) Message-ID: PRELIMINARY PROGRAM ICFP 2000: International Conference on Functional Programming Montreal, Canada; 18--20 September 2000 http://diwww.epfl.ch/~odersky/icfp2000 associated with PLI 2000: Colloquium on Principles, Logics, and Implementations of High-Level Programming Languages http://www.cs.yorku.ca/pli-00 MONDAY, 18th September Invited Speaker: 8.45-9:45 Chaired by Philip Wadler Limsoon Wong, National University of Singapore, limsoon@REDACTED Session I: 10:15-11:15 Chaired by Shriram Krishnamurthi Regular Expression Types for XML Haruo Hosoya, Univ of Pennsylvania, hahosoya@REDACTED J?r?me Vouillon, University of Pennsylvania Benjamin Pierce, University of Pennsylvania The Influence of Browsers on Evaluators Christian Queinnec, Universite Paris 6, Christian.Queinnec@REDACTED Session II: 11:30-12:30 Chaired by Andrew Wright Static Enforcement of Security with Types Christian Skalka, Johns Hopkins University, ces@REDACTED Scott Smith, Johns Hopkins University Information Flow Inference For Free Francois Pottier, INRIA, Francois.Pottier@REDACTED Sylvain Conchon, INRIA Session III: 14:00-15:30 Chaired by Greg Morrisett Type-Safe Cast (Functional pearl) Stephanie Weirich, Cornell University, sweirich@REDACTED Typed Compilation of Inclusive Subtyping Karl Crary, Carnegie Mellon University, crary@REDACTED Fully Reflexive Intensional Type Analysis Valery Trifonov, Yale University Bratin Saha, Yale University Zhong Shao, Yale University Session IV: 16:00-17:30 Chaired by Atsushi Ohori More Types for Nested Data Parallel Programming Manuel Chakravarty, University of New South Wales, chak@REDACTED Gabriele Keller, University of Technology, Sydney FranTk - A declarative GUI language for Haskell Meurig Sage, University of Glasgow, meurig@REDACTED Functional Programming in C++ Yannis Smaragdakis, Georgia Institute of Technology, yannis@REDACTED Brian McNamara, Georgia Institute of Technology Program chair's report, plus a teaser: 17:30-17:45 Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design (I) (Functional pearl) Chris Okasaki, Columbia University, cdo@REDACTED TUESDAY, 19th September Invited Speaker: 8.45-9:45 Chaired by Xavier Leroy Benjamin Pierce, University of Pennsylvania Session V: 10:15-11:15 Chaired by Richard Bird Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design (II) (Functional pearl) Chris Okasaki, Columbia University Calculating Linear Time Algorithms for Solving Maximum Weightsum Problems Isao Sasano, University of Tokyo Zhenjiang Hu, University of Tokyo Masato Takeichi, University of Tokyo Mizuhito Ogawa, NTT Session VI: 11:30-12:30 Chaired by Susan Eisenbach Cheap Eagerness: Speculative Evaluation in a Lazy Functional Language Karl-Filip Faxen, KTH, Stockholm An Operational Semantics for Parallel Lazy Evaluation Clem Baker-Finch, University of Canberra David King, Motorola Labs Phil Trinder, Heriot-Watt University Session VII: 14:00-15:30 Chaired by Eugenio Moggi Recursive Monadic Bindings Levent Erkok, Oregon Graduate Institute John Launchbury, Oregon Graduate Institute Deriving Backtracking Monad Transformers (Functional pearl) Ralf Hinze, Universit?t Bonn Intersection Types and Computational Effects Frank Pfenning, Carnegie Mellon University Rowan Davies, Carnegie Mellon University Session VIII: 16:00-17:30 Chaired by Ralf Hinze Syntactic Accidents in Program Analysis: On the Impact of the CPS Transformation Olivier Danvy, BRICS, University of Aarhus Daniel Damian, BRICS, University of Aarhus Recursive Types for Dummies (Functional pearl) Vladimir Gapeyev Michael Levin, University of Pennsylvania Benjamin Pierce, University of Pennsylvania The Duality of Computation Hugo Herbelin, INRIA Pierre-Louis Curien, CNRS and University Paris 7 Programming Contest Award Presentations: 17:30-18:00 Chaired by Greg Morrisett WEDNESDAY, 20th September Invited Speaker: 8.45-9:45 Chaired by Andrew Wright Carl Seger, Intel Session IX: 10:15-11:15 Chaired by Xavier Leroy Understanding Memory Allocation of Scheme Programs Manuel Serrano, University of Nice Hans-J Boehm, Hewlett-Packard Non-stop Haskell Tony Field, Imperial College Andy Cheadle, Imperial College Simon Marlow, Microsoft Research Simon Peyton Jones, Microsoft Research Lyndon While, UWA, Perth Session X: 11:30-12:30 Chaired by Philip Wadler QuickCheck, A Lightweight Tool for Random Testing of Haskell Programs Koen Claessen, Chalmers University of Technology, koen@REDACTED John Hughes, Chalmers University of Technology Composing contracts: an adventure in financial engineering (Functional pearl) Simon Peyton Jones, Microsoft Research Jean-Marc Eber, Societe Generale VENUE PLI 2000 will be held in Montr?al, at Holiday Inn Select Jardin Sinomonde 99 Viger Avenue West Montr?al (Qu?bec) Canada http://www.hiselect-yul.com/indexa.html mailto: hiselect-yul@REDACTED SPONSORS ICFP 2000 is supported by Cambridge University Press, Compaq, EAPLS, Microsoft Research, the Universit? de Montr?al and Sun Microsystems. From hal@REDACTED Thu Jul 6 06:01:29 2000 From: hal@REDACTED (Hal Snyder) Date: 05 Jul 2000 23:01:29 -0500 Subject: Dialogic, again Message-ID: <87r9976h5y.fsf@ghidra.vail> We would like to get Erlang talking to some Dialogic IVR cards as directly as possible rather than via a messy proxy server. Does anyone reading this list have experience he/she is willing to share on the subject? For example: 1. What is the best OS these days for mixing Erlang and Dialogic? 2. What is the best way to interface the Erlang runtime system with Dialogic hardare? Ports? 3. Are there any tricks to starting up the server? Back in January of 1999 I asked a similar question. Just wondering if anything new has happened. From arndt@REDACTED Thu Jul 6 09:27:47 2000 From: arndt@REDACTED (Arndt Jonasson) Date: 6 Jul 2000 07:27:47 GMT Subject: Abstract Form References: Message-ID: <8k1cdj$ppr$1@news.du.uab.ericsson.se> In article , Vance Shipley wrote: > >I've been looking at the stdlib modules which parse >Erlang. There are a few which return {ok, AbsForm}. >I can't find a definition for this anywhere. The >manual page for erl_parse says: > >parse_form(Tokens) -> {ok, AbsForm} | {error, ErrorInfo} >... > AbsForm = term() >... > See section Abstract Form below for a description > of AbsForm. > >Unfortunately the section "Abstract Form" at the bottom >of this page says: > > To be supplied There is still no official documentation of the Erlang abstract format. It is described in an appendix to the "Erlang Reference Manual" by Jonas Barklund, which hasn't been made available to users yet - as far as I know, there is no reason why it couldn't, except that it needs to be updated with the latest language changes. For the moment, the module 'erl_id_trans' in the 'stdlib' application provides a kind of definition (without the semantics). It traverses every kind of Erlang abstract structure, and does nothing with it (it's an identity parse transform). The source code for the parser, "erl_parse.yrl", may also be sufficiently readable to serve as a definition. -- Arndt Jonasson Ericsson Utvecklings AB arndt@REDACTED ?T2/UAB/F/P +46 8 719 75 87 126 25 Stockholm From Bruce@REDACTED Thu Jul 6 09:36:17 2000 From: Bruce@REDACTED (Bruce Fitzsimons) Date: Thu, 6 Jul 2000 09:36:17 +0200 Subject: Dialogic, again References: <87r9976h5y.fsf@ghidra.vail> Message-ID: <060f01bfe71c$df743a20$0121970a@fitzsimons.org> > 1. What is the best OS these days for mixing Erlang and Dialogic? If you can bear the wait...maybe Linux? I've been waiting for months for the new Linux drivers. July is the latest date...but its supposed to be firmer. > 2. What is the best way to interface the Erlang runtime system with > Dialogic hardare? Ports? I'm attempting to do it as a linked-in driver for performance reasons. It does have a limitation that I can't play or record to memory as the binary gets too big very quickly. I don't remember the limit on binary size for passing to/from a driver - mabe 32K? Linked-in drivers seem an easy choice for this, as I'm using the async call-back Dialogic model so its just message passing to/from Erlang. I have done some design docs and coded it but I haven't yet linked it into Erlang (yum, raw undebugged C). I'm intending to open source it under the EPL once it works. I've just been reluctant to build a development environment on my NT box as its easier under Linux (my target platform). That was 2 months ago... I know someone else on this list has done an erlang/dialogic driver, but I don't remember who, and I think it was commercially sensitive. Still, any pointers would be great. Cheers, Bruce PS Mine is called Erlogic and once it limps (eg I can play voice, dial the phone) I'll put it on sourceforge. Its only designed for analog boards (dxxx calls). From vances@REDACTED Thu Jul 6 21:18:17 2000 From: vances@REDACTED (Vance Shipley) Date: Thu, 6 Jul 2000 15:18:17 -0400 Subject: Dialogic, again In-Reply-To: <060f01bfe71c$df743a20$0121970a@fitzsimons.org> Message-ID: We have built, and use commercially, a dialogic driver which drives the DTI/240SC and DTI/241SC type cards we use. We run a gen_fsm for each timeslot and the driver messages back and forth directly to them. The driver is a globally registered process called "dialogic" and the timeslot processes are registered as well. Currently we only do DS1 alarms, AB bit signaling and tone generation and reception. No voice. I do plan to release this driver opensource once I have the time to strip out the commercially sensitive parts and package it with a sample application. I think we need a good sample "application" as all the contributions I've seen are simple source files. We use the full application tools here to build releases which include supervision et. al. An example would have been very useful to us as we figured out how to write .rel, .app, etc. files. Hopefully our implementations are good guides but peer review will tell. :) We also have drivers for Netaccess (Brooktrout) ISDN boards, Epicom DS3 cards and Audiocodes VoIP boards. -Vance From Pekka.Hedqvist@REDACTED Thu Jul 6 23:34:20 2000 From: Pekka.Hedqvist@REDACTED (Pekka.Hedqvist@REDACTED) Date: Fri, 7 Jul 2000 07:34:20 +1000 (EST) Subject: Erlang and multi processors In-Reply-To: <14691.4401.279098.821728@gargle.gargle.HOWL> References: <39630980.5853FF30@etxb.ericsson.se> <2000-07-05-12-37-15+trackit+sam@antinea.enst.fr> <14691.4401.279098.821728@gargle.gargle.HOWL> Message-ID: <14692.64348.342930.551128@eddieware.lodbroker.com> Not true, the results were in, short quite, good but the prototype were a prototype and also contained some design decisions that had to be rethought and reimplemented too. But in the end it was primarily lack of resources why there is no industrial quality MP Erlang today. Dan Gudmundsson writes: > > Pekka Hedqvist (with Tony's help) did a multithreaded version as an > master thesis a couple of years ago. But I assume the result wasn't > as good as expected, cause that code was never used. > > /Dan > > Samuel Tardieu writes: > > >>>>> "Hakan" == Hakan Stenholm writes: > > > > Hakan> How does Erlang deal with multi processor machines (i.e. more > > Hakan> than one CPU in the same machine) ? Does spawn/3 get > > Hakan> distributed on the CPUs or is spawn/4 needed - one node per CPU > > Hakan> which would imply that one Erlang VM is run per CPU (which > > Hakan> seams a bit costly if one has many CPUs) ? > > > > The beam VM runs in one system thread AFAIK, which means on one > > processor at a time. You have to use multiple Erlang nodes, which will > > hopefully be placed appropriately by the operating system. > > > > Hakan> ps: how does one relpy to questions on the mailling list so > > Hakan> that the answear appears on the list ? - mails to > > Hakan> erlang-questions@REDACTED as well ? > > > > Yup. Would you like a erlang-answers@REDACTED alias? :) (just > > kidding) > > > > Sam > > -- > > Samuel Tardieu -- sam@REDACTED > > From hal@REDACTED Fri Jul 7 07:49:22 2000 From: hal@REDACTED (Hal Snyder) Date: 07 Jul 2000 00:49:22 -0500 Subject: Dialogic, again In-Reply-To: "Vance Shipley"'s message of "Thu, 6 Jul 2000 15:18:17 -0400" References: Message-ID: <87u2e24hi5.fsf@ghidra.vail> "Vance Shipley" writes: > We have built, and use commercially, a dialogic driver which drives > the DTI/240SC and DTI/241SC type cards we use. We run a gen_fsm for > each timeslot and the driver messages back and forth directly to them. > The driver is a globally registered process called "dialogic" and the > timeslot processes are registered as well. Currently we only do DS1 > alarms, AB bit signaling and tone generation and reception. No voice. We use 240-series cards, typically four to a server, with a custom platform running on SCO ODT. Erlang looks very interesting as a way of simplifying and updating significant parts of the code base. Due to the condition of Dialogic drivers, UnixWare looks like the best candidate for supporting the new servers. Haven't tried it yet for ERTS, though. I've been trying for years now to get Dialogic driver writers' docs released so we can get better drivers and run on truly reliable platforms including FreeBSD and OpenBSD. > I do plan to release this driver opensource once I have the time to > strip out the commercially sensitive parts and package it with a > sample application. That sounds terrific. > I think we need a good sample "application" as all the contributions > I've seen are simple source files. We have been studying the Eddieware source as an example of a nontrivial Erlang system, and learned a lot. > We use the full application tools here to build releases which > include supervision et. al. An example would have been very useful > to us as we figured out how to write .rel, .app, etc. files. > Hopefully our implementations are good guides but peer review will > tell. :) Ack, the payoff of Open Source. Please don't feel you have to wait until everything is perfectly polished to share what you have learned with the readers of this list! > We also have drivers for Netaccess (Brooktrout) ISDN boards, Epicom > DS3 cards and Audiocodes VoIP boards. Not familiar with Epicom or Brooktrout, but others here more expert in telephony surely are. Will be looking at Audiocodes soon. From hal@REDACTED Mon Jul 10 03:41:47 2000 From: hal@REDACTED (Hal Snyder) Date: 09 Jul 2000 20:41:47 -0500 Subject: discovery Message-ID: <87em52iwx0.fsf@ghidra.vail> A host is supposed to join an Erlang cluster on boot. Do we have to give it an explicit IP address or FQDN of some other host(s) in the cluster? We're considering a multicast group address for this purpose. But maybe there's already a solution and I just haven't found it in the docs. What's done with Real Life Erlang apps to get nodes to join up? Ideally isn't a cluster a fluid thing, without hard-coded physical node assignments? [Load balancing/failover have such nice chicken-and-egg problems.] From Sean.Hinde@REDACTED Mon Jul 10 13:23:37 2000 From: Sean.Hinde@REDACTED (Sean Hinde) Date: Mon, 10 Jul 2000 12:23:37 +0100 Subject: Simple Applet using Jinterface Message-ID: <402DD461F109D411977E0008C791C312564FCF@imp02mbx.one2one.co.uk> Has anyone managed to write a simple applet which just connects back to an erlang node on the web server platform - much like the timer example in jive? I'm getting completely bogged down in all sorts of stuff about epmd etc, none of which will work in a browser context (I think?) Is there a simple way to use this stuff in an applet context??? Thanks, Sean NOTICE AND DISCLAIMER: This email (including attachments) is confidential. If you have received this email in error please notify the sender immediately and delete this email from your system without copying or disseminating it or placing any reliance upon its contents. We cannot accept liability for any breaches of confidence arising through use of email. Any opinions expressed in this email (including attachments) are those of the author and do not necessarily reflect our opinions. We will not accept responsibility for any commitments made by our employees outside the scope of our business. We do not warrant the accuracy or completeness of such information. From vances@REDACTED Sun Jul 9 03:27:10 2000 From: vances@REDACTED (Vance Shipley) Date: Sat, 8 Jul 2000 21:27:10 -0400 Subject: Graphing FSMs In-Reply-To: Message-ID: I have written a tool which parses gen_fsm behaviour source files and creates a graph description file suitable as input to dot (a tool for creating postscript/gif pictures of directed graphs). Get dot at http://www.research.att.com/sw/tools/graphviz. Right now it just plots the states and what events drive them between states but that's our biggest requirement here at Motivity. It seems to work pretty well. It should handle most cases as I put a fair bit of work into reverse engineering the Erlang Abstract Form and the Preprocessor tools. I have attached graph.erl, I hope someone finds it useful. Please let me now if you do. If you further it please share. -Vance Vance Shipley, Motivity Telecom Inc. -------------- next part -------------- A non-text attachment was scrubbed... Name: graph.erl Type: application/octet-stream Size: 5122 bytes Desc: not available URL: From vances@REDACTED Fri Jul 7 19:16:38 2000 From: vances@REDACTED (Vance Shipley) Date: Fri, 7 Jul 2000 13:16:38 -0400 Subject: Dialogic, again In-Reply-To: <87u2e24hi5.fsf@ghidra.vail> Message-ID: } Due to the condition of Dialogic drivers, UnixWare looks like the best } candidate for supporting the new servers. Haven't tried it yet for } ERTS, though. Yes, we use Unixware because Dialogic don't support Solaris. That will change soon though as Dialogic are releases Linux drivers July 15th (it was supposed to be July 1st but they slipped). We have ported R6B to Unixware. It wasn't very difficult but we do have a significant problem remaining to be resolved and that is that distribution doesn't work. We are able to communicate between the drivers and the Erlang node but not between Erlang nodes. I did spend a lot of time on this problem but have set it aside for now. Currently the only reason I use Unixware is Dialogic's lack of support for Solaris. Once they support Linux I'll probably just use Linux for projects utilizing Dialogic cards and Solaris for everything else. } I've been trying for years now to get Dialogic driver writers' docs } released so we can get better drivers and run on truly reliable } platforms including FreeBSD and OpenBSD. They have a real attitude about that. They have released that info to OEMs in the past but they were big, big customers. } We have been studying the Eddieware source as an example of a } nontrivial Erlang system, and learned a lot. That hadn't occured to me. I will do just that. -Vance From Sean.Hinde@REDACTED Fri Jul 7 18:43:58 2000 From: Sean.Hinde@REDACTED (Sean Hinde) Date: Fri, 7 Jul 2000 17:43:58 +0100 Subject: Simple Applet using Jinterface Message-ID: <402DD461F109D411977E0008C791C312564FCA@imp02mbx.one2one.co.uk> Has anyone managed to write a simple applet which just connects back to an erlang node on the web server platform - much like the timer example in jive? I'm getting completely bogged down in all sorts of stuff about epmd etc, none of which will work in a browser context (I think?) Is there a simple way to use this stuff in an applet context??? Thanks, Sean NOTICE AND DISCLAIMER: This email (including attachments) is confidential. If you have received this email in error please notify the sender immediately and delete this email from your system without copying or disseminating it or placing any reliance upon its contents. We cannot accept liability for any breaches of confidence arising through use of email. Any opinions expressed in this email (including attachments) are those of the author and do not necessarily reflect our opinions. We will not accept responsibility for any commitments made by our employees outside the scope of our business. We do not warrant the accuracy or completeness of such information. From rv@REDACTED Tue Jul 11 13:45:27 2000 From: rv@REDACTED (Robert Virding) Date: Tue, 11 Jul 2000 13:45:27 +0200 Subject: Graphing FSMs In-Reply-To: Your message of "Sat, 08 Jul 2000 21:27:10 EDT." Message-ID: <200007111145.NAA00952@trana.bluetail.com> "Vance Shipley" writes: > >parse_function(IoDevice, FunctionName, H, T) -> > case H of > % if there are two args; 'Event' & 'StateData' then it's a state > {clause, Line, [{var, Line, 'Event'}, {var, Line, 'StateData'}], > _Guard, Body} -> > parse_clause(IoDevice, FunctionName, Body); > _ -> > true > end, > % if the function has multiple clauses we parse them all > case T of > [Head|Tail] -> > parse_function(IoDevice, FunctionName, Head, Tail); > [Head] -> > parse_function(IoDevice, FunctionName, Head, []); > [] -> > true > end. Just a quick comment, without reading at what you are really doing. The second clause in the second case will never be used because the pattern in the clause will catch the last element. Although the way the code is written is does not matter and the second clause is unnecessary anyway. Watch the line number variable Line, writing it this way forces them to be on the same line. Why not write it like: parse_function(IoDevice, FuncName, Cls) -> lists:foreach(fun ({clause,Line,[{var,Le,'Event'},{var,Ls,'SateData'}], _Guard,Body}) -> parse_clause(IoDevice, FuncName, Body); (_Clause) -> ok end, Cls). Or if you prefer not to use higher-order functions: parse_function(IoDevice, FuncName, [{clause,Line,[{var,Le,'Event'},{var,Ls,'SateData'}], _Guard,Body}|Cls]) -> parse_function(IoDevice, FuncName, Body), parse_function(IoDevice, FuncName, Cls); parse_function(IoDevice, FuncName, [Cl|Cls]) -> parse_function(IoDevice, FuncName , Cls); parse_function(IoDevice, Funcname, []) -> true. Similar for parse_function and parse_clause. Robert -- Robert Virding Tel: +46 (0)8 692 22 12 Bluetail AB Email: rv@REDACTED Hantverkargatan 78 WWW: http://www.bluetail.com/~rv SE-112 38 Stockholm, SWEDEN "Folk s?ger att jag inte bryr mig om n?gonting, men det skiter jag i". From not.for.email@REDACTED Tue Jul 11 19:05:18 2000 From: not.for.email@REDACTED (Gordon Beaton) Date: 11 Jul 2000 17:05:18 GMT Subject: Simple Applet using Jinterface References: <402DD461F109D411977E0008C791C312564FCF@imp02mbx.one2one.co.uk> Message-ID: <8kfk4e$qn2$1@news.du.uab.ericsson.se> From etxuwig@REDACTED Wed Jul 12 09:53:29 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Wed, 12 Jul 2000 09:53:29 +0200 (MET DST) Subject: discovery In-Reply-To: <87em52iwx0.fsf@ghidra.vail> Message-ID: On 9 Jul 2000, Hal Snyder wrote: >A host is supposed to join an Erlang cluster on boot. Do we have to >give it an explicit IP address or FQDN of some other host(s) in the >cluster? > >We're considering a multicast group address for this purpose. But >maybe there's already a solution and I just haven't found it in the >docs. > >What's done with Real Life Erlang apps to get nodes to join up? Basically, nodes will connect as soon as one process on one node sends a message to a process on the other -- assuming that the cookies of the nodes are known on both sides. One way to make this happen is to configure the application_controller to sync on startup. It will do this if the 'distributed' environment variable is defined (via the command line or a sys.config file), and 'sync_nodes_mandadory' or 'sync_nodes_optional' has been defined (see also 'sync_nodes_timeout'.) Example sys.config file: [{kernel, [{distributed, [{appA, [node@REDACTED, node@REDACTED]}, {appB, [node@REDACTED, node@REDACTED]}], {sync_nodes_optional, [node@REDACTED, node@REDACTED]}, {sync_nodes_timeout, 60000}]}]. (which means "run appA on node@REDACTED if possible, otherwise on node@REDACTED, the other way around for appB; try to establish contact between node@REDACTED and node@REDACTED for 1 minute, then continue.") One thing that is not entirely obvious (although sort of documented in 'erl -man application') is that you can't e.g. specify only sync_nodes_mandatory -- you must also specify either the 'distributed' variable or {start_dist_ac, true}. >Ideally isn't a cluster a fluid thing, without hard-coded physical >node assignments? Ideally, yes. At AXD 301, we have a more flexible (and more complicated) application controller, called RCM (Runtime Configuration Manager). Part of it will probably make its way into OTP, and it will make it easier to configure dynamic clusters on the fly. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From ltaesch@REDACTED Tue Jul 11 07:31:33 2000 From: ltaesch@REDACTED (ltaesch@REDACTED) Date: Tue, 11 Jul 2000 07:31:33 +0200 Subject: XP style / lib browser ? Message-ID: <396AB135.88DC4008@europemail.com> are there any attempt to apply XP / extreme programming techniques to erlang ? (like test lib, ) ? are there any library browser ? thks (sorry, newbies questions) -- First, they ignore you. Then, they laught at you. Then, they fight you. Then, you win. --- Gandhi. From scott@REDACTED Wed Jul 12 22:28:11 2000 From: scott@REDACTED (Scott Lystig Fritchie) Date: Wed, 12 Jul 2000 15:28:11 -0500 Subject: discovery In-Reply-To: Message of "Wed, 12 Jul 2000 09:53:29 +0200." Message-ID: <200007122028.PAA53463@snookles.snookles.com> >>>>> "uw" == Ulf Wiger writes: uw> On 9 Jul 2000, Hal Snyder wrote: >> We're considering a multicast group address for this purpose. But >> maybe there's already a solution and I just haven't found it in the >> docs. >> Ideally isn't a cluster a fluid thing, without hard-coded physical >> node assignments? uw> Ideally, yes. At AXD 301, we have a more flexible (and more uw> complicated) application controller, called RCM (Runtime uw> Configuration Manager). Part of it will probably make its way into uw> OTP, and it will make it easier to configure dynamic clusters on uw> the fly. That would be a handy thing. At the moment, we've been using multicast IP has a hack around this void. If a node is rebooted or loses contact with the rest of the cluster, an alarm eventually goes off and the lost node sends a single "Anybody out there? I am 'node@REDACTED'" multicast UDP packet. The rest of the cluster is also listening for those multicast packets. (The multicast address is configured out-of-band.) When one arrives, a regular Erlang message is sent to 'node@REDACTED', which automagically triggers the mechanisms used to keep track of Erlang nodes. I'll volunteer Jim Larson to speak up if I've misrepresented his work or if y'all have further questions. :-) -Scott From martin@REDACTED Wed Jul 12 23:36:19 2000 From: martin@REDACTED (Martin Logan) Date: Wed, 12 Jul 2000 16:36:19 -0500 (CDT) Subject: Record comprehension Message-ID: I seem to have encountered somthing interesting with records. If anyone has any insight please share. -module(test). -export([test/0]). -record(tester, {first, second, third}). test() -> H = {first, second, third}, R = #tester{first=first, second=second, third=third}, {H#tester.second, R#tester.second}. OUTPUT: 32> c(test). {ok,test} 33> test:test(). {third,second} Thanks, Martin Logan From crd@REDACTED Wed Jul 12 23:45:48 2000 From: crd@REDACTED (Craig Dickson) Date: Wed, 12 Jul 2000 14:45:48 -0700 Subject: Record comprehension References: Message-ID: <013601bfec4a$8bdcc660$4d01140a@inkpad> Well, that would be because a record is really just a tuple with the name of the record type as the first member. Thus #tester{first=first,second=second,third=third} is really just {tester,first,second,third}. Though I'm a little surprised that the lookup of H#tester.second didn't cause a runtime error due to H not being the right kind of record. Craig ----- Original Message ----- From: "Martin Logan" To: Sent: Wednesday, 12 July 2000 02:36 pm Subject: Record comprehension > I seem to have encountered somthing interesting with records. If anyone > has any insight please share. > > -module(test). > -export([test/0]). > > -record(tester, {first, second, third}). > > > test() -> > H = {first, second, third}, > R = #tester{first=first, second=second, third=third}, > {H#tester.second, R#tester.second}. > > > OUTPUT: > > 32> c(test). > {ok,test} > 33> test:test(). > {third,second} > > Thanks, > Martin Logan > From jim@REDACTED Thu Jul 13 02:46:07 2000 From: jim@REDACTED (Jim Larson) Date: Wed, 12 Jul 2000 17:46:07 -0700 Subject: discovery In-Reply-To: Your message of "Wed, 12 Jul 2000 15:28:11 CDT." <200007122028.PAA53463@snookles.snookles.com> Message-ID: <200007130046.RAA69069@eme110-115.Sendmail.COM> In message <200007122028.PAA53463@REDACTED> Scott Fritchie writes: >At the moment, we've been using multicast IP has a hack around this >void. If a node is rebooted or loses contact with the rest of the >cluster, an alarm eventually goes off and the lost node sends a single >"Anybody out there? I am 'node@REDACTED'" multicast UDP packet. Well, substitute "broadcast" for "multicast". An IPv6 "anycast" is what we'd really like here. >The rest of the cluster is also listening for those multicast packets. >(The multicast address is configured out-of-band.) When one arrives, >a regular Erlang message is sent to 'node@REDACTED', which automagically >triggers the mechanisms used to keep track of Erlang nodes. I'll >volunteer Jim Larson to speak up if I've misrepresented his work or if >y'all have further questions. :-) The only further thing I'd mention is that we found it useful to add the "-connect_all false" argument to the emulator's command-line invocation, to turn off the default behavior where each node in a distributed system sends heartbeat messages to all other nodes. For our application, only a single node really cares about the status of the others. Jim From etxuwig@REDACTED Thu Jul 13 08:30:49 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Thu, 13 Jul 2000 08:30:49 +0200 (MET DST) Subject: Record comprehension In-Reply-To: <013601bfec4a$8bdcc660$4d01140a@inkpad> Message-ID: On Wed, 12 Jul 2000, Craig Dickson wrote: >Well, that would be because a record is really just a tuple with the name of >the record type as the first member. Thus >#tester{first=first,second=second,third=third} is really just >{tester,first,second,third}. Though I'm a little surprised that the lookup >of H#tester.second didn't cause a runtime error due to H not being the right >kind of record. Yes, it is a bit surprising. I believe the main reason is that testing whether a variable is actually of the proper record type requires type analysis, which is something the current compiler doesn't do. For all other types, the runtime system will perform basic type checks, but since there is no record type, the runtime system can't do much. If you compile test.erl with the 'E' option: test() -> H = {first,second,third}, R = {tester,first,second,third}, {erlang:element(3,H),erlang:element(3,R)}. module_info() -> []. module_info(_) -> []. you'll see that the pre-processor doesn't give the VM a chance to reason about the records. It could insert Erlang code to verify that: - H is a tuple of the correct size - element(1, H) == tester basically: test() -> H = {first, second, third}, R = #tester{first = first, second = second, third = third}, {if size(H) == 4, element(1,H) == tester -> element(3, H); true -> exit({invalid_record, H}) end, if size(R) == 4, element(1, R) == tester -> element(3, R); true -> exit({invalid_record, R} end}. but this would cause significant overhead, as the record selector syntax is one of the most common operations in many typical systems. There are some solutions in the (near?) future: - The tagging scheme has been changed in OTP R7B (due Sept) While there isn't a special record type in R7B, it will be more feasible to create one. - The upcoming type checker does catch this error, assuming that you have made the proper type annotations (it doesn't derive types.) /Uffe >----- Original Message ----- >From: "Martin Logan" >To: >Sent: Wednesday, 12 July 2000 02:36 pm >Subject: Record comprehension > > >> I seem to have encountered somthing interesting with records. If anyone >> has any insight please share. >> >> -module(test). >> -export([test/0]). >> >> -record(tester, {first, second, third}). >> >> >> test() -> >> H = {first, second, third}, >> R = #tester{first=first, second=second, third=third}, >> {H#tester.second, R#tester.second}. >> >> >> OUTPUT: >> >> 32> c(test). >> {ok,test} >> 33> test:test(). >> {third,second} >> >> Thanks, >> Martin Logan >> > > -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From mikl@REDACTED Thu Jul 13 10:33:58 2000 From: mikl@REDACTED (Mickael Remond) Date: 13 Jul 2000 10:33:58 +0200 Subject: XP style / lib browser ? In-Reply-To: "ltaesch@europemail.com"'s message of "Tue, 11 Jul 2000 07:31:33 +0200" References: <396AB135.88DC4008@europemail.com> Message-ID: <8766qaig3t.fsf@louxor.home> >>>>> "ltaesch" == ltaesch@REDACTED com writes: ltaesch> are there any attempt to apply XP / extreme programming ltaesch> techniques to erlang ? (like test lib, ) ? I was wondering the same thing. If other people are interested, maybe we can try to develop something ? There is a Mnesia test suite that might be used as a basis for a generic test suite. -- Micka?l From mikl@REDACTED Thu Jul 13 10:39:23 2000 From: mikl@REDACTED (Mickael Remond) Date: 13 Jul 2000 10:39:23 +0200 Subject: Tree modeling Message-ID: <87zonmh1ac.fsf@louxor.home> How would you write an insert function to add child to a tree structure represented like that: {id, name, [child]} For example: {1, "test1", [ {2, "test2", []}, {3, "test3", [ {4, "test4", []}]}, {5, "test5", []]} I did not figure out how to scan/walk this tree with recursive functions. It will be easy if it was a binary tree, but this is not the case... -- Micka?l From kent@REDACTED Thu Jul 13 11:26:35 2000 From: kent@REDACTED (Kent Boortz) Date: 13 Jul 2000 11:26:35 +0200 Subject: XP style / lib browser ? In-Reply-To: Mickael Remond's message of "13 Jul 2000 10:33:58 +0200" References: <396AB135.88DC4008@europemail.com> <8766qaig3t.fsf@louxor.home> Message-ID: >>>>> "ltaesch" == ltaesch@REDACTED com writes: ltaesch> are there any attempt to apply XP / extreme programming ltaesch> techniques to erlang ? (like test lib, ) ? > Mickael Remond writes: > I was wondering the same thing. If other people are interested, maybe we can > try to develop something ? > > There is a Mnesia test suite that might be used as a basis for a generic test suite. I'm not familiar with the expression "extreme programming" but after reading your question I read some introductions. It sounds a bit like the way many already program in Erlang. Internally we have a "test server" written in Erlang and it is used as a tool for the developer as well as for "regression tests" in a fully automatic Daily Build process. If we are close to release this automatic test is used as a verification for the integration team. Between releases it is used as a test tool for the developer, he get fast feedback about how his changes effect the whole system. The test result is presented as HTML pages and failing cases are nicely hyper-linked into log files and the test source code. There are some text about this in section 7.1 of http://www.sectra.se/spin/dailybuildreport.pdf So we have a large test suite and a test server, problem is it is not Open Source ;-) Maybe it could be or someone could write a better or more suitable test platform for "extreme programming". A question about "extreme programming". I wrote a test suite for "epmd" using the OTP test server before I started coding when I rewrote "epmd". It was about 15 test cases and the old "epmd" almost failed them all. (I added non blocking socket communication and that the code handles partial "packets", corrupt data, client closing socket when data missing, more data than requested, timeout if not enough data and no close from client etc). After writing the test cases the development process was very fast without any detailed planning (dare I say "hacking"). Passing all the test cases was the goal. Is this "extreme programming"? kent From kent@REDACTED Thu Jul 13 11:42:33 2000 From: kent@REDACTED (Kent Boortz) Date: 13 Jul 2000 11:42:33 +0200 Subject: Record comprehension In-Reply-To: Ulf Wiger's message of "Thu, 13 Jul 2000 08:30:49 +0200 (MET DST)" References: Message-ID: >>Well, that would be because a record is really just a tuple with the name of >>the record type as the first member. Thus >>#tester{first=first,second=second,third=third} is really just >>{tester,first,second,third}. Though I'm a little surprised that the lookup >>of H#tester.second didn't cause a runtime error due to H not being the right >>kind of record. > > Yes, it is a bit surprising. > I believe the main reason is that testing whether a variable is > actually of the proper record type requires type analysis, which is > something the current compiler doesn't do. For all other types, the > runtime system will perform basic type checks, but since there is no > record type, the runtime system can't do much. There is no "type analysis" but the compiler could generate code that before an operation check the arity of the tuple as well as that the first element of the tuple is the right atom. It is worse, in some situations there is a test, in others not. I don't remember the details but there are some code to optimize record handling in "sys_pre_expand" that translate record matching to different type of code depending on how many arguments of the record are updated/matched. And the preprocessor is so early in the compilation process that your coding style will effect the generated output, if there will be a test for record type or not. I have some examples somewhere, I will try to find it. Changing this behaviour now may break existing code that by mistake or intentionally use this misfeature ;-) kent From etxuwig@REDACTED Thu Jul 13 11:44:45 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Thu, 13 Jul 2000 11:44:45 +0200 (MET DST) Subject: Tree modeling In-Reply-To: <87zonmh1ac.fsf@louxor.home> Message-ID: On 13 Jul 2000, Mickael Remond wrote: > >How would you write an insert function to add child to a tree structure >represented like that: > >{id, name, [child]} > >For example: >{1, "test1", [ > {2, "test2", []}, > {3, "test3", [ > {4, "test4", []}]}, > {5, "test5", []]} > >I did not figure out how to scan/walk this tree with recursive functions. >It will be easy if it was a binary tree, but this is not the case... What are the criteria for insertion? Are there split/merge thresholds? Why is for example 4 a child of 3? In any case, I wrote a walk/1 function and an insert/3 function, assuming that you need to identify the parent node when you insert. The walk/1 function is really tree_to_list/1. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden -------------- next part -------------- -module(ltree). -export([walk/1, insert/3]). walk({Id, Name, Children}) -> lists:reverse(walk(Children, [{Id, Name}])). walk([{Id, Name, Children}|T], Acc) -> NewAcc = walk(Children, [{Id, Name}|Acc]), walk(T, NewAcc); walk([], Acc) -> Acc. insert(Obj, ParentId, Tree) -> walk_insert(ParentId, Tree, Obj). walk_insert(PId, {PId, PName, Children}, Obj) -> {PId, PName, sort_insert(Obj, Children)}; walk_insert(PId, {Id, Name, Children}, Obj) -> case walk_insert1(Children, PId, Obj, []) of false -> false; NewChildren -> {Id, Name, NewChildren} end. walk_insert1([Node|T], PId, Obj, Acc) -> case insert(Obj, PId, Node) of false -> walk_insert1(T, PId, Obj, [Node|Acc]); NewNode -> lists:reverse(Acc) ++ [NewNode|T] end; walk_insert1([], PId, Obj, Acc) -> false. sort_insert(Obj = {Id, _, _}, [H = {Id1, _, _}|T]) when Id > Id1 -> [H, sort_insert(Obj, T)]; sort_insert(Obj = {Id, _, _}, [H = {Id1, _, _}|T]) when Id < Id1 -> [Obj, H | T]; sort_insert(Obj, []) -> [Obj]. From etxuwig@REDACTED Thu Jul 13 11:51:23 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Thu, 13 Jul 2000 11:51:23 +0200 (MET DST) Subject: Record comprehension In-Reply-To: Message-ID: On 13 Jul 2000, Kent Boortz wrote: > >>>Well, that would be because a record is really just a tuple with the name of >>>the record type as the first member. Thus >>>#tester{first=first,second=second,third=third} is really just >>>{tester,first,second,third}. Though I'm a little surprised that the lookup >>>of H#tester.second didn't cause a runtime error due to H not being the right >>>kind of record. >> >> Yes, it is a bit surprising. >> I believe the main reason is that testing whether a variable is >> actually of the proper record type requires type analysis, which is >> something the current compiler doesn't do. For all other types, the >> runtime system will perform basic type checks, but since there is no >> record type, the runtime system can't do much. > [...] > >Changing this behaviour now may break existing code that by mistake or >intentionally use this misfeature ;-) > >kent ... as well as add significant overhead to existing code, which assumes that the record selector has practically zero overhead. I believe a real record type is the solution. There are several issues to address, mainly the historical use of records as tuples (which is sometimes very useful.) But I'd accept code breakage as long as the unpure solutions can be handled otherwise, and we solve the problem once and for all. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From mikl@REDACTED Thu Jul 13 14:06:24 2000 From: mikl@REDACTED (Mickael Remond) Date: 13 Jul 2000 14:06:24 +0200 Subject: XP style / lib browser ? In-Reply-To: Kent Boortz's message of "13 Jul 2000 11:26:35 +0200" References: <396AB135.88DC4008@europemail.com> <8766qaig3t.fsf@louxor.home> Message-ID: <87vgyagrpb.fsf@louxor.home> >>>>> "Kent" == Kent Boortz writes: >>>>> "ltaesch" == ltaesch@REDACTED com writes: [...] Kent> So we have a large test suite and a test server, problem is it is not Kent> Open Source ;-) Maybe it could be or someone could write a better or Kent> more suitable test platform for "extreme programming". This is exactly what was meant. Are there any chance that this tools could be released as Open Source ? Kent> A question about "extreme programming". I wrote a test suite for Kent> "epmd" using the OTP test server before I started coding when I Kent> rewrote "epmd". It was about 15 test cases and the old "epmd" almost Kent> failed them all. (I added non blocking socket communication and that Kent> the code handles partial "packets", corrupt data, client closing socket Kent> when data missing, more data than requested, timeout if not enough Kent> data and no close from client etc). After writing the test cases the Kent> development process was very fast without any detailed planning (dare Kent> I say "hacking"). Passing all the test cases was the goal. Is this Kent> "extreme programming"? I think it match one aspect of the method (fast iterative development) but there many others principles you can experiment with (Pair programming, planning games, and so on). If you want to have more details: http://www.extremeprogramming.org is a good start. The Portland Pattern repository (a wiki web) is also full of interesting comments: http://c2.com/cgi/wiki?ExtremeProgramming Bye. -- Micka?l From ltaesch@REDACTED Thu Jul 13 15:40:57 2000 From: ltaesch@REDACTED (ltaesch@REDACTED) Date: Thu, 13 Jul 2000 09:40:57 -0400 (EDT) Subject: Graphing FSMs Message-ID: <000713094057J6.22684@weba6.iname.net> Subject: Graphing FSMs From: "Vance Shipley" Date: Sat, 8 Jul 2000 21:27:10 -0400 Importance: Normal In-Reply-To: Message-ID: great ! I was expecting fsm drawing for a while, ( after failing doing some nice myself!). i succedded working out dot-Teps... but i cant make the graph.erl .as im newby, i probably used the wrong fsm. here is my test program. can u certify it should passes, or send the test u use ? thks a lot, Luc -module(tst). -export(idle/2). -behaviour(gen_fsm). idle(Event, StateData) -> case Event of offhook -> NextStateData = StateData, NextStateName = dialtone; incoming -> NextStateData = StateData, NextStateName = ringing end, {next_state, NextStateName, NextStateData} ------------------------------------------------------ Get free personalized email at http://four11.iname.com From vances@REDACTED Thu Jul 13 19:13:30 2000 From: vances@REDACTED (Vance Shipley) Date: Thu, 13 Jul 2000 13:13:30 -0400 Subject: Graphing FSMs In-Reply-To: <200007111145.NAA00952@trana.bluetail.com> Message-ID: Robert Virding writes: } > % if the function has multiple clauses we parse them all } > case T of } > [Head|Tail] -> } > parse_function(IoDevice, FunctionName, Head, Tail); } > [Head] -> } > parse_function(IoDevice, FunctionName, Head, []); } > [] -> } > true } > end. } } Just a quick comment, without reading at what you are really doing. The } second clause in the second case will never be used because the pattern } in the clause will catch the last element. Although the way the code is } written is does not matter and the second clause is unnecessary anyway. Oops. That was a remnant from previous tests. } Watch the line number variable Line, writing it this way forces them to } be on the same line. Yes I knew this when I wrote it but intended to think about it some more. I have changed it to '_' so that it doesn't matter if there is a line change. The thing here was that I was basically documenting the Absform with the code I was writing. I wanted to be able to understand it when I came back to enhance this code. I thought that I could use '_Line' and it would have the semantics of '_' but that is not the case. Personally I would think that this should be the case. Why would you put an underscore in front of a variable name if you wanted it treated just as if there wasn't one? -module(t). -export([test/2]). test(_Foo, _Foo) -> same; test(_, _) -> different. 2> t:test(1, 2). different 3> t:test(1, 1). same } Why not write it like: } } parse_function(IoDevice, FuncName, Cls) -> } lists:foreach(fun ({clause,Line,[{var,Le,'Event'},{var,Ls,'SateData'}], } _Guard,Body}) -> } parse_clause(IoDevice, FuncName, Body); } (_Clause) -> ok } end, Cls). Because it would take me half a day to understand what you just wrote. :) } Or if you prefer not to use higher-order functions: } } parse_function(IoDevice, FuncName, } [{clause,Line,[{var,Le,'Event'},{var,Ls,'SateData'}], } _Guard,Body}|Cls]) -> } parse_function(IoDevice, FuncName, Body), } parse_function(IoDevice, FuncName, Cls); } parse_function(IoDevice, FuncName, [Cl|Cls]) -> } parse_function(IoDevice, FuncName , Cls); } parse_function(IoDevice, Funcname, []) -> true. } } Similar for parse_function and parse_clause. That certainly is more elegant. I will have to think about this some more. I'm sure your suggestions will help improve the style of code I write. As it is it works and I can understand it, two important things. :) -Vance From vances@REDACTED Thu Jul 13 20:03:37 2000 From: vances@REDACTED (Vance Shipley) Date: Thu, 13 Jul 2000 14:03:37 -0400 Subject: Graphing FSMs In-Reply-To: <000713094057J6.22684@weba6.iname.net> Message-ID: } here is my test program. can u certify it should passes, or send the } test u use ? } } thks a lot, } } Luc Sorry. The code I sent wasn't consistent with what I documented. We here like to use the variable names NextState, and NewStateData. It seems to make more sense to us. I tested the code using our version and didn't remember to change it back to the documented naming scheme. Attached is a new version. -Vance -------------- next part -------------- A non-text attachment was scrubbed... Name: graph.erl Type: application/octet-stream Size: 5041 bytes Desc: not available URL: From mikl@REDACTED Thu Jul 13 22:21:52 2000 From: mikl@REDACTED (Mickael Remond) Date: 13 Jul 2000 22:21:52 +0200 Subject: Tree modeling In-Reply-To: Ulf Wiger's message of "Thu, 13 Jul 2000 11:44:45 +0200 (MET DST)" References: Message-ID: <87sntd2333.fsf@louxor.home> >>>>> "Ulf" == Ulf Wiger writes: Ulf> What are the criteria for insertion? Are there split/merge thresholds? Ulf> Why is for example 4 a child of 3? Ulf> In any case, I wrote a walk/1 function and an insert/3 function, Ulf> assuming that you need to identify the parent node when you insert. Ulf> The walk/1 function is really tree_to_list/1. This is exactly what I had in mind. So well done. Your recursion is impressive. Is your walk_insert / walk_insert1 a common pattern ? This is the kind of code that makes me love functionnal programming in general and Erlang in particular... Thanks you for _all_ your answers. -- Micka?l From jon@REDACTED Fri Jul 14 04:12:10 2000 From: jon@REDACTED (Jon Holdsworth) Date: Fri, 14 Jul 2000 12:12:10 +1000 Subject: Known BEAM memory leak ? Profiling tools ? Message-ID: <396E76FA.5E3CD469@lodbroker.com> To the erlang-questions people: Erlang running under Linux Redhat 6.1 on Intel and Solaris 2.7 on Sparc, the BEAM program has been seen to apparently leak memory after being left running for some time. It is possible that this 'memory leak' is in our own code, but it has not revealed itself yet. We have looked at the erlang processes running, heap and stack thereof, and also the ETS and Mnesia tables, and there appears to be nothing amiss there, pointing to the virtual machine engine, but we are also aware of how unlikely a fault in the engine is. The worst-case leak seen so far caused beam to expand to about 200 MB, as reported by 'top'. Has anything like this been encountered before and if so is there a known solution ? Also - is there a best-recommended debugger that can be hooked into beam to reveal memory usage and other profiling data on-the-fly ? I was suggesting getting Purify here at work and re-compiling beam with it, but that is an expensive alternative. Jon From scott@REDACTED Fri Jul 14 06:09:37 2000 From: scott@REDACTED (Scott Lystig Fritchie) Date: Thu, 13 Jul 2000 23:09:37 -0500 Subject: Known BEAM memory leak ? Profiling tools ? In-Reply-To: Message of "Fri, 14 Jul 2000 12:12:10 +1000." <396E76FA.5E3CD469@lodbroker.com> Message-ID: <200007140409.XAA64430@snookles.snookles.com> >>>>> "jh" == Jon Holdsworth writes: jh> To the erlang-questions people: Erlang running under Linux Redhat jh> 6.1 on Intel and Solaris 2.7 on Sparc, the BEAM program has been jh> seen to apparently leak memory after being left running for some jh> time. It is possible that this 'memory leak' is in our own code, jh> but it has not revealed itself yet. Your own code? Have you written any linked-in drivers (static or dynamic)? Or is your code purely Erlang? If the former, well, that's another bucket of mud. The latter... ... are you sure you don't have a "process leak"? By that I mean a number of processes which have escaped a supervision tree? I ran into an evil memory consumption problem that, on the surface, looked like you describe: both "ps" and "top" said that the VM's UNIX process was eating a ton of memory, and I couldn't figure out why. I suspected a memory leak with binary objects. It finally hit me to fire up the process manager, via "pman:start()". The silly thing timed out, causing virtual memory thrashing & wild disk activity. After a few tries, I got it to pop up a window before the start function timed out. Its process listing was *huge*. Dumbstruck, I tried "length(processes())", expecting about 150 and instead got I-forget-how-many thousand processes. They weren't doing anything other than sitting around consuming a few kilobytes of memory each ... and blocking waiting to receive messages that would never arrive. Sure enough, we had a process leak. Being much more careful about process linkage made the problem vanish. ... Many thanks to Lennart ?hman for (much later) giving us a better and much more paranoid perspective on process linking: "Pretend that your system will run for 10 years straight. Even a tiny process leak will cause a Siberia Problem(*) in that amount of time." Our worries about binary objects (in R6B-0) were unfounded. I honestly don't recall why I didn't think about that kind of leak earlier, but I do remember how surprised I was when I found it. And how chagrined I was to not think of it earlier. -Scott (*) When you need to fly/drive/hitchhike/walk all the way to an equipment closet in Siberia just to press a stupid reset button. From jon@REDACTED Fri Jul 14 06:30:47 2000 From: jon@REDACTED (Jon Holdsworth) Date: Fri, 14 Jul 2000 14:30:47 +1000 Subject: Known BEAM memory leak ? Profiling tools ? References: <200007140409.XAA64430@snookles.snookles.com> Message-ID: <396E9777.E81C5664@lodbroker.com> Thank you Scott, and this could well be our culprit. Jon Scott Lystig Fritchie wrote: > >>>>> "jh" == Jon Holdsworth writes: > > jh> To the erlang-questions people: Erlang running under Linux Redhat > jh> 6.1 on Intel and Solaris 2.7 on Sparc, the BEAM program has been > jh> seen to apparently leak memory after being left running for some > jh> time. It is possible that this 'memory leak' is in our own code, > jh> but it has not revealed itself yet. > > Your own code? Have you written any linked-in drivers (static or > dynamic)? Or is your code purely Erlang? If the former, well, that's > another bucket of mud. The latter... > > ... are you sure you don't have a "process leak"? By that I mean a > number of processes which have escaped a supervision tree? I ran into > an evil memory consumption problem that, on the surface, looked like > you describe: both "ps" and "top" said that the VM's UNIX process was > eating a ton of memory, and I couldn't figure out why. I suspected a > memory leak with binary objects. > > It finally hit me to fire up the process manager, via "pman:start()". > The silly thing timed out, causing virtual memory thrashing & wild > disk activity. After a few tries, I got it to pop up a window before > the start function timed out. Its process listing was *huge*. > Dumbstruck, I tried "length(processes())", expecting about 150 and > instead got I-forget-how-many thousand processes. They weren't doing > anything other than sitting around consuming a few kilobytes of memory > each ... and blocking waiting to receive messages that would never > arrive. > > Sure enough, we had a process leak. Being much more careful about > process linkage made the problem vanish. ... Many thanks to Lennart > ?hman for (much later) giving us a better and much more paranoid > perspective on process linking: "Pretend that your system will run for > 10 years straight. Even a tiny process leak will cause a Siberia > Problem(*) in that amount of time." > > Our worries about binary objects (in R6B-0) were unfounded. I > honestly don't recall why I didn't think about that kind of leak > earlier, but I do remember how surprised I was when I found it. And > how chagrined I was to not think of it earlier. > > -Scott > > (*) When you need to fly/drive/hitchhike/walk all the way to an > equipment closet in Siberia just to press a stupid reset button. From etxuwig@REDACTED Fri Jul 14 09:27:50 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Fri, 14 Jul 2000 09:27:50 +0200 (MET DST) Subject: discovery In-Reply-To: <200007130046.RAA69069@eme110-115.Sendmail.COM> Message-ID: On Wed, 12 Jul 2000, Jim Larson wrote: >The only further thing I'd mention is that we found it useful to >add the "-connect_all false" argument to the emulator's command-line >invocation, to turn off the default behavior where each node in a >distributed system sends heartbeat messages to all other nodes. >For our application, only a single node really cares about the >status of the others. Yes, it is sometimes desireable to disable the connect_all feature. Mainly, if you have a really large number of nodes. Unfortunately, the global name registration is closely tied to the connect_all feature (it shouldn't be, in my opinion). This means that you must give up global name registration if you don't want connect_all. It would be nice to have more support for configuring systems with a large number of nodes. One of the biggies is the global locker and name registration facility. The current implementation doesn't scale. At AXD 301, we have developed our own read-write locker, which does handle large networks fairly well. It is also well tested. I've been documenting it in order to release it as Open Source. Anyone interested? /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From etxuwig@REDACTED Fri Jul 14 09:30:14 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Fri, 14 Jul 2000 09:30:14 +0200 (MET DST) Subject: Tree modeling In-Reply-To: <87sntd2333.fsf@louxor.home> Message-ID: On 13 Jul 2000, Mickael Remond wrote: >>>>>> "Ulf" == Ulf Wiger writes: > > Ulf> What are the criteria for insertion? Are there split/merge thresholds? > Ulf> Why is for example 4 a child of 3? > > Ulf> In any case, I wrote a walk/1 function and an insert/3 function, > Ulf> assuming that you need to identify the parent node when you insert. > Ulf> The walk/1 function is really tree_to_list/1. > >This is exactly what I had in mind. So well done. Your recursion is >impressive. Is your walk_insert / walk_insert1 a common pattern ? Uhm... I don't know. It's pretty common to spread the recursion over multiple functions; sometimes it's done by using a higher-order function inside the main function -- then you won't have the naming problem, as the higher-order function is anonymous... Looking at the code again, I see that I didn't have to name the second function walk_insert1, as it has a different number of arguments. In those cases, I normally let the name stay unchanged. Sloppy of me. If I can't keep the name, or come up with a logical other name, I slap a 1 to the original name. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From etxuwig@REDACTED Fri Jul 14 09:41:31 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Fri, 14 Jul 2000 09:41:31 +0200 (MET DST) Subject: Known BEAM memory leak ? Profiling tools ? In-Reply-To: <396E76FA.5E3CD469@lodbroker.com> Message-ID: On Fri, 14 Jul 2000, Jon Holdsworth wrote: >To the erlang-questions people: > >Erlang running under Linux Redhat 6.1 on Intel and Solaris 2.7 on Sparc, >the BEAM program has been seen to apparently leak memory after being >left running for some time. It is possible that this 'memory leak' is >in our own code, but it has not revealed itself yet. > >We have looked at the erlang processes running, heap and stack thereof, >and also the ETS and Mnesia tables, and there appears to be nothing >amiss there, pointing to the virtual machine engine, but we are also >aware of how unlikely a fault in the engine is. > >The worst-case leak seen so far caused beam to expand to about 200 MB, >as reported by 'top'. What is the resident ("RES") size reported by 'top'? It is not that uncommon that BEAM will allocate tons of memory to meet a transient need (and it tends to allocate about 3X the actual size of the data). Once this has happened, 'top' will report the all-time high. This is not a problem, as long as you have enough physical memory to make it through the transient without plunging into swap. For example, I have an Erlang-based web server which reports SIZE RES STATE TIME CPU COMMAND 1003M 400M sleep 49.7H 0.00% beam In other words, beam has once exceeded 1 GB (!), but is now down to using 400 MB of resident memory. Some live data might well be in swap, but I think the majority of the 600 MB difference is memory marked as free, but not reclaimed by the OS (This particular SPARC has 1024 MB RAM, BTW.) >Has anything like this been encountered before and if so is there a >known solution ? If this is the problem, and you want to fix it, try doing this: - Use something like vmstat to find out the behaviour of your system over time. You can write a looping script that prints the memory statistics to a log file. - If you can identify a situation where beam grows significantly, try to reproduce it, and run a GC trace at the same time. A colleague of mine, Mats Cronqvist, has written some utilities for this purpose (attached - the source code is the documentation) - If you can identify a process or some processes that trigger many (large) garbage collections, check the functions in which GC was triggered, and look at the code. Constructs to look out for are those that build large amounts of live data in a short time. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden -------------- next part -------------- %%%---------------------------------------------------------------------- %%% File : funt.erl %%% Author : Mats Cronqvist %%% Purpose : %%% Created : 8 Feb 2000 by Mats Cronqvist %%%---------------------------------------------------------------------- -module(funt). -author('etxmacr@REDACTED'). -behaviour(gen_server). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2]). %%%---------------------------------------------------------------------- %%% Function : %%% Author : Mats Cronqvist %%% Arguments : %%% Return value : %%% Description : %%%---------------------------------------------------------------------- -export([start/0, start/1]). -export([stop/0]). -export([add/0, add/1, add/2, add/3]). -export([sub/0, sub/1, sub/2, sub/3]). -export([info/0]). -export([sleep/0]). -define(FLAGS0, [set_on_spawn, timestamp, procs, garbage_collection]). -define(FLAGS, [send, 'receive', bifs, call, running, garbage_collection, procs]). -define(TAGS, ['receive', send, send_to_non_existing_process, call, return, spawn, exit, link, unlink, getting_linked, in, out, gc_start, gc_end]). -record(ld, {gc_start = [], gc_file, gc_trig = 150000, logging = false}). %%%---------------------------------------------------------------------- %%% Function : gen_server callback funcs %%% Author : Mats Cronqvist %%% Arguments : %%% Return value : %%% Description : %%%---------------------------------------------------------------------- init(Args) -> {ok, do_init(Args)}. handle_call(Data, {Pid, _}, LD) -> {reply, ok, do_call(Data, Pid, LD)}. handle_cast(stop, LD) -> {stop, normal, LD}; handle_cast(Data, LD) -> {noreply, do_cast(Data, LD)}. handle_info(Data, LD) -> erlang:yield(), {noreply, do_info(Data, LD)}. terminate(Reason, LD) -> ok. %%%---------------------------------------------------------------------- %%% Function : exported API funcs %%% Author : Mats Cronqvist %%% Arguments : %%% Return value : %%% Description : %%%---------------------------------------------------------------------- start() -> start(processes()). start(Arg) when atom(Arg) -> start([Arg]); start(Args) when list(Args) -> As = [apid(A) || A <- Args], gen_server:start({local, ?MODULE}, ?MODULE, As, []). stop() -> gen_server:cast(?MODULE, stop). sleep() -> gen_server:cast(?MODULE, sleep). info() -> print_info(). add() -> add(all). add(Target) -> add(Target, screen). add(Target, Consumer) -> add(Target, Consumer, ?FLAGS). add(Target, Consumer, Flag) when atom(Flag) -> add(Target, Consumer, [Flag]); add(Target, Consumer, Flags) when list(Flags)-> case {Flags--?FLAGS, chkt(Target), chkc(add, Consumer)} of {Error, _, _} when Error /= [] -> ok = io:fwrite("~p: bad flag(s): ~p~n", [?MODULE, Error]); {_, error, _} -> ok = io:fwrite("~p: bad target: ~p~n", [?MODULE, Target]); {_, _, error} -> ok = io:fwrite("~p: bad consumer: ~p~n", [?MODULE, Consumer]); _ -> case whereis(?MODULE) of undefined -> start(); _ -> ok end, gen_server:call(?MODULE, {add, Target, Consumer, Flags}, infinity) end. sub() -> sub(all). sub(pending) -> gen_server:call(?MODULE, {sub, pending}, infinity); sub(Target) -> sub(Target, all). sub(Target, Consumer) -> sub(Target, Consumer, ?FLAGS). sub(Target, Consumer, Flag) when atom(Flag) -> sub(Target, Consumer, [Flag]); sub(Target, Consumer, Flags) when list(Flags)-> case {Flags--?FLAGS, chkt(Target), chkc(sub, Consumer)} of {Error, _, _} when Error /= [] -> ok = io:fwrite("~p: bad flag(s): ~p~n", [?MODULE, Error]); {_, error, _} -> ok = io:fwrite("~p: bad target: ~p~n", [?MODULE, Target]); {_, _, error} -> ok = io:fwrite("~p: bad consumer: ~p~n", [?MODULE, Consumer]); _ -> gen_server:call(?MODULE, {sub, Target, Consumer, Flags}, infinity) end. %%%---------------------------------------------------------------------- %%% Function : action! %%% Author : Mats Cronqvist %%% Arguments : %%% Return value : %%% Description : returns LD %%%---------------------------------------------------------------------- do_init(Args) -> ets_new(), [on(P) || P <- (Args--[self()])], {ok, FD} = file:open(os:getenv("HOME")++"/gc_log", [write]), #ld{gc_file = FD}. do_cast(Data, LD) -> ok = io:fwrite("~p:unknown cast ~p ~p~n", [?MODULE, Data, LD]), LD. do_call({add, Target, Consumer, Flags}, Pid, LD) -> case apid(Target) of error -> do_add(Target, Consumer, Flags); P -> do_add(P, Consumer, Flags) end, set_logging(LD); do_call({sub, pending}, Pid, LD) -> do_sub(pending), set_logging(LD); do_call({sub, Target, Consumer, Flags}, Pid, LD) -> case apid(Target) of error -> do_sub(Target, Consumer, Flags); P -> do_sub(P, Consumer, Flags) end, set_logging(LD); do_call(sleep, Pid, LD) -> ok = io:fwrite("~p:~p: sleeping~n", [?MODULE, ?LINE]), receive after 20000 -> ok end, ok = io:fwrite("~p:~p: waking~n", [?MODULE, ?LINE]), LD; do_call(Data, Pid, LD) -> ok = io:fwrite("~p:unknown call ~p ~p ~p~n", [?MODULE, Data, Pid, LD]), LD. do_info({trace,'receive',Pid,timeout,_}, LD)-> %%% ets_ins({{miss, reg(Pid), receive_timeout}, process_info(Pid)}), LD; do_info({trace, Pid, Tag = gc_start, Info, Now} = Data, LD) -> log(Data, LD), LD#ld{gc_start = {Now, Tag, Pid, Info}}; do_info({trace, Pid, Tag = gc_end, Info, Now} = Data, LD) -> log(Data, LD), gc_log(LD, process_info(Pid), reg(Pid), LD#ld.gc_start, {Now, Tag, Pid, Info}), LD#ld{gc_start = []}; do_info({trace, PidP, spawn, PidC, _} = Data, LD) -> log(Data, LD), do_add_child(PidC, PidP), do_add_pending(PidC), LD; do_info({trace, Pid, exit, _, _} = Data, LD) -> log(Data, LD), do_sub(Pid, all, ?FLAGS), LD; do_info({?MODULE, gc_trig, Data}, LD) -> LD#ld{gc_trig = Data}; do_info(Data, LD) -> log(Data, LD), LD. %%%---------------------------------------------------------------------- %%% Function : lib-like funcs %%% Author : Mats Cronqvist %%% Arguments : %%% Return value : %%% Description : %%%---------------------------------------------------------------------- set_logging(LD) -> case ets_siz() of 0 -> LD#ld{logging = false}; _ -> LD#ld{logging = true} end. do_add_child(PidC, PidP) -> on(PidC), [do_add(PidC, Cons, get_flags(PidP, Cons)) || Cons <- get_cons(PidP)], ok. do_add_pending(Pid) -> K = {pending, process_info(Pid,initial_call)}, case ets_get(K) of [] -> ok; {Cons, Flags} -> do_add(Pid, Cons, Flags), ets_del(K) end. do_add({pending, InitialCall} = K, Cons, Flags) -> ets_ins({{pending, {initial_call, InitialCall}}, {Cons, Flags}}); do_add(all, Cons, Flags) -> [do_add(Pid, Cons, Flags) || Pid <- processes()]; do_add(Pid, screen, Flags) -> do_add(Pid, {file, screen, standard_io}, Flags); do_add(Pid, Fil, Flags) when list(Fil) -> {FD, File} = open(Fil), do_add(Pid, {file, File, FD}, Flags); do_add(Pid, Cons, Flags) when pid(Pid)-> Fs = ets_sel({{flags, Pid, '_'}, '$1'}), case (Flags--?FLAGS0)--Fs of [] ->ok; F -> ok = io:fwrite("~p:~p: added ~p to ~p~n", [?MODULE, ?LINE, F, reg(Pid)]), catch trace(Pid, true, F) end, ets_add({{flags, Pid, Cons}, Flags--?FLAGS0}), Tags = get_tags(Flags), ets_add({{pids, Cons}, Pid}), [ets_add({{cons, Pid, Tag}, Cons}) || Tag <- Tags]. do_sub(pending) -> [ets_del({pending, K}) || [K] <- ets_mch({{pending, '$1'}, '_'})]. do_sub(Targ, all, Flags) -> [do_sub(Targ, Cons, Flags) || Cons <- get_cons(Targ)]; do_sub(all, Cons, Flags) -> [do_sub(Pid, Cons, Flags) || Pid <- ets_get({pids, Cons})]; do_sub(Pid, screen, Flags) -> do_sub(Pid, {file, screen, standard_io}, Flags); do_sub(Pid, FD, Flags) when list(FD) -> do_sub(Pid, {file, get_file(FD), FD}, Flags); do_sub(Pid, Cons, Flags) when list(Flags) -> [do_sub(Pid, Cons, Flag) || Flag <- Flags]; do_sub(Pid, Cons, Flag) -> case get_con(Pid, Flag)--[Cons] of [] -> case lists:member(Flag, ?FLAGS0) of false -> catch trace(Pid, false, [Flag]); true -> ok end; X -> ok end, case ets_sub({{flags, Pid, Cons}, Flag}) of [] -> case ets_sub({{pids, Cons}, Pid}) of [] -> close(Cons); _ -> ok end; _ -> ok end, Tags = get_tags(Flag)--get_tags(ets_get({flags, Pid, Cons})), [ets_sub({{cons, Pid, Tag}, Cons}) || Tag <- Tags]. get_con(Pid, Flag) -> Fs = ets_mch({{flags, Pid, '$1'}, '$2'}), [Con || [Con, Flist] <- Fs, lists:member(Flag, Flist)]. get_cons(all) -> ets_sel({{pids, '$1'}, '_'}); get_cons(Pid) -> ets_sel({{flags, Pid, '$1'}, '_'}). get_cons(Pid, Tag) when atom(Tag) -> get_cons(Pid, [Tag]); get_cons(Pid, Tags) -> get_cons(Pid, Tags, []). get_cons(Pid, [], O) -> uniq(O); get_cons(Pid, [Tag|T], O) -> get_cons(Pid, T, ets_get({cons, Pid, Tag})++O). get_flags(Tags) -> [Flag || Flag <- ?FLAGS, intersect(Tags, get_tags(Flag)) /= []]. get_flags(Pid, Cons) -> ets_get({flags, Pid, Cons}). get_tags(Flags) when list(Flags)-> uniq(lists:flatten([get_tags(Flag) || Flag <- Flags])); get_tags(Flag) -> case Flag of send -> [send, send_to_non_existing_process]; 'receive' -> ['receive']; procs -> [spawn, exit, link, unlink, getting_linked]; bifs -> [call]; call -> [call, return]; running -> [in, out]; garbage_collection -> [gc_start, gc_end]; _ -> [] end. get_tags(Pid, Cons) -> lists:flatten(ets_mch({{cons, Pid, '$1'}, [Cons]})). log(Data, LD) when record(LD, ld) -> case LD#ld.logging of true -> log(Data); false -> ok end; log({_, Tag, Pid, _} = D0, Data) -> case ets_get({cons, Pid, Tag}) of [] -> %%ets_upd({miss, reg(Pid), Tag}); ok;%%ets_ins({{miss, reg(Pid), Tag}, process_info(Pid)}); Cons -> [do_log(D0, Data, Con) || Con <- Cons] end. log({trace, Tag, Info, Pid, Proc, Now} = Data) -> log({Now, Tag, Pid, {Proc, Info}}, Data); log({trace, 'receive' = Tag, Pid, Info, Now} = Data) -> log({Now, Tag, Pid, Info}, Data); log({trace, Pid, Tag, Info, Now} = Data) -> log({Now, Tag, Pid, Info}, Data). do_log(D0, Data, {file, _, FD}) -> print_log(D0, FD); do_log(D0, Data, Fun) when function(Fun) -> case Fun(Data) of {true, X} -> ok = io:fwrite("~p~n", [X]); true -> print_log(D0, standard_io); _ -> ok end; do_log(D0, Data, Pid) when pid(Pid) -> Pid ! {Data}. print_log({Now, send, Pid, {Pid, {dbgm_wrap, {M, L, F, A}}}}, standard_io) -> Form = "DBGM ~s - <~p> - ~p.erl:~p - ~p/~p~n", ok = io:fwrite(Form, [ntform(Now), reg(Pid), M, L, F, A]); print_log({Now, Tag, Pid, Info}, standard_io) -> Form = "~s, ~w, ~w, ~w~n", ok = io:fwrite(Form, [ntform(Now), Tag, reg(Pid), Info]); print_log({Now, Tag, Pid, Info}, FD) -> disk_log:alog(FD, {Now, Tag, reg(Pid), Info}). gc_log(LD, Pinfo, Name, {Now0, _, _, Info0}, {Now1, _, _, Info1}) -> Gci = gci(Info0, Info1), case element(2, hd(Gci)) of X when X > LD#ld.gc_trig -> Del = lists:duplicate(70,$%), ok = io:fwrite(LD#ld.gc_file, "~s~n% ~s (~w us)~n~w.~n~p.~n~p.~n~s~n", [Del, ntform(Now1), ntform(Now0, Now1), to_atom(Name), Gci, filt(Pinfo), Del]); _ -> ok end. print_info() -> ok = io:fwrite("~-20w:~-30w:~w~n", [target, consumer, flags]), [print_info(D) || D <- ets_mch({{flags,'$1','$2'},'$3'})], ok. print_info([Targ, {file, Cons, Pid}, Flag]) when pid(Pid) -> print_info([Targ, list_to_atom(os:getenv("HOME")++"/"++Cons), Flag]); print_info([Targ, {file, File, _}, Flag]) when list(File) -> print_info([Targ, list_to_atom(File), Flag]); print_info([Targ, {file, File, _}, Flag]) when atom(File) -> print_info([Targ, File, Flag]); print_info([Targ, Cons, Flag]) -> ok = io:fwrite("~-20w:~-30w:~w~n", [reg(Targ), Cons, Flag]). filt([{group_leader, _}|T]) -> filt(T); filt([{dictionary, _}|T]) -> filt(T); filt([{messages, _}|T]) -> filt(T); filt([{links, _}|T]) -> filt(T); filt([H|T]) -> [H|filt(T)]; filt([]) -> []; filt(X) -> X. gci(A, B) -> gci(A, B, [], 0, 0). gci([], [], O, Tot0, Tot1) -> [{tot0, Tot0}, {tot1, Tot1}|O]; gci([{T,D0}|T0], [{T,D1}|T1], O, Tot0, Tot1) -> gci(T0, T1, [{T, {D0, D1, D1-D0}}|O], Tot0+D0, Tot1+D1). to_atom(X) when pid(X) -> list_to_atom(pid_to_list(X)); to_atom(X) when atom(X) -> X. on(error) -> ok; on(P) -> case apid(P) of error -> error; Pid -> catch trace(Pid, true, ?FLAGS0) end. apid(Pid) when pid(Pid) -> Pid; apid(Atom) when atom(Atom) -> case whereis(Atom) of undefined -> error; Pid -> Pid end; apid(_) -> error. reg(Pid) -> case catch process_info(Pid, registered_name) of {registered_name, R} -> R; _ -> Pid end. close({file, File, standard_io}) -> ok; close({file, File, FD}) when pid(FD) -> file:close(FD); close({file, File, FD}) -> disk_log:close(FD); close(_) -> ok. open(FD) -> case get_file(FD) of [] -> %%% {ok, FD} = file:open(os:getenv("HOME")++"/"++File, [write]), File = os:getenv("HOME")++"/"++FD++".LOG", Opts = [{name, FD}, {file, File}, {type, halt}, {size, infinity}, {mode, read_write}], case disk_log:open(Opts) of {ok, FD} -> ok = io:fwrite("~p:~p: opened log : ~p~n", [?MODULE, ?LINE, Opts]), {FD, File}; X -> ok = io:fwrite("~p:~p: error opening ~p: ~p~n", [?MODULE, ?LINE, File, X]), exit(bad_file) end; File -> {FD, File} end. get_file(FD) -> case ets_mch({{pids, {file, '$1', FD}}, '_'}) of [] -> []; [[File]] -> File end. chkt({pending,{_,_,_}}) -> ok; chkt(X) -> case {apid(X), X == all} of {error, false} -> error; _ -> ok end. chkc(_, X) when function(X) -> ok; chkc(add, X) -> case {apid(X), X == screen, catch list_to_binary(X)} of {error, false, {'EXIT', _}} -> error; _ -> ok end; chkc(sub, X) -> case {apid(X), X == all, X == screen, catch list_to_binary(X)} of {error, false, false, {'EXIT', _}} -> error; _ -> ok end. ntform({Msec0, Sec0, Usec0}, {Msec, Sec, Usec}) -> (Msec-Msec0)*(1000*1000*1000*1000)+(Sec-Sec0)*1000*1000+(Usec-Usec0). ntform({Msec, Sec, Usec} = Now) -> T = tuple_to_list(element(2,calendar:now_to_datetime(Now)))++[Usec], io_lib:fwrite("~2.2.0w:~2.2.0w:~2.2.0w.~6.6.0w", T). intersect(L1, L2) -> [E || E <- L1, lists:member(E, L2)]. union(L1, L2) -> uniq(L1++L2). uniq(List) -> uniq(lists:sort(List), []). uniq([], _) -> []; uniq([A], OutList) -> [A|OutList]; uniq([A, A], OutList) -> [A|OutList]; uniq([A, A|InList], OutList) -> uniq([A|InList], OutList); uniq([A|InList], OutList) -> uniq(InList, [A|OutList]). ets_new() -> ets_new(?MODULE). ets_new(Tab) -> catch ets:delete(Tab), ets:new(Tab, [named_table, ordered_set]). ets_get(Key) -> case ets_lup(?MODULE, Key) of [{_, A}] -> A; [X] -> X; Y -> Y end. ets_lup(Tab, Key) -> case catch ets:lookup(Tab, Key) of {'EXIT', _} ->[]; R -> R end. ets_ins(Rec) -> ets:insert(?MODULE, Rec), element(2, Rec). ets_del(Key) -> ets:delete(?MODULE, Key). ets_add({Key, List}) when list(List) -> ets_ins({Key, uniq(ets_get(Key)++List)}); ets_add({Key, X}) -> ets_add({Key, [X]}). ets_sub({Key, List}) when list(List)-> case Data = ets_get(Key)--List of [] -> ets_del(Key); NewList -> ets_ins({Key, NewList}) end, Data; ets_sub({Key, X}) -> ets_sub({Key, [X]}). ets_sel(Pat) -> uniq(lists:flatten(ets_mch(Pat))). ets_mch(Pat) -> ets:match(?MODULE, Pat). ets_siz() -> ets:info(?MODULE, size). ets_upd(Key) -> ets_upd(?MODULE, Key, 1). ets_upd(Tab, Key, Inc) -> case catch ets:update_counter(Tab, Key, Inc) of {'EXIT', _ } -> ets:insert(Tab, {Key, Inc}); _ -> ok end. -------------- next part -------------- %%%---------------------------------------------------------------------- %%% File : gc_scan.erl %%% Author : Mats Cronqvist %%% Purpose : %%% Created : 15 Feb 2000 by Mats Cronqvist %%%---------------------------------------------------------------------- -module(gc_scan). -author('etxmacr@REDACTED'). -export([go/1]). go(File) -> ets_new(), {ok, T} = file:consult(File), dogo(T), rep(). rep() -> L = ets_mch({{info, '$1'}, {hw, '$2'}, {'$3', '_', '_'}}), R = [{P, M, ets_get({gc, P}), HW, ets_get({hw, P})} || [P, HW, M] <- L], {lists:reverse(lists:keysort(4, R)), [E || E = [A, B, C] <- ets_mch({{call, '$1', '$2'}, '$3'}), C > 1]}. dogo([P, [{tot0, T0}|Gci], Proci|T]) -> ets_upd({gc, P}), ets_upd({call, P, lks(current_function, Proci)}), case ets_lup({info, P}) of [] -> ets_ins({{info, P}, {hw, T0}, lks(initial_call, Proci)}); [{{info, P}, {hw, HW}, I}] when HW < T0 -> ets_ins({{info, P}, {hw, T0}, I}), ets_upd({hw, P}); _ -> ok end, dogo(T); dogo([]) -> ok. lks(Tag, L) -> element(2, element(2, lists:keysearch(Tag, 1, L))). ets_new() -> ets_new(?MODULE). ets_new(Tab) -> catch ets:delete(Tab), ets:new(Tab, [named_table, ordered_set]). ets_upd(Key) -> ets_upd(?MODULE, Key, 1). ets_upd(Tab, Key, Inc) -> case catch ets:update_counter(Tab, Key, Inc) of {'EXIT', _ } -> ets:insert(Tab, {Key, Inc}); _ -> ok end. ets_ins(Rec) -> ets_ins(?MODULE, Rec). ets_ins(Tab, Rec) -> catch ets:insert(Tab, Rec). ets_lup(Key) -> ets_lup(?MODULE, Key). ets_lup(Tab, Key) -> case catch ets:lookup(Tab, Key) of {'EXIT', _} ->[]; R -> R end. ets_get(Key) -> case ets_lup(?MODULE, Key) of [{_, A}] -> A; [X] -> X; Y -> Y end. ets_mch(Pat) -> ets:match(?MODULE, Pat). From hal@REDACTED Fri Jul 14 19:42:26 2000 From: hal@REDACTED (Hal Snyder) Date: 14 Jul 2000 12:42:26 -0500 Subject: discovery In-Reply-To: Ulf Wiger's message of "Fri, 14 Jul 2000 09:27:50 +0200 (MET DST)" References: Message-ID: <873dlcy5fh.fsf@ghidra.vail> Ulf Wiger writes: > At AXD 301, we have developed our own read-write locker, which does > handle large networks fairly well. It is also well tested. I've been > documenting it in order to release it as Open Source. Anyone > interested? Definitely! From bob@REDACTED Fri Jul 14 20:32:16 2000 From: bob@REDACTED (Bob) Date: Fri, 14 Jul 2000 08:32:16 -1000 Subject: discovery Message-ID: <200007141832.e6EIWXI06612@hades.cslab.ericsson.net> Ulf Wiger writes: >At AXD 301, we have developed our own read-write locker, which does >handle large networks fairly well. It is also well tested. I've been >documenting it in order to release it as Open Source. Anyone >interested? definately interested, and many thanks for your contributions here, from which I have learned a great deal. bob holmes From jhouchin@REDACTED Fri Jul 14 23:53:23 2000 From: jhouchin@REDACTED (Jimmie Houchin) Date: Fri, 14 Jul 2000 16:53:23 -0500 Subject: Learning Erlang for Web Development Message-ID: <396F8BD3.C5E2D3E0@texoma.net> Hello, I am exploring my options for web development. Erlang and Eddie look like a tremendous foundation for building websites. They look like a great foundation for building a web app server or toolkit like Zope or ACS. A few questions. I do not have a back ground in computer science or mathematics. I have been studying various programming languages for several years. So I have at least a certain level of programming knowledge. Most of the languages I've studied are C++ (very little), Java, Python. I've not used any Functional Languages. I've have a copy of SICP ready to read if necessary. I will read at some point regardless. Will not having a background in math be a problem in learning Erlang for web development? I might have other projects, but none are math related, per se. I have read 'Getting Started' and a portion of the Mnesia pdf. So far nothing I've seen gives me any problems. However, browsing comp.lang.functional and seeing all this stuff about monads, etc. prompted this post. If my background (or lack thereof) does not pose a problem, what books or other materials would be recommended for learning either Erlang or Functional Programming for understanding Erlang? In particular materials not a part of the documentation of Erlang. There seems to be a wonderful amount of documentation available. Thanks for any help you can provide. Jimmie Houchin From hal@REDACTED Sat Jul 15 04:33:59 2000 From: hal@REDACTED (Hal Snyder) Date: 14 Jul 2000 21:33:59 -0500 Subject: Learning Erlang for Web Development In-Reply-To: Jimmie Houchin's message of "Fri, 14 Jul 2000 16:53:23 -0500" References: <396F8BD3.C5E2D3E0@texoma.net> Message-ID: <87em4ww294.fsf@ghidra.vail> Jimmie Houchin writes: > I am exploring my options for web development. Erlang and Eddie look > like a tremendous foundation for building websites. They look like a > great foundation for building a web app server or toolkit like Zope > or ACS. Welcome to the bleeding edge. Erlang's main use today is in telecom systems. But see Eddieware and Bluetail sites for free and for-pay, respectively, load balancing based on Erlang. I work for a small computer telephony company. That was my excuse to learn Erlang. But I think there are enough revolutionary ideas in ERTS to do some very interesting distributed web work. > I do not have a back ground in computer science or mathematics. I > have been studying various programming languages for several years. > So I have at least a certain level of programming knowledge. Background in any discipline of abstract thinking is a big plus. Comp sci, math, particle physics... > Most of the languages I've studied are C++ (very little), Java, Python. > I've not used any Functional Languages. I've have a copy of SICP ready > to read if necessary. I will read at some point regardless. Lisp background makes some of the basic list ops easier to grasp. > Will not having a background in math be a problem in learning Erlang > for web development? I might have other projects, but none are math > related, per se. Probably a math background is not needed. But math is fun, so don't let that deter you from learning more of it! > I have read 'Getting Started' and a portion of the Mnesia pdf. So > far nothing I've seen gives me any problems. However, browsing > comp.lang.functional and seeing all this stuff about monads, etc. > prompted this post. AFAIK the Erlang developers have just said no to monads. Which leads to far fewer existential, tail-chasing threads on the mailing list. :) > If my background (or lack thereof) does not pose a problem, what > books or other materials would be recommended for learning either > Erlang or Functional Programming for understanding Erlang? In > particular materials not a part of the documentation of Erlang. > There seems to be a wonderful amount of documentation available. Maurice Castro's Erlang in Real Time, available on the Erlang website, makes a nice complement to the Red Book for getting started. The Eddieware sources are an example of a production Erlang system; you will learn from them how important it is to understand the System Architecture and System Principles documentation. I even found the Wikie source (including a mini web server and support for Erlang Server Pages!) interesting reading, if a bit rough. Support on this mailing list has been cordial and well thought out, whenever I got stumped. From jhouchin@REDACTED Sat Jul 15 06:30:42 2000 From: jhouchin@REDACTED (Jimmie Houchin) Date: Fri, 14 Jul 2000 23:30:42 -0500 Subject: Learning Erlang for Web Development References: <396F8BD3.C5E2D3E0@texoma.net> <87em4ww294.fsf@ghidra.vail> Message-ID: <396FE8F2.7674464C@texoma.net> Hi, Thanks for your reply. Hal Snyder wrote: > > Jimmie Houchin writes: > > > I am exploring my options for web development. Erlang and Eddie look > > like a tremendous foundation for building websites. They look like a > > great foundation for building a web app server or toolkit like Zope > > or ACS. > > Welcome to the bleeding edge. Erlang's main use today is in telecom > systems. But see Eddieware and Bluetail sites for free and for-pay, > respectively, load balancing based on Erlang. > > I work for a small computer telephony company. That was my excuse to > learn Erlang. But I think there are enough revolutionary ideas in ERTS > to do some very interesting distributed web work. This not being Erlang's current primary use doesn't bother me. It looks like it should support it very well though. From my perspective it seems to have scalability, robustness and fault-tolerance well under control. What it seems to lack for me is a web toolkit for building web based communities, portals, etc. For more information see ACS at http://www.arsdigita.com and Philip Greenspun's book Philip and Alex's Guide to Web Publishing. It would seem to me that Erlang would be an excellent implementation language for what he describes. Differences being he believes scalability belongs on a single machine and that the hard work should be done by a RDBMS. Oh well. I think Erlang, Eddie, INETS and Mnesia could do the job and possibly much more elegantly. I also prefer the way Erlang, Eddie, et al. scales. I like distributing the processes and work load across multiple machines. I think it can provide improved opportunities to survive machine or site failure due either hardware, software or malicious issues. > > I do not have a back ground in computer science or mathematics. I > > have been studying various programming languages for several years. > > So I have at least a certain level of programming knowledge. > > Background in any discipline of abstract thinking is a big plus. Comp > sci, math, particle physics... Abstract thinking is not a problem. > > Most of the languages I've studied are C++ (very little), Java, Python. > > I've not used any Functional Languages. I've have a copy of SICP ready > > to read if necessary. I will read at some point regardless. > > Lisp background makes some of the basic list ops easier to grasp. I bought the book so that I could get a basic grounding in computer science. > > Will not having a background in math be a problem in learning Erlang > > for web development? I might have other projects, but none are math > > related, per se. > > Probably a math background is not needed. But math is fun, so don't > let that deter you from learning more of it! Math doesn't bother me. I am not afraid of math. I am actually quite good with math in the areas where I've studied. I just haven't studied math since high school. So when math is encountered in a computer science context it is generally beyond what I've studied. > > I have read 'Getting Started' and a portion of the Mnesia pdf. So > > far nothing I've seen gives me any problems. However, browsing > > comp.lang.functional and seeing all this stuff about monads, etc. > > prompted this post. > > AFAIK the Erlang developers have just said no to monads. Which leads > to far fewer existential, tail-chasing threads on the mailing list. :) I've seen the topic somewhat on comp.lang.functional, but the points at which I caught it, it seemed to have degraded significantly. > > If my background (or lack thereof) does not pose a problem, what > > books or other materials would be recommended for learning either > > Erlang or Functional Programming for understanding Erlang? In > > particular materials not a part of the documentation of Erlang. > > There seems to be a wonderful amount of documentation available. > > Maurice Castro's Erlang in Real Time, available on the Erlang website, > makes a nice complement to the Red Book for getting started. The > Eddieware sources are an example of a production Erlang system; you > will learn from them how important it is to understand the System > Architecture and System Principles documentation. I even found the > Wikie source (including a mini web server and support for Erlang > Server Pages!) interesting reading, if a bit rough. Thanks for the suggestions. I'll look for the Wikie and Erlang Server Pages. It will be interesting to see what is already available in the area of web development. > Support on this mailing list has been cordial and well thought out, > whenever I got stumped. >From what I've seen the Erlang community is well thought of here and on comp.lang.functional. Nice. :) Jimmie Houchin From jhouchin@REDACTED Sat Jul 15 06:41:47 2000 From: jhouchin@REDACTED (Jimmie Houchin) Date: Fri, 14 Jul 2000 23:41:47 -0500 Subject: Question about Extensions pdf Message-ID: <396FEB8B.5FE87638@texoma.net> I've downloaded and started printing out some of the material to read. There are 2 different Extensions pdf's. They are: Erlang Extensions 4.4 EDE Team 1997-05-21 and Erlang Extensions Since 4.4 version 4.9 OTP Team 1997-05-21 I don't see much difference between the two other than the later also contains chapters on 'includes' and 'miscellaneous'. They both have the same date. But the title of the later, says since 4.4. This seems to denote that it is in addition to the other, but they are dated the same. Am I missing something. Do I only need the later and not the former? Thanks for any clarification. Jimmie Houchin From tobbe@REDACTED Sun Jul 16 21:20:07 2000 From: tobbe@REDACTED (Torbjorn Tornkvist) Date: 16 Jul 2000 21:20:07 +0200 Subject: Learning Erlang for Web Development In-Reply-To: Jimmie Houchin's message of "Fri, 14 Jul 2000 23:30:42 -0500" References: <396F8BD3.C5E2D3E0@texoma.net> <87em4ww294.fsf@ghidra.vail> <396FE8F2.7674464C@texoma.net> Message-ID: As an example of an Erlang/Web application you can also take a look at: http://www.bluetail.com/~tobbe/btt It is published under the GPL license. Version 2.0 is under way (including some mail functionality and a Unix command line interface). Cheers /Tobbe From jhouchin@REDACTED Mon Jul 17 15:25:32 2000 From: jhouchin@REDACTED (Jimmie Houchin) Date: Mon, 17 Jul 2000 08:25:32 -0500 Subject: Learning Erlang for Web Development References: <396F8BD3.C5E2D3E0@texoma.net> <87em4ww294.fsf@ghidra.vail> <396FE8F2.7674464C@texoma.net> Message-ID: <3973094C.C058C976@texoma.net> Hello, Thanks for the information. I'll definitely, download the product and give it a look. Jimmie Houchin Torbjorn Tornkvist wrote: > > As an example of an Erlang/Web application > you can also take a look at: > > http://www.bluetail.com/~tobbe/btt > > It is published under the GPL license. > Version 2.0 is under way (including some > mail functionality and a Unix command > line interface). > > Cheers /Tobbe From kent@REDACTED Mon Jul 17 15:24:58 2000 From: kent@REDACTED (Kent Boortz) Date: 17 Jul 2000 15:24:58 +0200 Subject: Question about Extensions pdf In-Reply-To: Jimmie Houchin's message of "Fri, 14 Jul 2000 23:41:47 -0500" References: <396FEB8B.5FE87638@texoma.net> Message-ID: > Erlang Extensions 4.4 EDE Team 1997-05-21 > and > Erlang Extensions Since 4.4 version 4.9 OTP Team 1997-05-21 > > I don't see much difference between the two other than the later also > contains chapters on 'includes' and 'miscellaneous'. They both have the > same date. But the title of the later, says since 4.4. This seems to > denote that it is in addition to the other, but they are dated the same. The date is wrong. It is a flaw in the build process that the date is often wrong. You only need the "Erlang Extensions Since 4.4 version 4.9" document. kent From vances@REDACTED Mon Jul 17 21:26:53 2000 From: vances@REDACTED (Vance Shipley) Date: Mon, 17 Jul 2000 15:26:53 -0400 Subject: Crypto Message-ID: Given the US government's recent changes in policy toward the export of encryption technology is there any chance that the distribution of the crpto application can be reassessed? -Vance From not.for.email@REDACTED Tue Jul 18 08:44:59 2000 From: not.for.email@REDACTED (Gordon Beaton) Date: 18 Jul 2000 06:44:59 GMT Subject: ignore this, testing news->erlang-q gateway... (was: Simple Applet using Jinterface) References: <402DD461F109D411977E0008C791C312564FCF@imp02mbx.one2one.co.uk>, <8kfk4e$qn2$1@news.du.uab.ericsson.se> Message-ID: <8l0udb$85a$1@news.du.uab.ericsson.se> This mesasge is not empty! And neither was the previous one... /gordon On 11 Jul 2000 17:05:18 GMT, Gordon Beaton wrote: > On 10 Jul 2000 11:23:37 GMT, Sean Hinde wrote: > > Has anyone managed to write a simple applet which just connects back > > to an erlang node on the web server platform - much like the timer > > example in jive? > > > > I'm getting completely bogged down in all sorts of stuff about epmd > > etc, none of which will work in a browser context (I think?) > > > > Is there a simple way to use this stuff in an applet context??? > > Haven't tried it myself, but I think you need to either sign the > applet or configure your browser to allow the necessary socket > connections from the applet to epmd and the remote node. -- g o r d o n . b e a t o n @ e r i c s s o n . c o m software architecture laboratory ericsson research stockholm, sweden From peter@REDACTED Tue Jul 18 18:36:48 2000 From: peter@REDACTED (Peter H|gfeldt) Date: Tue, 18 Jul 2000 18:36:48 +0200 (MET DST) Subject: Crypto In-Reply-To: Message-ID: On Mon, 17 Jul 2000, Vance Shipley wrote: > > Given the US government's recent changes in policy toward > the export of encryption technology is there any chance that > the distribution of the crpto application can be reassessed? > > -Vance > The crypto application was in fact included in the R6B open source version, but not in the binary version. If you are interested in the R6B open source version, please download from www.erlang.org, or if you have a licence for the binary version, please contact support@REDACTED for a binary version of the crypto application. /Peter ------------------------------------------------------------------------- Peter H?gfeldt e-mail : peter@REDACTED Open Telecom Platform Phone: : +46 (8) 727 57 58 Ericsson Utvecklings AB Mobile : +46 070-519 57 51 S-126 25 STOCKHOLM Fax: : +46 (8) 727 5775 Office address: Armborstv?gen 1, ?lvsj?, Sweden From vances@REDACTED Tue Jul 18 19:57:16 2000 From: vances@REDACTED (Vance Shipley) Date: Tue, 18 Jul 2000 13:57:16 -0400 Subject: Crypto In-Reply-To: Message-ID: } The crypto application was in fact included in the R6B open source Well I'll be! Now I'll just have to figure out why it's not building. I had assumed it wasn't available in my runtime because it wasn't distributed. Guess I should have looked. -Vance $ find . -name "*crypt*" ./lib/crypto ./lib/crypto/c_src/crypto_drv.c ./lib/crypto/c_src/elibcrypto.def ./lib/crypto/src/crypto.app.src ./lib/crypto/src/crypto.appup.src ./lib/crypto/src/crypto.erl ./lib/crypto/src/crypto_app.erl ./lib/crypto/src/crypto_server.erl ./lib/crypto/src/crypto_sup.erl From mikl@REDACTED Wed Jul 19 08:18:54 2000 From: mikl@REDACTED (Mickael Remond) Date: 19 Jul 2000 08:18:54 +0200 Subject: Securing communication between nodes Message-ID: <873dl6mylt.fsf@louxor.home> Are there a way to secure the communication between two nodes is the same way that ssh does ? In fact, in need an authentification procedure to connect to the server. I am thinking to solve this problem by creating a socket connection between the two Erlang node and by tunneling the communication. An authentification key thus will be mandatory to send connect to the Erlang server node. But, doing so I bypass the net_kernel handy mecanism. Is there a way to do the same thing with the standard Erlang node communication ? Thank you for your help. -- Micka?l From etxuwig@REDACTED Wed Jul 19 09:14:17 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Wed, 19 Jul 2000 09:14:17 +0200 (MET DST) Subject: Securing communication between nodes In-Reply-To: <873dl6mylt.fsf@louxor.home> Message-ID: On 19 Jul 2000, Mickael Remond wrote: > >Are there a way to secure the communication between two nodes is the >same way that ssh does ? > >In fact, in need an authentification procedure to connect to the >server. I am thinking to solve this problem by creating a socket >connection between the two Erlang node and by tunneling the >communication. An authentification key thus will be mandatory to >send connect to the Erlang server node. > >But, doing so I bypass the net_kernel handy mecanism. > >Is there a way to do the same thing with the standard Erlang node >communication ? > >Thank you for your help. First of all, I know that OTP has experimented with SSL-based distributed Erlang. I'll let them talk about that. If you want to roll your own... I don't know what the proper protocol is here, but there is a net_kernel patch on the commercial side (for R5B, as far as I can tell, the patch has not been merged with R6B yet) that allows you to turn off the auto-connect feature in Erlang. I'd include it, but I'd first like to hear from the OTP folks that it's OK. This is something we wanted for AXD301, in order to better handle the situations where nodes lose contact because the communication fails somehow. It drastically improved our performance in those situations. The new feature is that you can specify the behaviour of the net_kernel via the kernel environment variable 'dist_auto_connect': once: Auto-connect the first time, but do not re-establish if the connection fails. This is what we do at AXD 301. never: Never auto-connect. This might be handy if you want to set up a tunneling connection or perform some custom authentication. The function net_kernel:connect_node(Node) will connect on demand. The default behaviour is the old auto-connect. Of course, you need to implement some other means of communication between the nodes. To complement the 'once' semantics, we at AXD 301 implemented a UDP-based ping mechanism: every 5 seconds, each node will send a UDP "I am here" packet to all known hosts. Upon receipt of such a packet, a process checks against the nodes() list; if the node is there, it does nothing; if the node is not in the nodes() list, one of the nodes must restart in order to reestablish communication (communication is automatically established at startup.) This may seem a bit contrived, perhaps, but it gives us a sure way of detecting partitioned networks. Deciding what to do when it happens is another matter, highly application specific. It is also quite possible to use a backdoor to negotiate who should restart backdoor. This becomes much safer as the nodes to not automatically connect, as an auto-connect can cause lasting inconsistency in the database, name conflicts in the global name server, and a number of other nasty problems. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From tnt@REDACTED Wed Jul 19 14:33:46 2000 From: tnt@REDACTED (Torbjorn Tornkvist) Date: 19 Jul 2000 14:33:46 +0200 Subject: Bluetail Ticket Tracker 2.0 Message-ID: JFYI: A new release (2.0) of the Bluetail Ticket Tracker (GPL licensed) can now be found at: http://www.bluetail.com/~tobbe/btt Major new features are: + Functionality for mail alert and mail retrieval. + (Unix) Command line interface Cheers /Tobbe From ltaesch@REDACTED Wed Jul 19 09:03:10 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Wed, 19 Jul 2000 09:03:10 +0200 Subject: newby: erl in a batch Message-ID: <397552AE.CDFB0B7C@europemail.com> Id like to have erlang started in a batch, and execute, say cot2dot.erl:convert(). 1) should I create a start() function, and should cot2dot be a server behaviour? 2) how can i read the arguments passed on the command line (argc, argv in C), so i can do xxx 1 2 3 if xxx is a batch doing erl -scot2dot $1 $2 $3 , and read 1 2 3? 3) how can i improve any performance a load time, like suppressing the load of .erlang, and should i have the beam in the current dir, or where ? are where could i find these things in the doc ? thks Luc -- First, they ignore you. Then, they laught at you. Then, they fight you. Then, you win. --- Gandhi. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kent@REDACTED Thu Jul 20 15:30:44 2000 From: kent@REDACTED (Kent Boortz) Date: 20 Jul 2000 15:30:44 +0200 Subject: newby: erl in a batch In-Reply-To: Luc Taesch's message of "Wed, 19 Jul 2000 09:03:10 +0200" References: <397552AE.CDFB0B7C@europemail.com> Message-ID: > Id like to have erlang started in a batch, and execute, say > cot2dot.erl:convert(). > > 1) should I create a start() function, and should cot2dot be a server > behaviour? You can start any function, has nothing to do with server behaviours. Run "erl -man erl" or see http://www.erlang.org/documentation/erts-4.9.1/doc/html/erl.html Look at the "-noinput" and "-noshell" flags. Note that you have to explicitly terminate Erlang if you don't want it to stay up. Call halt() in your program or from the command line % erl -noshell -s mymodule myfunction -s erlang halt > 2) how can i read the arguments passed on the command line (argc, > argv in C), so i can do xxx 1 2 3 if xxx is a batch doing erl > -scot2dot $1 $2 $3 , and read 1 2 3? You can read them with init:get_arguments() or init:get_argument(Flag). See http://www.erlang.org/documentation/lib/kernel-2.5/doc/html/init.html Note that if you write "Erlang applications" you pass arguments a bit different. You can use -config to point out a configuration file or alter application data directly from the command line, by giving -Name Par Value. See http://www.erlang.org/documentation/lib/kernel-2.5/doc/html/application.html > 3) how can i improve any performance a load time, like suppressing > the load of .erlang, and should i have the beam in the current dir, > or where ? The "load on demand" Erlang uses not in embedded mode should give reasonable fast startup time, especially when the Erlang shell is not started. > are where could i find these things? in the doc ? You can find some more information at http://www.erlang.org/documentation/doc/system_principles/part_frame.html kent From ltaesch@REDACTED Wed Jul 19 20:47:19 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Wed, 19 Jul 2000 20:47:19 +0200 Subject: XML reading and writing Message-ID: <3975F7B7.A044B064@europemail.com> Id like to parse (basic) xml files, . are there something usable , like a grammar for yecc, or even some lib available (so i can learn the way its done in the erlang spirit) ? and some examples ? and to write xml files ? thks luc -- First, they ignore you. Then, they laught at you. Then, they fight you. Then, you win. --- Gandhi. From mickael.remond@REDACTED Fri Jul 21 13:11:16 2000 From: mickael.remond@REDACTED (Mickael Remond) Date: 21 Jul 2000 13:11:16 +0200 Subject: XML reading and writing In-Reply-To: Luc Taesch's message of "Wed, 19 Jul 2000 20:47:19 +0200" References: <3975F7B7.A044B064@europemail.com> Message-ID: <87d7k7ivqj.fsf@western.ird.idealx.com> >>>>> "Luc" == Luc Taesch writes: > Id like to parse (basic) xml files, . are there something usable , like > a grammar for yecc, or even some lib available (so i can learn the way > its done in the erlang spirit) ? > and some examples ? To parse/read XML files, you have : www.bluetail.com/~joe/xml/xml.html This is a good program (validating parser) The only thing I need is to modify this program to make it able to downgrade to a non validating parser when no DTD is available (stand-alone XML files). > and to write xml files ? I have nothin special, but this is relativly simple to do to walk your data structure and to write it as an XML file. Look at the existing xml program. Look at the data structure it returns. It should be easy to inverse the process and write the XML. (If I have time I should try doing something to handle XML writing). -- Micka?l R?mond - mickael.remond@REDACTED - http://IDEALX.com - 01 44 42 00 38 From nick@REDACTED Fri Jul 21 13:43:53 2000 From: nick@REDACTED (Niclas Eklund) Date: Fri, 21 Jul 2000 13:43:53 +0200 (MET DST) Subject: XML reading and writing In-Reply-To: <3975F7B7.A044B064@europemail.com> Message-ID: On Wed, 19 Jul 2000, Luc Taesch wrote: > Id like to parse (basic) xml files, . are there something usable , like > a grammar for yecc, or even some lib available (so i can learn the way > its done in the erlang spirit) ? > and some examples ? > > and to write xml files ? Hello! There will be a presentation about XML by Ulf Wiger during the next Erlang User Conference. See also the conference program http://www.erlang.se/euc/00/program.shtml Best Regards Nick From etxuwig@REDACTED Fri Jul 21 18:00:22 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Fri, 21 Jul 2000 18:00:22 +0200 (MET DST) Subject: XML reading and writing In-Reply-To: <87d7k7ivqj.fsf@western.ird.idealx.com> Message-ID: On 21 Jul 2000, Mickael Remond wrote: >>>>>> "Luc" == Luc Taesch writes: > > > Id like to parse (basic) xml files, . are there something usable , like > > a grammar for yecc, or even some lib available (so i can learn the way > > its done in the erlang spirit) ? > > and some examples ? > >To parse/read XML files, you have : > >www.bluetail.com/~joe/xml/xml.html > >This is a good program (validating parser) The only thing I need is >to modify this program to make it able to downgrade to a non >validating parser when no DTD is available (stand-alone XML files). > > and to write xml files ? > >I have nothin special, but this is relativly simple to do to walk your data >structure and to write it as an XML file. >Look at the existing xml program. Look at the data structure it returns. >It should be easy to inverse the process and write the XML. >(If I have time I should try doing something to handle XML writing). No need to keep things secret until the conference. This is a huge area, and I'll probably need all the help I can get. ;) I have a non-validating(*) XML parser, which seems to work fairly well, but I'm reluctant to spread it at the moment, because I'm still making changes off and on. I will need some guinea pigs in a week or two. Any volunteers? (*) It does cheat and impose some validity constraints. I will remove those checks. My XML parser adheres closely to the XML 1.0 spec, as far as I've been able to tell -- it handles: - UniCode characters (although transfer decoding is not integrated yet and proper UniCode string matching is not done) - XML namespaces, with inheritance according to the specs (Name expansion is not done yet) - Language codes (also with proper inheritance) - DTD parsing, Conditional includes (I've yet to implement actual fetching of external DTDs, but I feel that that should be an add-on, so I've implemented hooks for it.) It is also done to support both event-based and tree-based parsing, and is capable of pausing and waiting for data during the parse. The default behaviour is a tree-based parse. I am also almost done with XPATH, and I have an approach for generating output, e.g. XML (easy) or, say, HTML, from an Erlang structure. I've tried to make the parser extract enough information to make the XPATH search engine efficient (things like element position, namespace prefixes, language codes, ancestry.) I'm hoping to get to stylesheet support before I go on parental leave in August. Perhaps someone would like to take a stab at e.g. DTD- or namespace caching, or perhaps XPointer using my framework? If any of you feel that you have some concrete problems that might be good for some beta testing, please let me know. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From mickael.remond@REDACTED Fri Jul 21 19:39:09 2000 From: mickael.remond@REDACTED (Mickael Remond) Date: 21 Jul 2000 19:39:09 +0200 Subject: XML reading and writing In-Reply-To: Ulf Wiger's message of "Fri, 21 Jul 2000 18:00:22 +0200 (MET DST)" References: Message-ID: <8766pzfkn6.fsf@western.ird.idealx.com> >>>>> "Ulf" == Ulf Wiger writes: > No need to keep things secret until the conference. This is a huge > area, and I'll probably need all the help I can get. ;) > I have a non-validating(*) XML parser, which seems to work fairly > well, but I'm reluctant to spread it at the moment, because I'm still > making changes off and on. I will need some guinea pigs in a week or > two. Any volunteers? Yes. Me! I am working every day with XML data and I am really willing to switch some of my programs to Erlang. So, I would be very pleased to test your code. > My XML parser adheres closely to the XML 1.0 spec, as far as I've been > able to tell -- it handles: [...] All this things are great. > It is also done to support both event-based and tree-based parsing, > and is capable of pausing and waiting for data during the parse. > The default behaviour is a tree-based parse. > I am also almost done with XPATH, and I have an approach for > generating output, e.g. XML (easy) or, say, HTML, from an Erlang > structure. I've tried to make the parser extract enough information to > make the XPATH search engine efficient (things like element position, > namespace prefixes, language codes, ancestry.) > I'm hoping to get to stylesheet support before I go on parental leave > in August. Perhaps someone would like to take a stab at e.g. DTD- or > namespace caching, or perhaps XPointer using my framework? Why not. I am not sure to be confident enough in my Erlang pratice, but this could be a good way to improve my coding in Erlang. > If any of you feel that you have some concrete problems that might be > good for some beta testing, please let me know. I must think to submit a very typical example, but I sure have something to test. > /Uffe -- Micka?l R?mond - mickael.remond@REDACTED - http://IDEALX.com - 01 44 42 00 38 From enano@REDACTED Fri Jul 21 20:49:56 2000 From: enano@REDACTED (Miguel Barreiro Paz) Date: Fri, 21 Jul 2000 20:49:56 +0200 (CEST) Subject: XML reading and writing In-Reply-To: <8766pzfkn6.fsf@western.ird.idealx.com> Message-ID: We've been performing XSL transformations from within erlang using a pool of external C++ processors (Sablotron, www.gingerall.com). It's pretty fast. Victor Gulias developed an interface and performed some benchmarks, I'll ask him for results when he's back next week. Regards, From alea101@REDACTED Sat Jul 22 18:53:38 2000 From: alea101@REDACTED (alea miras) Date: Sat, 22 Jul 2000 17:53:38 +0100 Subject: Installation on Red Hat 6.2 (i386) Message-ID: An embedded and charset-unspecified text was scrubbed... Name: not available URL: From dne@REDACTED Sat Jul 22 19:36:39 2000 From: dne@REDACTED (Daniel Neri) Date: Sat, 22 Jul 2000 19:36:39 +0200 Subject: Installation on Red Hat 6.2 (i386) In-Reply-To: alea miras's message of "Sat, 22 Jul 2000 17:53:38 +0100" References: Message-ID: <87ya2urrrs.fsf@nowhere.mayonnaise.net> alea miras writes: > I tried to compile ERLANG V4.9.1 on a Red Hat 6.2 i386 machine which > seemed to be successfull. However if I try to start ERLANG with its > toolbar (erl -s toolbar) the shell gives me > > {'init terminating in do_boot',{startup_timeout,toolbar}} What happens if you try starting it from the erlang shell? I.e. ,---- | Eshell V4.9.1 (abort with ^G) | 1> toolbar:start(). | <0.30.0> | 2> `---- > after a while. I followed the installation instructions, doing: > > ./configure prefix=/opt/ERLANG > make > make install Did you apply the patches found at the "bugs & fixes" page[*]? Best wishes, --Daniel [*] http://www.erlang.org/faq/bugs_and_fixes.html -- Daniel Neri dne@REDACTED From mikl@REDACTED Sat Jul 22 21:50:55 2000 From: mikl@REDACTED (Mickael Remond) Date: 22 Jul 2000 21:50:55 +0200 Subject: Installation on Red Hat 6.2 (i386) In-Reply-To: Daniel Neri's message of "Sat, 22 Jul 2000 19:36:39 +0200" References: <87ya2urrrs.fsf@nowhere.mayonnaise.net> Message-ID: <87u2dinduo.fsf@louxor.home> >>>>> "alea" == alea miras writes: alea> I tried to compile ERLANG V4.9.1 on a Red Hat 6.2 i386 machine which alea> seemed to be successfull. However if I try to start ERLANG with its alea> toolbar (erl -s toolbar) the shell gives me {'init terminating in alea> do_boot',{startup_timeout,toolbar}} I do not know about Red Hat RPMs, but I think this is a problem with gs installation. Can you do a gs:start(). from the Erlang shell ? -- Micka?l From alea101@REDACTED Sun Jul 23 02:15:06 2000 From: alea101@REDACTED (alea miras) Date: Sun, 23 Jul 2000 01:15:06 +0100 Subject: Installation on Red Hat 6.2 (i386) Message-ID: An embedded and charset-unspecified text was scrubbed... Name: not available URL: From alea101@REDACTED Sun Jul 23 02:32:55 2000 From: alea101@REDACTED (alea miras) Date: Sun, 23 Jul 2000 01:32:55 +0100 Subject: Installation on Red Hat 6.2 (i386) Message-ID: An embedded and charset-unspecified text was scrubbed... Name: not available URL: From smart@REDACTED Sun Jul 23 03:59:07 2000 From: smart@REDACTED (Bob Smart) Date: Sun, 23 Jul 2000 11:59:07 +1000 Subject: make failure In-Reply-To: Your message of "21 Jul 2000 13:11:16 +0200." <87d7k7ivqj.fsf@western.ird.idealx.com> Message-ID: <200007230159.LAA09605@trout.hpc.CSIRO.AU> Make fails on a farly generic solaris 2.5.1 machine with gcc: make[2]: Entering directory `/trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session' make[3]: Entering directory `/trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session/src' erlc -W -pa /trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session/ebin -I ../include -I {error_logger,{{2000,7,21},{15,23,15}},'inet_parse:~p:~p: Eshell V4.9.1 (abort with ^G) /trout/projects/ssg3/otp_src_R6B-0/bootstrap/lib/ic-3.8.1/include \|'\034']} +'{preproc_cmd, "gcc -x c++ -E -D_CORBA_"}' \ +'{{impl, "mnesia_corba_session"}, "mnesia_session_impl"}' \ mnesia_corba_session.idl /bin/sh: syntax error at line 1: `(' unexpected make[3]: *** [oe_mnesia_corba_session.hrl] Error 2 make[3]: Leaving directory `/trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session/src' make[2]: *** [opt] Error 2 make[2]: Leaving directory `/trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session' make[1]: *** [opt] Error 2 make[1]: Leaving directory `/trout/projects/ssg3/otp_src_R6B-0/lib' make: *** [libs] Error 2 Any ideas? Bob From per@REDACTED Sun Jul 23 11:17:19 2000 From: per@REDACTED (Per Hedeland) Date: Sun, 23 Jul 2000 11:17:19 +0200 (MET DST) Subject: Installation on Red Hat 6.2 (i386) In-Reply-To: References: Message-ID: <200007230917.e6N9HJk03878@super.du.uab.ericsson.se> "alea miras" wrote: >gs:start(). gives no result, that is the Erlang shell has to be >interrupted manually, so I guess your assumption must be right - it >should be a problem with gs. So how could I correct this? I assumed the >installation of gs together with other libraries would have been >handled by 'make install'. At least there is a gs-1.3.6 directory under >Root_Of_Erlang/lib/erlang/lib. > >If I go into Root_Of_Erlang_Source/lib/gs and do a ./configure there is >a complain about Tcl standalone support: > >checking standalone support of Tcl... don't know >== Warning: Your libtcl7.6.a is not yet created in the directory > /opt/erlang/src/otp_src_R6B-0/lib/gs/c_src/lib/tcl7.6/unix, so I cannot determine this. > For now I just assume there is standalone support. > If you get an error later during the build of wish.standalone, > then first compile Tcl7.6 with standalone support. This is normal. However as Daniel suggested, please apply the patches from the "bugs & fixes" page - in particular the one for tclPosixStr.c fixes a problem that will make the build of tcl (and thereby gs) fail on RH 6.1, I assume 6.2 too - but you might just as well apply them all. >but the compilation via make keeps going. Any ideas? Well, the make system isn't perfect (yet:-), it will in some cases continue with the build even when there is a fatal error in some part (there will of course be error messages, though) - or perhaps this is a feature?:-) --Per Hedeland per@REDACTED From per@REDACTED Sun Jul 23 11:31:51 2000 From: per@REDACTED (Per Hedeland) Date: Sun, 23 Jul 2000 11:31:51 +0200 (MET DST) Subject: make failure In-Reply-To: <200007230159.LAA09605@trout.hpc.CSIRO.AU> References: <200007230159.LAA09605@trout.hpc.CSIRO.AU> Message-ID: <200007230931.e6N9VpU04047@super.du.uab.ericsson.se> Bob Smart wrote: >Make fails on a farly generic solaris 2.5.1 machine with gcc: > >make[2]: Entering directory `/trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session' >make[3]: Entering directory `/trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session/src' >erlc -W -pa /trout/projects/ssg3/otp_src_R6B-0/lib/mnesia_session/ebin -I ../include -I {error_logger,{{2000,7,21},{15,23,15}},'inet_parse:~p:~p: Eshell V4.9.1 (abort with ^G) /trout/projects/ssg3/otp_src_R6B-0/bootstrap/lib/ic-3.8.1/include \|'\034']} >+'{preproc_cmd, "gcc -x c++ -E -D_CORBA_"}' \ >+'{{impl, "mnesia_corba_session"}, "mnesia_session_impl"}' \ >mnesia_corba_session.idl >/bin/sh: syntax error at line 1: `(' unexpected That's weird, I've successfully built R6B-0 on Solaris 2.5.1 - well, at least most of it, some parts failed because that system didn't have a complete g++/libg++ installation, but as far as I recall the failure wasn't like the above. The strange "/bin/sh:" line is in my experience typical of trying to run a binary from another architecture/OS (the shell tries to run it as a script when exec() fails) - are you sure you started with a cleanly unpacked distribution, and don't have non-Sun/Solaris stuff in e.g. personal directories in your $PATH that might interfere? In any case, you do need not only g++ (which comes "automatically" with gcc unless you explicitly prevent it) but also the corresponding libg++ (which is a separate distribution - hm, I guess it's actually libstdc++ for modern versions of gcc/g++) in order to get everything to build, so you might want to check this out. --Per Hedeland per@REDACTED From alea101@REDACTED Sun Jul 23 14:33:26 2000 From: alea101@REDACTED (alea miras) Date: Sun, 23 Jul 2000 13:33:26 +0100 Subject: Installation on Red Hat 6.2 (i386) Message-ID: An embedded and charset-unspecified text was scrubbed... Name: not available URL: From ltaesch@REDACTED Thu Jul 20 18:26:46 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Thu, 20 Jul 2000 18:26:46 +0200 Subject: http rendering Message-ID: <39772846.7FFB5DA3@europemail.com> Id like to render some text on a web, and im looking for some basic example of html rendering. are there anything that shows integration of the erlang web server httpd to some erlang program? I also looked at btt-2.0, but as far as i understand the core, it doesnt uses httpd, but directly the tcp port. 1) can someone confirm my understanding? (im newby, and never rendered directly without apache. note that looks pretty easy, so...) 2) what is the interest of that approach , and drawbacks too ? -- First, they ignore you. Then, they laught at you. Then, they fight you. Then, you win. --- Gandhi. From mickael.remond@REDACTED Mon Jul 24 10:58:49 2000 From: mickael.remond@REDACTED (Mickael Remond) Date: 24 Jul 2000 10:58:49 +0200 Subject: http rendering In-Reply-To: Luc Taesch's message of "Thu, 20 Jul 2000 18:26:46 +0200" References: <39772846.7FFB5DA3@europemail.com> Message-ID: <87hf9f7vli.fsf@western.ird.idealx.com> >>>>> "Luc" == Luc Taesch writes: Luc> Id like to render some text on a web, and im looking for some basic Luc> example of html rendering. Luc> are there anything that shows integration of the erlang web server Luc> httpd to some erlang program? There is an exemple in the inets package. You should have a look at httpd_exemple.erl. The given configuration exemples are made to use this module as an erlang CGI by default. Luc> I also looked at btt-2.0, but as far as i understand the core, it Luc> doesnt uses httpd, but directly the tcp port. 1) can someone confirm Luc> my understanding? (im newby, and never rendered directly without Luc> apache. note that looks pretty easy, so...) Yes. I think you are right from what I have seen... Luc> 2) what is the interest of that approach , and drawbacks too ? I think the advantage is that you can customized your application to exactly fit your need and then, you can put your apps in a single package, making your program very easy to use and install. The drawback is that you need to developp a program supporting at least a subset of the http protocol. -- Micka?l R?mond - mickael.remond@REDACTED - http://IDEALX.com - 01 44 42 00 38 From bjowi@REDACTED Mon Jul 24 16:27:49 2000 From: bjowi@REDACTED (=?ISO-8859-1?Q?Bj=F6rn Wingman?=) Date: Mon, 24 Jul 2000 16:27:49 +0200 (MET DST) Subject: Corba structures Message-ID: <200007241427.QAA18185@sture.lysator.liu.se> I'm trying to transfer an idl-struct from a jacorb corba server to an erlang client. The struct is defined in idl as: struct Lotsofdata { double x; doubley; ... and so on, 12 doubles in total. }; it is transferred with a simple call: Lotsofdata getState(); ...which I call from erlang like this: State = 'stateholding_module:getState(ObjRef), ...but what I get from the call is not an erlang record, as I expected, but an exception: {'EXCEPTION',{'UNKNOWN',[],0,'COMPLETED_MAYBE'}} Why is this? Have I misunderstood something about idl-structs and erlang records? Simpler calls that just return a single integer work fine. I have also tested the getState() call with a java client, and that worked ok. /Bj?rn Wingman From luke@REDACTED Tue Jul 25 00:38:17 2000 From: luke@REDACTED (Luke Gorrie) Date: 25 Jul 2000 00:38:17 +0200 Subject: Corba structures In-Reply-To: "=?iso-8859-1?q?Bj=F6rn?= Wingman"'s message of "Mon, 24 Jul 2000 16:27:49 +0200 (MET DST)" References: <200007241427.QAA18185@sture.lysator.liu.se> Message-ID: <87og3ntaqu.fsf@cockatoo.bluetail.com> "Bj?rn Wingman" writes: > I'm trying to transfer an idl-struct from a jacorb corba server to an > erlang client. The struct is defined in idl as: [...] > ...but what I get from the call is not an erlang record, as I > expected, but an exception: > > {'EXCEPTION',{'UNKNOWN',[],0,'COMPLETED_MAYBE'}} Are you using R6B? The previous open-source release (47.4.1?) had a bug in Orber's double marshalling which I think gave this sort of error, but it looks like that's gone in the new release. If you're using an older erlang and want to continue to, I think I have a patch for this problem that I can send you. -Luke From bjowi@REDACTED Mon Jul 24 17:00:51 2000 From: bjowi@REDACTED (=?ISO-8859-1?Q?Bj=F6rn Wingman?=) Date: Mon, 24 Jul 2000 17:00:51 +0200 (MET DST) Subject: Corba structures In-Reply-To: <87og3ntaqu.fsf@cockatoo.bluetail.com> (message from Luke Gorrie on 25 Jul 2000 00:38:17 +0200) References: <200007241427.QAA18185@sture.lysator.liu.se> <87og3ntaqu.fsf@cockatoo.bluetail.com> Message-ID: <200007241500.RAA18462@sture.lysator.liu.se> > Are you using R6B? The previous open-source release (47.4.1?) had a > bug in Orber's double marshalling which I think gave this sort of > error, but it looks like that's gone in the new release. Yes, I'm using R6B. erl -version: Erlang (BEAM) emulator version 4.9.1 /Bj?rn From nick@REDACTED Mon Jul 24 17:20:59 2000 From: nick@REDACTED (Niclas Eklund) Date: Mon, 24 Jul 2000 17:20:59 +0200 (MET DST) Subject: Corba structures In-Reply-To: <200007241500.RAA18462@sture.lysator.liu.se> Message-ID: On Mon, 24 Jul 2000, =?ISO-8859-1?Q?Bj=F6rn Wingman?= wrote: > > Are you using R6B? The previous open-source release (47.4.1?) had a > > bug in Orber's double marshalling which I think gave this sort of > > error, but it looks like that's gone in the new release. > > Yes, I'm using R6B. > > erl -version: > Erlang (BEAM) emulator version 4.9.1 Hello! The UNKNOWN exception is raised when Orber tries to decode the reply-body. Since the double's are contained within a struct it must have been registered in the Interface Repository (oe_register()). If it's registered just supply the Orber-version and I'll check what's wrong. /Nick From bjowi@REDACTED Mon Jul 24 17:45:09 2000 From: bjowi@REDACTED (=?ISO-8859-1?Q?Bj=F6rn Wingman?=) Date: Mon, 24 Jul 2000 17:45:09 +0200 (MET DST) Subject: Corba structures Message-ID: <200007241545.RAA18792@sture.lysator.liu.se> > The UNKNOWN exception is raised when Orber tries to decode the reply-body. > Since the double's are contained within a struct it must have been > registered in the Interface Repository (oe_register()). If it's registered > just supply the Orber-version and I'll check what's wrong. Aha. That solved it. Thanks! (There was something strange with your mail. Lots and lots of ^@-signs in the header.) Another, related question: It seems the idl-translator behaves a bit differently from other ones I have come across. If I have this interface defined in one file, foo.idl: module Foo { interface Bar { short getP(); }; }; ...and this in another file, gazonk.idl: #include "foo.idl" module Foo { interface Baz { short getQ(); }; }; ...ic:gen("gazonk.idl") reports an error: "gazonk.idl" on line 3: multiple defined identifier "Foo". ...this is not what I expected, or indeed what other idl compilers do. /Bj?rn Wingman From nick@REDACTED Mon Jul 24 18:02:24 2000 From: nick@REDACTED (Niclas Eklund) Date: Mon, 24 Jul 2000 18:02:24 +0200 (MET DST) Subject: Corba structures In-Reply-To: <200007241545.RAA18792@sture.lysator.liu.se> Message-ID: On Mon, 24 Jul 2000, =?ISO-8859-1?Q?Bj=F6rn Wingman?= wrote: > > The UNKNOWN exception is raised when Orber tries to decode the reply-body. > > Since the double's are contained within a struct it must have been > > registered in the Interface Repository (oe_register()). If it's registered > > just supply the Orber-version and I'll check what's wrong. > > Aha. That solved it. Thanks! It's a very common misstake. > (There was something strange with your mail. Lots and lots of ^@-signs > in the header.) Pine doesn't seem like using the letters ?, ? or ? in the header. IC does not support multiple definitions in previously released versions. According to the OMG specifications it should be possible. It's possible that this will be available in the next release (with a few restrictions). For now you have to define the complete module "at once". /Nick > Another, related question: > > It seems the idl-translator behaves a bit differently from other ones > I have come across. If I have this interface defined in one file, foo.idl: > > module Foo > { > interface Bar > { > short getP(); > }; > }; > > ...and this in another file, gazonk.idl: > > #include "foo.idl" > > module Foo > { > interface Baz > { > short getQ(); > }; > }; > > > ...ic:gen("gazonk.idl") reports an error: > > "gazonk.idl" on line 3: multiple defined identifier "Foo". > > ...this is not what I expected, or indeed what other idl compilers do. > > /Bj?rn Wingman > From ltaesch@REDACTED Sun Jul 23 16:16:29 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Sun, 23 Jul 2000 16:16:29 +0200 Subject: ebin and incl path Message-ID: <397AFE3D.68F03591@europemail.com> up to now i did pretty basic stuff, but now i need some organisation. as far as i understnad, u put the /src, /ebin, (priv) , /incl dir for sources, beam, hrl. bur how can i have the bin automatically put in bin, the incl taken from incl,,...etc ? are there some paramters to set, or env variable, or config erlanf files ? i have seen some outdir thingy added from emacs when i CcCk, and some apps i looked into have no path added to the include, so i suppose the path is modified, but how ? From laheadle@REDACTED Tue Jul 25 01:15:50 2000 From: laheadle@REDACTED (Lyn A Headley) Date: 24 Jul 2000 18:15:50 -0500 Subject: http rendering In-Reply-To: Mickael Remond's message of "24 Jul 2000 10:58:49 +0200" References: <39772846.7FFB5DA3@europemail.com> <87hf9f7vli.fsf@western.ird.idealx.com> Message-ID: Luc> 2) what is the interest of that approach , and drawbacks too Luc> ? Mickael> I think the advantage is that you can customized your Mickael> application to exactly fit your need and then, you can Mickael> put your apps in a single package, making your program Mickael> very easy to use and install. Mickael> The drawback is that you need to developp a program Mickael> supporting at least a subset of the http protocol. If you are talking about the "write your own webserver" approach, as taken by the erlang crew, there are a _lot_ of wheels to reinvent. You must not only replicate say, apache's work on the http protocol, but any additional functionality you might need as well, such as logging, SSL, cgi, persistent cgi-type stuff, url-rewriting, authentication, proxying, virtual hosts, etc etc etc. not to mention all the stuff that will come along in the future. I think it would be superduper cool to see somebody embed erlang in AOLServer as an alternative to tcl, as is being done with python. But instead of the currently pretty weak thread communication support the server would support full erlang message sends... -Lyn From gunilla@REDACTED Tue Jul 25 08:20:47 2000 From: gunilla@REDACTED (Gunilla Hugosson) Date: Tue, 25 Jul 2000 08:20:47 +0200 Subject: ebin and incl path References: <397AFE3D.68F03591@europemail.com> Message-ID: <397D31BF.D008DB27@erix.ericsson.se> Hi Luc, You can use the erlc compiler which understands '-I directory' and '-o directory' flags (and more). Example: % erlc -I ../incl -o ../ebin a.erl b.erl Check the man page for erlc for details. / Gunilla Luc Taesch wrote: > > up to now i did pretty basic stuff, but now i need some organisation. as > far as i understnad, u put the /src, /ebin, (priv) , /incl dir for > sources, beam, hrl. > > bur how can i have the bin automatically put in bin, the incl taken from > incl,,...etc ? > > are there some paramters to set, or env variable, or config erlanf files > ? i have seen some outdir thingy added from emacs when i CcCk, and some > apps i looked into have no path added to the include, so i suppose the > path is modified, but how ? -- _____Gunilla Hugosson____________________________________________ Ericsson Utvecklings AB / Open Systems Gunilla.Hugosson@REDACTED http://www.erlang.se office +46-8-7275730 cellular +46-70-5247429 From etxuwig@REDACTED Tue Jul 25 09:16:05 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Tue, 25 Jul 2000 09:16:05 +0200 (MET DST) Subject: http rendering In-Reply-To: Message-ID: On 24 Jul 2000, Lyn A Headley wrote: > Luc> 2) what is the interest of that approach , and drawbacks too > Luc> ? > > Mickael> I think the advantage is that you can customized your > Mickael> application to exactly fit your need and then, you can > Mickael> put your apps in a single package, making your program > Mickael> very easy to use and install. > > Mickael> The drawback is that you need to developp a program > Mickael> supporting at least a subset of the http protocol. > >If you are talking about the "write your own webserver" approach, as >taken by the erlang crew, there are a _lot_ of wheels to reinvent. > >You must not only replicate say, apache's work on the http protocol, >but any additional functionality you might need as well, such as >logging, SSL, cgi, persistent cgi-type stuff, url-rewriting, >authentication, proxying, virtual hosts, etc etc etc. not to mention >all the stuff that will come along in the future. Granted, and this is the main reason why the Erlang HTTP server is made plug-compatible with Apache. There is another use for Erlang web servers: acting as an operator interface in embedded systems. For this purpose, it's perfectly reasonable to roll your own, as you can make a web server with a very small footprint in Erlang. For example, the HTTP server in the CCviewer application I posted yesterday (which serves its purpose pretty well) consists of only about 500 lines of code. Still, if one would like to get into a feature race with Apache, Erlang might be a good vessel for it -- esp. when the Bit syntax comes along. (: /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From ltaesch@REDACTED Mon Jul 24 09:15:44 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Mon, 24 Jul 2000 09:15:44 +0200 Subject: ebin and incl path References: <397AFE3D.68F03591@europemail.com> <397D31BF.D008DB27@erix.ericsson.se> Message-ID: <397BED20.50D61AF1@europemail.com> Gunilla Hugosson wrote: > Hi Luc, > > You can use the erlc compiler which understands '-I directory' > and '-o directory' flags (and more). Example: > % erlc -I ../incl -o ../ebin a.erl b.erl thks a lot. indeed, ill find that in the man page. btw, are there any way to have this by defaults in emacs, so when I type CcCk, it woks well (i would appreciate if one can paste the .emacs part, as im not an emacs expert...;-) > > > Check the man page for erlc for details. > > / Gunilla > > Luc Taesch wrote: > > > > up to now i did pretty basic stuff, but now i need some organisation. as > > far as i understnad, u put the /src, /ebin, (priv) , /incl dir for > > sources, beam, hrl. > > > > bur how can i have the bin automatically put in bin, the incl taken from > > incl,,...etc ? > > > > are there some paramters to set, or env variable, or config erlanf files > > ? i have seen some outdir thingy added from emacs when i CcCk, and some > > apps i looked into have no path added to the include, so i suppose the > > path is modified, but how ? > > -- > _____Gunilla Hugosson____________________________________________ > Ericsson Utvecklings AB / Open Systems > Gunilla.Hugosson@REDACTED http://www.erlang.se > office +46-8-7275730 cellular +46-70-5247429 -- First, they ignore you. Then, they laught at you. Then, they fight you. Then, you win. --- Gandhi. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mickael.remond@REDACTED Tue Jul 25 19:44:26 2000 From: mickael.remond@REDACTED (Mickael Remond) Date: 25 Jul 2000 19:44:26 +0200 Subject: Mnesia is overloaded ? Message-ID: <87zon6je9x.fsf@western.ird.idealx.com> When trying to store a lot of data in Mnesia, I get the following message: ** ERROR ** Mnesia is overloaded: {dump_log,write_threshold} What does it mean ? In fact, it seems that the data are correctly stored in the database, so maybe an error recovery process has been triggered, but ... I don't known -- Micka?l R?mond From ulf.ekstrom@REDACTED Wed Jul 26 08:31:08 2000 From: ulf.ekstrom@REDACTED (=?iso-8859-1?Q?Ulf_Ekstr=F6m?=) Date: Wed, 26 Jul 2000 08:31:08 +0200 Subject: Erlang 4.3.1 Message-ID: <001501bff6cb$159762e0$5d00000a@st.se> Hi! I am trying to compile an old version of Erlang for Linux (erl4.3.1), since I need it to run an old program which is using the tcl-module. The problem is that the erlang distribution contains o-files compiled with an old version of libc and I am unable to link these with my compiler. I have tried it both with libc5 and the newest glibc. I am using RedHat 6.2. Does anyone know which version of libc I need in order to compile this version of Erlang? Or maybe how/if I can use the old tcl-module in the latest version of Erlang/OTP? /Uffe From thomas@REDACTED Wed Jul 26 12:51:40 2000 From: thomas@REDACTED (Thomas Arts) Date: Wed, 26 Jul 2000 12:51:40 +0200 Subject: [Fwd: 3nd Invitation to IFL2000] Message-ID: <397EC2BC.96E51412@cslab.ericsson.se> -------------- next part -------------- An embedded message was scrubbed... From: Markus Mohnen Subject: 3nd Invitation to IFL2000 Date: Wed, 26 Jul 2000 12:40:59 +0200 Size: 9159 URL: From etxuwig@REDACTED Wed Jul 26 12:51:17 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Wed, 26 Jul 2000 12:51:17 +0200 (MET DST) Subject: Mnesia is overloaded ? In-Reply-To: <87zon6je9x.fsf@western.ird.idealx.com> Message-ID: On 25 Jul 2000, Mickael Remond wrote: > >When trying to store a lot of data in Mnesia, I get the following message: > > ** ERROR ** Mnesia is overloaded: {dump_log,write_threshold} > >What does it mean ? > >In fact, it seems that the data are correctly stored in the database, so maybe >an error recovery process has been triggered, but ... I don't known The error message is generated when a log dump has been triggered before the previous one completed. Mnesia can handle this, but it's a warning that a backlog is beginning to pile up. If those error messages keep popping up, you may be working your way into a fatal overload situation. However, if your application stops writing to mnesia, or at least slows down, mnesia will catch up. /Uffe -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From Sean.Hinde@REDACTED Wed Jul 26 13:42:41 2000 From: Sean.Hinde@REDACTED (Sean Hinde) Date: Wed, 26 Jul 2000 12:42:41 +0100 Subject: Mnesia is overloaded ? Message-ID: <402DD461F109D411977E0008C791C31256501B@imp02mbx.one2one.co.uk> It also makes a big difference whether you have dump_log_load_regulation set to true or false. If true, the dumper process runs much more slowly which will make the error report more likely, If false the dumper runs at full speed but the emulator itself can pause noticably while it waits for lots of disc intensive bifs to complete. I tend to run with it set to true as I need to guarantee read response times. Sean > -----Original Message----- > From: Ulf Wiger [mailto:etxuwig@REDACTED] > Sent: 26 July 2000 11:51 > To: Mickael Remond > Cc: erlang-questions@REDACTED > Subject: Re: Mnesia is overloaded ? > > > On 25 Jul 2000, Mickael Remond wrote: > > > > >When trying to store a lot of data in Mnesia, I get the > following message: > > > > ** ERROR ** Mnesia is overloaded: {dump_log,write_threshold} > > > >What does it mean ? > > > >In fact, it seems that the data are correctly stored in the > database, so maybe > >an error recovery process has been triggered, but ... I don't known > > The error message is generated when a log dump has been triggered > before the previous one completed. Mnesia can handle this, but it's a > warning that a backlog is beginning to pile up. > > If those error messages keep popping up, you may be working your way > into a fatal overload situation. However, if your application stops > writing to mnesia, or at least slows down, mnesia will catch up. > > /Uffe > -- > Ulf Wiger tfn: +46 8 719 81 95 > Network Architecture & Product Strategies mob: +46 70 519 81 95 > Ericsson Telecom AB, Datacom Networks and IP Services > Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden > NOTICE AND DISCLAIMER: This email (including attachments) is confidential. If you have received this email in error please notify the sender immediately and delete this email from your system without copying or disseminating it or placing any reliance upon its contents. We cannot accept liability for any breaches of confidence arising through use of email. Any opinions expressed in this email (including attachments) are those of the author and do not necessarily reflect our opinions. We will not accept responsibility for any commitments made by our employees outside the scope of our business. We do not warrant the accuracy or completeness of such information. From sam@REDACTED Thu Jul 27 02:21:49 2000 From: sam@REDACTED (Samuel Tardieu) Date: 27 Jul 2000 02:21:49 +0200 Subject: Mnesia 3.8.2 to 3.8.5 and releases Message-ID: <2000-07-27-02-21-50+trackit+sam@inf.enst.fr> In the .appup given with Mnesia 3.8.5 (which is AFAIK the latest publicly released version of Mnesia), there is no indication on how to upgrade/downgrade to/from Mnesia 3.8.2 (which is the one contained in OTP R6B, the latest publicly released version of open-source Erlang). This prevents building relup files for upgrading an application from Mnesia 3.8.2 to Mnesia 3.8.5 using SASL. Does anyone know what needs to be placed in the .appup downgrade/upgrade sections? (I could guess by diffing files, but if someone has that already...) Sam -- Samuel Tardieu -- sam@REDACTED From ltaesch@REDACTED Thu Jul 27 02:30:38 2000 From: ltaesch@REDACTED (luc) Date: Thu, 27 Jul 2000 02:30:38 +0200 Subject: newby: comment and review Message-ID: <397F82AE.657BF5D5@abom.com> as a very newby in erlang, id like to receive some review on the following piece of code, especially on the design viewpoint. purpose: comp2html/2 render a composite structure into html. test/0 illustrate this. the source list is recusively like tagged_list={tag, value | [values], [{tagged_list...}]}. (this could result from an xml-tree for instance). currently only the tag "name" is really trapped, for example purpose. other are expected. same for format. italic() is used here , but
  • , , and so on will be used. A) uses of erlang. 1) basic : please comment on the use of the terminal clauses of comp2html. I feel this can be done a better way... but i dont really know how. 2) use of higer order function: are there any way to navigate this composite structure with HOF ? ( adapting the strucuture, if neccessary) B) extensibility and readability of the code 3) as the number of tags will grow, the code will grow messy, as it mixes navigating the structure and formating the result in the same place. would it be possible to separate them , say, one function that navigate the structure, and another , the formatter , give as a fun to the first one? the code should be clearer, and afford chage of tags more easily. (kind of a visitor pattern in OO) 4)currently, only html is targetted. but other format , like docbook sgml/xml is probable for printing. this will impact the formatter. but we can also expect that the structure of the target document may not match 1:1 the input structure, but may rearrage it slightly, like ignoring some tags, rearranging sort orders... depending on the document expected (like a TOC, a REF, an index, ... reflect the same contents in differents solution). so ideally, borrowing from a sgml production chain, the following would be separated: contents, structure, format. and a result document would be the composition of a structure fun, over a format fun . (eg: format_comp ( one_per_page_structure , to_html, [taggeg_list...]), where one_per_page_structure , to_html are fun. ) does it sounds realistically feasible, or just plain dream (or just inconprehensible, as explained here ;-)? (note : i dont plan to reinvent latex or jade (yet...) ;-.) -------------- next part -------------- An HTML attachment was scrubbed... URL: From sam@REDACTED Thu Jul 27 02:29:37 2000 From: sam@REDACTED (Samuel Tardieu) Date: 27 Jul 2000 02:29:37 +0200 Subject: Releases, config and boot script Message-ID: <2000-07-27-02-29-38+trackit+sam@inf.enst.fr> When a release is set as the default one with release_handler:make_permanent, how does the next start find the right sys.config and start.boot files? Do I have to give -config and -boot parameters explicitely? Or is there a way to tell erl that the files corresponding to the permanent release are to be used? In my case, the releases_dir path is set as a SASL application parameter in sys.config but this chicken/egg issue is not a problem (thanks to RELDIR which can be used instead). Sam -- Samuel Tardieu -- sam@REDACTED From sam@REDACTED Thu Jul 27 02:45:47 2000 From: sam@REDACTED (Samuel Tardieu) Date: 27 Jul 2000 02:45:47 +0200 Subject: newby: comment and review In-Reply-To: luc's message of "Thu, 27 Jul 2000 02:30:38 +0200" References: <397F82AE.657BF5D5@abom.com> Message-ID: <2000-07-27-02-45-48+trackit+sam@inf.enst.fr> >>>>> "Luc" == luc writes: Luc> (note : i dont plan to reinvent latex or jade (yet...) ;-.) Have you seen the mails on this list last week concerning XML? You could output your tree in DocBook/XML format, then call Jade to get any format you want. This would benefit everyone :) Sam PS/ concerning your project, I must say that I have still to find a pleasant way to represent HTML data; the problem is not in transforming the data in HTML, but rather in manipulating the data first... -- Samuel Tardieu -- sam@REDACTED From etxuwig@REDACTED Thu Jul 27 09:53:57 2000 From: etxuwig@REDACTED (Ulf Wiger) Date: Thu, 27 Jul 2000 09:53:57 +0200 (MET DST) Subject: Releases, config and boot script In-Reply-To: <2000-07-27-02-29-38+trackit+sam@inf.enst.fr> Message-ID: On 27 Jul 2000, Samuel Tardieu wrote: >When a release is set as the default one with >release_handler:make_permanent, how does the next start find the right >sys.config and start.boot files? There is a file in releases/ called start_erl.data, which identifies the ERTS version and the system release version: ernie@REDACTED> cat .../releases/start_erl.data 4.8.2.7 R1 There should be (and is) a releases/R1/ directory in the above example, where you can find the start.boot and sys.config files. Here are some extracts from the AXD 301 start scripts, showing how one can derive info from start_erl.data and other files. if [ -f `eval echo $CP_DIR/releases/start_erl.data` ]; then START_ERL_DATA=`eval cat $CP_DIR/releases/start_erl.data` else exit_not_installed fi ERTS_VSN=`eval echo $START_ERL_DATA | awk '{print $1}'` VSN=`eval echo $START_ERL_DATA | awk '{print $2}'` if [ -f `eval echo $CP_DIR/releases/$VSN/$BOOTFLAGS_FILE` ]; then BOOTFLAGS=`eval cat $CP_DIR/releases/$VSN/$BOOTFLAGS_FILE` PIPE_DIR=/tmp/axd301@$HOST/ SYS_CONFIG=`eval echo $CP_DIR/releases/$VSN/sys.config` else exit_not_installed fi START_FLAGS=" -mode embedded -setcookie nc1 -env ERL_MAX_ETS_TABLES 30000 $EXTRA_START_FLAGS" ERL_CMD="/usr/sbin/setuid_socket_wrap -d -snmp_fd,0:161 -- `eval echo $BOOTFLAGS` $HEART $START_FLAGS $IGNORE_MNESIA_BACKUP_AT_STARTUP" if [ ! -d "$PIPE_DIR" ]; then mkdir $PIPE_DIR; fi $OTP_ROOT/erts-$ERTS_VSN/bin/run_erl $PIPE_DIR $LOG_DIR "$ERL_CMD" > /dev/null 2 >&1 & echo "To connect the shell to the erlang node, run:" echo " to_erl $PIPE_DIR" echo >Do I have to give -config and -boot parameters explicitely? Or is >there a way to tell erl that the files corresponding to the permanent >release are to be used? > >In my case, the releases_dir path is set as a SASL application >parameter in sys.config but this chicken/egg issue is not a problem >(thanks to RELDIR which can be used instead). > > Sam > -- Ulf Wiger tfn: +46 8 719 81 95 Network Architecture & Product Strategies mob: +46 70 519 81 95 Ericsson Telecom AB, Datacom Networks and IP Services Varuv?gen 9, ?lvsj?, S-126 25 Stockholm, Sweden From ltaesch@REDACTED Tue Jul 25 15:35:23 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Tue, 25 Jul 2000 15:35:23 +0200 Subject: newby: comment and review References: <397F82AE.657BF5D5@abom.com> <2000-07-27-02-45-48+trackit+sam@inf.enst.fr> Message-ID: <397D979B.C97AA55F@abom.com> Samuel Tardieu wrote: > >>>>> "Luc" == luc writes: > > Luc> (note : i dont plan to reinvent latex or jade (yet...) ;-.) > > Have you seen the mails on this list last week concerning XML? if u mention the xml at the conference from ulf, yes. my concern is after u have parsed the xml tree. > You > could output your tree in DocBook/XML format, then call Jade to get > any format you want. This would benefit everyone :) > i agree that it would be a way to do it. 1) in fact the output will produce xml/docbook, then ill use jade. but ill use that for priting, not for online rendering, as it may be a bit overkill (but maybe im wrong, and i should consider it) 2) the result of that will be gpl, so it will benefit everyone... 3) the point i raised was more on learning HOF, which is still an unexplored region for me. imention jade as a joke, just to mention that the point was not to re-invent it, but rather understand how it could be mimic-ed to a point) > > Sam > > PS/ concerning your project, I must say that I have still to find a > pleasant way to represent HTML data; the problem is not in > transforming the data in HTML, but rather in manipulating the data > first... not sure i understand. the data will come from an mnesia database, where they a re read from, posted to via web. the xml tree will be for input -output to the external world. in my case, the "world" that im modeling is a component, which definition is naturaly recusiv. but you are right, to manipulate it, i will hace similar issue, ie navigatin trees and lauching actions... is this why u mention the xml messages ? > > -- > Samuel Tardieu -- sam@REDACTED -- First, they ignore you. Then, they laugh at you. Then, they fight you. Then, you win. --- Gandhi. From vladdu@REDACTED Fri Jul 28 00:06:09 2000 From: vladdu@REDACTED (Vlad Dumitrescu) Date: Fri, 28 Jul 2000 00:06:09 +0200 Subject: Erlang on DOS? Message-ID: Hi all! Is it possible to compile Erlang as a DOS application, using extended memory to go out of the 640k box? It would be interesting to have it as a kind of embedded OS (with DOS as the kernel)... regards, /Vlad -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.ekstrom@REDACTED Fri Jul 28 14:04:35 2000 From: ulf.ekstrom@REDACTED (=?iso-8859-1?Q?Ulf_Ekstr=F6m?=) Date: Fri, 28 Jul 2000 14:04:35 +0200 Subject: binary_to_term Message-ID: <000b01bff88b$ff959940$5d00000a@st.se> I have a binary file produced by term_to_binary in 1995 (erl4.3.1). The problem is that I want to use the information in that file with the latest version of Erlang but binary_to_term can't read the representation used by the old term_to_binary. The function erlang:old_binary_to_term doesn't work either. Does anybody know how to solve this problem? /Ulf Ekstr?m From tobbe@REDACTED Sat Jul 29 22:23:44 2000 From: tobbe@REDACTED (Torbjorn Tornkvist) Date: 29 Jul 2000 22:23:44 +0200 Subject: http rendering In-Reply-To: Luc Taesch's message of "Thu, 20 Jul 2000 18:26:46 +0200" References: <39772846.7FFB5DA3@europemail.com> Message-ID: > I also looked at btt-2.0, but as far as i understand the core, it doesnt > uses httpd, but directly the tcp port. BTT uses the standard Erlang (web) httpd server. The tcp port(s) you are referring to are used for communicating to SMTP/POP servers and the command line interface. Cheers /Tobbe From Bruce@REDACTED Sat Jul 29 22:41:06 2000 From: Bruce@REDACTED (Bruce Fitzsimons) Date: Sat, 29 Jul 2000 22:41:06 +0200 Subject: New Linked-in Driver documentation? Message-ID: <045301bff99d$55a71c20$0121970a@fitzsimons.org> Hi, I've just been attempting to link my dialogic linked-in driver to Erlang. I have been following the instructions in "the book" but it now appears that these have been superceeded. I notice references to dynamicly loaded drivers, and a few more entries in the driver_entry struct. It appears as though the driver_tab.c file is dynamically generated from the build script, although I haven't found where yet. I guess this file replaces the config.c mentioned in the book. Is there any information about the new method, including "dynamic drivers" as they look interesting? I have searched the doc's but can't find anything (although I may be looking in the wrong place). I am prepared to "...use the source Luke; let it guide your hands..." but any help would be appreciated. Cheers, Bruce From jamesh@REDACTED Tue Jul 11 19:15:14 2000 From: jamesh@REDACTED (James Hague) Date: Tue, 11 Jul 2000 12:15:14 -0500 Subject: Status of type system? Message-ID: <3.0.32.20000711121500.00ebd538@volition-inc.com> The Erlang type system has been used in the development of shipping products, correct? As best I can tell, it is only for cross-checking during development and the compiler doesn't use the information. Are there any plans to integrate the type system into the Erlang release and to possibly use the type data for improved code generation? If not, what's the state of the type system? James From Anna-Maria.Rosen@REDACTED Mon Jul 31 08:20:07 2000 From: Anna-Maria.Rosen@REDACTED (Anna Maria =?iso-8859-1?Q?Ros=E9n?=) Date: Mon, 31 Jul 2000 08:20:07 +0200 Subject: Erlang course! Message-ID: <39851A97.D1EA506A@eede.ericsson.se> Hi! I wonder if you can offer Erlang courses in the middle of August? We need to have an inhouse course in Erlang here in Ericsson in Hildesheim (germany). Or do you know other companies that can offer Erlang courses? Would be thankful for further information! Thanks! Kind regards Anna Maria Ros?n Project Administrator Ericsson Eurolab Deutschland GmbH From not.for.email@REDACTED Mon Jul 31 13:32:21 2000 From: not.for.email@REDACTED (Gordon Beaton) Date: 31 Jul 2000 11:32:21 GMT Subject: binary_to_term References: <000b01bff88b$ff959940$5d00000a@st.se> Message-ID: <8m3o45$s98$1@news.du.uab.ericsson.se> On 28 Jul 2000 12:04:35 GMT, Ulf Ekstr?m wrote: > I have a binary file produced by term_to_binary in 1995 (erl4.3.1). > The problem is that I want to use the information in that file with > the latest version of Erlang but binary_to_term can't read the > representation > used by the old term_to_binary. > The function erlang:old_binary_to_term doesn't work either. > > Does anybody know how to solve this problem? According to Bj?rn, the external format has not changed during the history of OTP (although things have been added), so it is possible that the file is corrupt. Can you decode it with erl4.3.1 (do you still have that version available)? /gordon -- g o r d o n . b e a t o n @ e r i c s s o n . c o m software architecture laboratory ericsson research stockholm, sweden From ulf.ekstrom@REDACTED Mon Jul 31 14:35:32 2000 From: ulf.ekstrom@REDACTED (=?iso-8859-1?Q?Ulf_Ekstr=F6m?=) Date: Mon, 31 Jul 2000 14:35:32 +0200 Subject: binary_to_term References: <000b01bff88b$ff959940$5d00000a@st.se> <8m3o45$s98$1@news.du.uab.ericsson.se> Message-ID: <000901bffaeb$d1b323a0$5d00000a@st.se> I have the erl4.3.1 distribution (for Linux) but the problem is that it contains object-files (no source files) and I havn't succeded in linking them. This is because I do not know which version of libc was used to produce them. (they were built in 1995) /Ulf Ekstr?m ----- Original Message ----- From: "Gordon Beaton" To: Sent: Monday, July 31, 2000 1:32 PM Subject: Re: binary_to_term > On 28 Jul 2000 12:04:35 GMT, Ulf Ekstr?m wrote: > > I have a binary file produced by term_to_binary in 1995 (erl4.3.1). > > The problem is that I want to use the information in that file with > > the latest version of Erlang but binary_to_term can't read the > > representation > > used by the old term_to_binary. > > The function erlang:old_binary_to_term doesn't work either. > > > > Does anybody know how to solve this problem? > > According to Bj?rn, the external format has not changed during the > history of OTP (although things have been added), so it is possible > that the file is corrupt. Can you decode it with erl4.3.1 (do you > still have that version available)? > > /gordon > > -- > g o r d o n . b e a t o n @ e r i c s s o n . c o m > software architecture laboratory > ericsson research > stockholm, sweden From not.for.email@REDACTED Mon Jul 31 15:12:04 2000 From: not.for.email@REDACTED (Gordon Beaton) Date: 31 Jul 2000 13:12:04 GMT Subject: binary_to_term References: <000b01bff88b$ff959940$5d00000a@st.se>, <8m3o45$s98$1@news.du.uab.ericsson.se>, <000901bffaeb$d1b323a0$5d00000a@st.se> Message-ID: <8m3tv4$13c$1@news.du.uab.ericsson.se> On 31 Jul 2000 12:35:32 GMT, Ulf Ekstr?m wrote: > I have the erl4.3.1 distribution (for Linux) but the problem is that > it contains object-files (no source files) and I havn't > succeded in linking them. This is because I do not know > which version of libc was used to produce them. > (they were built in 1995) If you want, send me the file and I'll see if I can read it with 4.3 or 4.4 (4.3.1 seems to be missing here). In any case I can read the file manually and should be able to see what is wrong with it, if that's the problem. /gordon -- g o r d o n . b e a t o n @ e r i c s s o n . c o m software architecture laboratory ericsson research stockholm, sweden From ltaesch@REDACTED Sun Jul 30 19:22:22 2000 From: ltaesch@REDACTED (Luc Taesch) Date: Sun, 30 Jul 2000 19:22:22 +0200 Subject: does mnesia:load_textfile still work ? Message-ID: <3984644E.72445FD9@abom.com> i cant make mnesia:load_textfile work. the file i use is created from a dump_to_textfile, and is very basic i got the message: ***table funky already exists, just entering data {aborted,{no_exists,funky}} and no data are entered, nor table created. textfile:{tables,[{funky,[key,val]}]}. {funky,k1,v1}. -- First, they ignore you. Then, they laugh at you. Then, they fight you. Then, you win. --- Gandhi. From laufer@REDACTED Mon Jul 31 21:21:57 2000 From: laufer@REDACTED (=?iso-8859-1?Q?Konstantin_L=E4ufer?=) Date: Mon, 31 Jul 2000 14:21:57 -0500 Subject: PLI 2000: Second call for participation Message-ID: [This may actually be the first call for participation on some of the lists.] The deadline for early conference registration and hotel reservations is August 25th (please see below for details). CALL FOR PARTICIPATION PLI 2000 Principles, Logics, and Implementations of high-level programming languages Montr?al, Canada September 17-22, 2000 http://www.cs.yorku.ca/pli00 The colloquium on Principles, Logics, and Implementations of high-level programming languages is a collection of conferences and workshops aimed at the advancement of high-level programming languages. PLI 2000 comprises the following conferences and workshops: ICFP International Conference on Functional Programming PPDP Principles and Practice of Declarative Programming Haskell Workshop on Haskell HLCL High-Level Concurrent Languages HOOTS Higher Order Operational Techniques in Semantics RULE Rule-Based Programming Scheme Workshop on Scheme and Functional Programming SAIG Semantics, Applications and Implementation of Program Generation TIC Types in Compilation ---------------- A detailed presentation of the colloquium including a preliminary program, registration and accommodation information and forms are all available on the WEB. The rest of this message is a summary of the PLI 2000 home page. SCHEDULE OF EVENTS -------------------------------------------------------------- | Sep 17 | Sep 18 | Sep 19 | Sep 20 | Sep 21 | Sep 22 | | Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | |==============================================================| | | | | | | I C F P | P P D P | | | | | |==============================================================| | Haskell | | RULE | HLCL | TIC | HOOTS | |---------+-------------------+-----------+--------------------| | Scheme | | SAIG | | -------------------------------------------------------------- REGISTRATION The registration fees and the registration procedure are described on the WEB. To benefit from the early bird rate, your registration and payment must be received by August 25. VENUE PLI 2000 will be held in Montr?al, at Holiday Inn Select Jardin Sinomonde 99 avenue Viger Ouest Montr?al (Qu?bec) Canada H2Z 1E9 Reservation: +1 888 878 9888 http://www.hiselect-yul.com/html/reserv2_A.html URL: http://www.hiselect-yul.com Email: hiselect-yul@REDACTED Telephone: +1 514 878 9888 Fax: +1 514 878 6341 ACCOMMODATION The Holiday Inn offers rooms at the reduced conference rate of CAD $ 130 + 15% tax for both single and double rooms. (1 CAN $ equals approximately 0.68 US $.) Indicate that you are attending the PLI 2000 colloquium of the ACM when you make the reservation. Hotel reservations need to be done before August 25 to secure the reduced rate. Reservations received after this date will be accepted on a space available basis at the reduced conference rate. Additional information is provided on the WEB. --------------------------------------------------------------- September is usually very busy in Montr?al, so you should arrange for your accommodation as soon as possible. --------------------------------------------------------------- GRANTS FOR YOUNG RESEARCHERS Students who will present a paper at one of the conferences or workshops associated with PLI 2000 may apply for travel fellowships from the PAC fund (see http://www.acm.org/sigplan/PAC). CONFERENCE SECRETARIAT For any information, please contact the conference secretariat PLI 2000 c/o Yvette Dubuis DI - LAMP EPFL - Ecole Polytechnique Federale de Lausanne IN (Ecublens) CH 1015 Lausanne Switzerland Email: pli00@REDACTED Telephone: +41 21 693 5202 Fax: +41 21 693 6660 SPONSORS PLI 2000 is organized by ACM SIGPLAN with the support of Microsoft Research. ICFP 2000 is also supported by Cambridge University Press, Compaq, EAPLS, Universit? de Montr?al, and Sun Microsystems. PPDP 2000 is also supported by the Canadian Space Agency, York University, EAPLS, the Association for Logic Programming, and COMPULOG Americas. From UCS714695@REDACTED Mon Jul 31 09:00:13 2000 From: UCS714695@REDACTED (JOHNNY) Date: Mon, 31 Jul 2000 15:00:13 +0800 Subject: =?big5?B?tlfAdbbVuvS49KbmvlChQKFAoUChQKFAoUA=?= Message-ID: <200008011128.e71BSLk47278@hades.cslab.ericsson.net> ??????????? ????????????? ??????????????????? ??????????????????????? ??????????????? ??????????????? -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: ??.gif Type: image/gif Size: 4940 bytes Desc: not available URL: From UCS714695@REDACTED Mon Jul 31 09:00:13 2000 From: UCS714695@REDACTED (JOHNNY) Date: Mon, 31 Jul 2000 15:00:13 +0800 Subject: =?big5?B?tlfAdbbVuvS49KbmvlChQKFAoUChQKFAoUA=?= Message-ID: <200008011325.e71DPTk47453@hades.cslab.ericsson.net> ??????????? ????????????? ??????????????????? ??????????????????????? ??????????????? ??????????????? -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: ??.gif Type: image/gif Size: 4940 bytes Desc: not available URL: