> Marc Battyani wrote in message <8tkf8h$4k...@reader1.fr.uu.net>...
> >May be it's an English issue (from me) but when you write:
> >> CORBA is already badly designed, so if you are new to sockets and > >> protocol design (which you will get yourself into), the likelihood > >> that you, too, will design your protocol badly is so high that it is > >> probably better to go with CORBA.
> >My understanding of this is that "CORBA is bad" and "you probably won't do > >better so use it anyway"
> >This is why I ask you if you still think so if the protocol is a simple > lisp > >reader friendly text based protocol when 1) the task is really easy and 2) > >you master both sides of the communication?
> The issue that you are missing is that there is more to a protocol than > simply the data being transmitted. There's also the timing and sequencing > details. You can certainly have a very sophisticated and complicated > protocol based on either a Lisp text stream or a binary stream. > HTTP is, essentially, a text based protocol, but that fact alone doesn't > make it good or bad, just readable to humans.
Sure. I do agree with all this and this is why I think that for easy tasks (T.B.D.) it's better to use sockets than CORBA (or COM for M$ fans). When I don't write Lisp, I write VHDL where I implement lots of (fast!) protocols at the bit/hardware level. Well, it seems that I should communicate in VHDL or Lisp rather than English today...
Another communication channel I used between applications is mapped memory + system events. This gives the fastest communication I could achieve between 2 applications.
> Tim wrote: > > So I suppose either SW people will have to work out that you can't > > program network protocols as if they were memory access on a PDP11, or > > some *really* cool HW people will manage to make RPC look like is *is* > > memory access on a PDP11!
> Is this because most SW people are stupid and most HW people are clever? > Is this why SW people like java, C++ ... and not Common Lisp?
Now that HW is written in VHDL (SW) the frontier is becoming rather fuzzy. Lisp has been very present in the electronics CAD software industry and the standard file format (EDIF) should look familiar here. See yourself, here are the first lines of an EDIF file...
Looks like HW guys don't need XML though I'm sure some brilliant SW guy will explain some day that these file should be written in XML to be used by C#.NET... When this arrives we could start to have to reboot, several time per day, our watches, radio receivers, phones, lifts, flash lights,...
> The likelihood that novices will do worse than CORBA is still very, > very high. Look at how people design their input languages from > simple files that are under total programmer control, and often they > blow it so bad applications crash and burn, a missed version update > causes serious bit rot, and changing your mind about something means > you lose a _lot_ of old information. Using Lisp for this does not > really help.
> No networked task is really easy. If it were, you wouldn't be doing > it. If you're still doing it, how could that possibly impact any > decision on how to design protocols for tasks _worth_ doing?
> I actually _favor_ Lisp-based protocols, but not because "it's text, > so it's easy" is even close to relevant (it isn't -- syntax is an > important issue to humans -- it is _not_ important to representing > the data), but because it means I have a stable and proven framework > to work from.
> It is actually quite important to realize that just because it's > text doesn't make it any less fraught with all the dangers of other > network protocols. For one thing, network communications is subject > to a failure modes that novices never consider. Even with the best > of checksum algorithms, you _may_ get rotten data once in a while. > Deadlocks may occur whether you use a hariy binary protocol or a > Lisp-based protocol. All these things are unlikely to happen if you > run on a local machine, and they don't happen if you work within the > same memory. (Unless you run without error correcting memory, of > course, but then again, if you do that, you have already proclaimed > to the world that you don't care, so nobody else should bother.)
Ok, I fully agree with this. I missed the emphasis you made on the difficulty of designing a correct protocol, and I thought you were against using Lisp based protocols.
* Paolo Amoroso <amor...@mclink.it> | Could you please mention a few examples of well designed protocols | that are worth studying? Thanks in advance.
TCP and IPv4 are _very_ good protocols. (I don't know enough about IPv6 to rate it.) The telecommunications protocols used on the gigabit trunks and on the long-haul high-speed interconnects are amazing feats of science. Of the really, _really_ large protocol suites, I find ITU's Signalling System #7, the Digital Subscriber Signalling System, and the Integrated Digital Services Network protocols as well-designed as they are complex. The Telecom people have probably done some of the best work there is in protocol design. Just take a look at how they started out with very low speeds, like 300 bps, but over time managed to squeeze 56kbps through the feeble phone lines that were not upgraded, then got DSL to work across that same old copper wire. Impresses me, anyway.
FTP and SMTP are well-designed and fairly small protocols, too. (Small does not mean quick-and-dirty: If you spend less than 3 months implementing a server or client for either of them, however, you're doing it wrong, as almost every implementation that is not regarded as a huge monstrosity are.)
As an example of a very good way of separating abstractions and representation, ASN.1 and its encoding rules are worth a study, such as what is done with SNMP.
Finally, if you don't know X.25, you don't know packet exchange, but it's _real_ old, now, and probably doesn't bring anything directly applicable to people who think in streams implemented on top of record-based protocols, except what _not_ to do with streams and when it really does make sense to use records.
_Very_ few of the recent application-level Internet protocols are worth the paper they aren't published on. The sheer lack of design behind the protocol that is _actually_ at work in the MIME cruft is astonishing, but trying to track that braindamaged piece of shit from its inception to its current specification level through the numerous RFCs will tell you what a few over-sized egos who had no clue what they were doing can do to a conceptually _very_ simple thing: Wrap various objects in a textual representation.
On the other hand, the Network Time Protocol was done by people who really cared and also who managed to keep the dolts out of the way.
#:Erik -- Does anyone remember where I parked Air Force One? -- George W. Bush
> * Philip Lijnzaad <lijnz...@ebi.ac.uk> > | Unless the communication involves simple but big data (kind of like ftp, > | say), use CORBA, by a very long shot.
> Really? I'd use CORBA for fairly simple stuff and roll my own if I > get above a fairly low complexity threshold, but I know I'm about > three orders of magnitude better at protocol design than the CORBA
The real question should be whether you believe your new protocol adds real value to what it is you are producing. If you are in the protocol business this is obvious. If you are in something else entirely and only need to make use of protocols, it is highly unlikely that the time spent on inventing yet another one will be of any real value for your project/product.
CORBA is _not_ anything like the best distributed object protocol that one could define - probably a legacy of the C++ mentality of most of the original vendors involved. However, it _does_ work rather well for many scenarios - most any that someone not in the protocol tool business would care about.
> team could ever dream of becoming. For instance, CORBA is a single- > threaded protocol, with lock-step properties where you wait for the > answer before you continue with the next transaction. This is of > course a consequence of serial computations and CORBA being a very, > very slow way of doing serial computations on disjoint processes and > processors.
This has not been true since at least CORBA 2.0. That's not to say that you have "true" asynchronous communication (request and asynch notification of completion) out of the box (certainly not in any of the ORBs we've used). However, you certainly have one way calls (basically datagrams...) and can also use of these, or more likely synchronous "posts", to get this. We've done this here and the results are actually _very_ good.
The nice thing about using CORBA to do this is that it at least eliminates all the marshalling and unmarshalling of data items (primitive and structured) in a platform independent way. Unless your business is really line protocols or something similar, rolling your own here with sockets is just a distracting waste of resources.
> the software world? People who use all this new hardware power > only to wait for ages for incoming data before they turn around > _real_ fast to send something that did not even need to wait for > that value and then proceed to wait for ages, again,
Only if you don't make use of threads in making the calls in the first place. If each call is a thread, the "waiting for the synchronous reply" is irrelevant. Most ORBs are multithreaded and can easily handle this.
> E.g, how many applications do you know which continue to work just > as well if you move one of the computers 3000 miles away? Do you > think CORBA handles this situation well? From what I have seen, the
Well we have done it at 2000 miles and the results were basically "instantaneous" (well under a second). Using straight X was death. Using HTTP was (of course) worse than death.
/Jon
-- Jon Anthony Synquiry Technologies, Ltd. Belmont, MA 02478, 617.484.3383 "Nightmares - Ha! The way my life's been going lately, Who'd notice?" -- Londo Mollari
* Jon S Anthony <j...@synquiry.com> | The real question should be whether you believe your new protocol adds | real value to what it is you are producing. If you are in the | protocol business this is obvious. If you are in something else | entirely and only need to make use of protocols, it is highly unlikely | that the time spent on inventing yet another one will be of any real | value for your project/product.
I disagree with this assessment. It is the same argument that can be made for something overly complex and badly implemented, like SGML, It has also been touted as solving problems that people would not be able to solve cheaper by themselves. That was just plain false. Similar problems crop up with other committee products that have tried to solve overly broad and thus non-existing problems instead of trying to solve real problems of real complexity.
How much effort does it take a good system designer to come up with something better than XML for any _particular_ purpose? If he grasps the good and useful qualities of SGML, a simplified syntax, slightly general tools, etc, can be written in a fairly short amount of time, and it costs less to develop, maintain, and use than a full-fledged SGML system does, because, importantly, SGML's full generality has surpassed the point where additional features bring nothing but more costs than benefits to the equation.. A particular markup language (or something similar) is also easier to learn for someone who has _not_ spent much too much time studying the original -- like one one who is only moderately familiar with the original.
| CORBA is _not_ anything like the best distributed object protocol | that one could define - probably a legacy of the C++ mentality of | most of the original vendors involved. However, it _does_ work | rather well for many scenarios - most any that someone not in the | protocol tool business would care about.
Precisely, but having designed a few protocols that have been in wide use for over a decade each, just how much effort do you think it is to design new ones? The reason protocol design is hard is that people are told not to do it, and thus do not investigate the issues involved. This also leads to incredibly bad protocols in use, because the users are told they are too hard to understand.
| This has not been true since at least CORBA 2.0.
I'm "happy" to hear that.
| The nice thing about using CORBA to do this is that it at least | eliminates all the marshalling and unmarshalling of data items | (primitive and structured) in a platform independent way.
You know, this is _not_ a hard problem. It is a hard problem in C++ and the like, but that is because those languages have lost every trace of the information the compiler had when building the code. That design mistakes has cost the world _billions_ of dollars. If you don't make that design mistake, you don't have to worry. I know, this sounds "too good to be true", but the inability of any small C++ program to read C++ source code and do useful things with it is the reason for all these weird data-oriented languages.
| Unless your business is really line protocols or something similar, | rolling your own here with sockets is just a distracting waste of | resources.
Well, I have tried both approaches. Have you?
| Only if you don't make use of threads in making the calls in the | first place. If each call is a thread, the "waiting for the | synchronous reply" is irrelevant. Most ORBs are multithreaded and | can easily handle this.
Right. Not my experience. Of course, everything gets better in the mythical "future", so do stay with CORBA if you have other things to do while waiting for the synchronous request for more features sees a response from the CORBA people. (Sorry, a tad rambling here.)
| Well we have done it at 2000 miles and the results were basically | "instantaneous" (well under a second). Using straight X was death. | Using HTTP was (of course) worse than death.
How long time do you think you would have spent designing a protocol that would have been just as good?
#:Erik -- Does anyone remember where I parked Air Force One? -- George W. Bush
In our last episode (30 Oct 2000 16:34:26 +0100), the artist formerly known as Eric Marsden said:
>>>>>> "en" == Erik Naggum <e...@naggum.net> writes:
> en> For instance, CORBA is a single- threaded protocol, with > en> lock-step properties where you wait for the answer before you > en> continue with the next transaction.
>this is no longer true. While the standard CORBA communication model >is synchonous twoway (the client thread which sends the request is >blocked while waiting for the server to answer), several other types >of communication are possible:
> * oneway invocations, where the client doesn't wait for a response
Deprecated, due to the availability of AMI...
> * deferred synchonous, where the client invokes a request and can > poll the server later to see whether a response is available (this > is available by using the dynamic invocation interface) > * over EventChannels specified by the CORBA Event Service, or the more > recent Notification Service. The Event Channel mediates > communication between consumers and suppliers, and allows push, > pull, push/pull and pull/push interactions.
Essentially, these two approaches amount to a _simulation_ of asynchronous communications by using some sort of "proxy" to manage the connection. They still use synchronous twoway communications; if whatever server is sitting there ready to accept the requests can queue them so they _appear_ async, then you get something that _looks_ async.
Reality doesn't change...
> * asynchronous method invocations provided by CORBA Messaging, > either by polling or with callbacks. [This has been specified > fairly recently, so isn't supported by all implementations.]
Are there any non-C++ implementations of AMI? All the documentation I've seen on AMI has been quite tightly tied to C++...
The thing that is irritating about CORBA is that once you start trying to get into anything that deviates from "just plain vanilla synchronous connections," it gets _real_ complex and _real_ strongly tied to platform-dependancies _real_ fast. They've got a standard for everything, but only a few that are ubiquitously available.
It's a bit like comparing CL to Scheme; both involve standards; the problem with Scheme, like CORBA, is that getting Full Functionality means having to have huge quantities of extensions that don't work with all the implementaitons. (Contrast with the fact that the SERIES extension for CL can at least be _hoped_ to work with many CL implementations...) -- (concatenate 'string "cbbrowne" "@" "acm.org") <http://www.hex.net/~cbbrowne/corba.html> "Popularity is the hallmark of mediocrity." --Niles Crane, "Frasier"
Erik Naggum <e...@naggum.net> writes: > * Fernando Rodríguez <spam...@must.die> > | I have to comunicate a lisp process with a c++ app and I was > | considering corba or using sockets. Both are rather new to me, so > | wich one would you recommend and why? O:-)
> CORBA is already badly designed, so if you are new to sockets and
IMHO CORBA is badly designed, and the problems this produces are only amplified by the legions of C++ "programmers" that want to design systems using only the knownledge of "Corba in 21 days".
Network programming isn't easy, and using CORBA in a slightly different way the designers immagined will get you into a world of pain. But it all appears so easy in the examples people are lured into a false sense of security...
I think CORBA should be seen as "just" a RPC call round ASN.1, and people should use its 'oo'-ness as sparingly as possible. Just have a Server object replying to simple (non-object) commands with simple (structure) replies. Stick to this and you'll be safe. Ignore the C++/java people why cry you don't know OOP and want to make everything an object. Remember that a RPC is inherently slow, so limit the amount of calls needed to do a typical operation, also (unless you use advanced stuff, not implemented in the lisp servers AFAIK) objects in CORBA as horribly costly: they take about 1K of space on the wire and most deadly of all *the never, ever die*. An object in CORBA, once created and given out *has* to remain alive for the duration of the lisp process.
> If you are very dedicated, you will probably spend a few months just > getting up to speed with protocol design before you can do something > that is not a total drag, and upwards of a year to get it fully > right.
Right. Be prepared to junk the first few versions of your code. (or just give up and leave that project)
> Security problems in protocols are so common and so hard to avoid > that you _really_ don't want to expose yourself to the process of > learning by doing.
In my experience people don't care, and I don't expect this to change soon :-(.
Groetjes, Peter
-- LANT nv/sa, Research Park Haasrode, Interleuvenlaan 15H, B-3001 Leuven mailto:Peter.VanEy...@lant.be Phone: ++32 16 405140 http://www.lant.be/ Fax: ++32 16 404961
>>>>> "cb" == Christopher Browne <cbbro...@news.hex.net> writes:
ecm> asynchronous method invocations provided by CORBA Messaging, ecm> either by polling or with callbacks. [This has been specified ecm> fairly recently, so isn't supported by all implementations.]
cb> Are there any non-C++ implementations of AMI? All the cb> documentation I've seen on AMI has been quite tightly tied to cb> C++...
not that I know of. Probably future releases of Orbix2000 for Java will include AMI.
>>>>> "pve" == Peter Vaneynde <Peter.VanEy...@lant.be> writes:
pve> Remember that a RPC is inherently slow, so limit the amount of pve> calls needed to do a typical operation
a CORBA method invocation does not necessarily involve network communication: if the client and server are collocated (reside in the same address space), the ORB can use a simple method call.
pve> objects in CORBA as horribly costly: they take about 1K of pve> space on the wire and most deadly of all *the never, ever die*. pve> An object in CORBA, once created and given out *has* to remain pve> alive for the duration of the lisp process.
I haven't used the commercial CL ORB implementations, so I don't know what they are capable of. However, I don't see anything in the CORBA specifications which requires an object to stay alive indefinitely.
You publish the availability of a service through an object reference. On the host+port specified by that object reference, the object adapter is responsible for dispatching incoming invocations to the appropriate servant (a programming language entity which implements the service). In CL, a servant is probably represented by an instance of a CLOS class.
The object adapter maintains a mapping between object identifiers (the server-specific component of an object reference) and servants. When publishing a service, the only thing which has to remain alive server-side is its object identifier (a key in a hashtable, say). You aren't obliged immediately to incarnate a servant: the object adapter can do so on-demand. Once a servant has serviced a request the object adapter can decide to kill it (called "etherealization"), to be restarted when a new request comes in. You can also have one servant which services requests for multiple objects.
Eric Marsden <emars...@mail.dotcom.fr> writes: > a CORBA method invocation does not necessarily involve network > communication: if the client and server are collocated (reside in the > same address space), the ORB can use a simple method call.
AFAIK no common lisp ORB can collocate.
> pve> objects in CORBA as horribly costly: they take about 1K of > pve> space on the wire and most deadly of all *the never, ever die*. > pve> An object in CORBA, once created and given out *has* to remain > pve> alive for the duration of the lisp process.
> I haven't used the commercial CL ORB implementations, so I don't know > what they are capable of. However, I don't see anything in the CORBA > specifications which requires an object to stay alive indefinitely.
In at least one cl-ORB you can force the deletion of the object (this was added on request) and further operations on the object result in an exception. This was only added later and I don't know how well it works, nor if it is in the base product now (doesn't seem to be). The position of the designers was that after publication something had to be there to reply to RPC's. Note that the published CORBA mapping claims that Lisp objects do not need the destroy method (sorry don't know the exact name) as Lisp doesn't need it...
> The object adapter maintains a mapping between object identifiers (the > server-specific component of an object reference) and servants. When > publishing a service, the only thing which has to remain alive > server-side is its object identifier (a key in a hashtable, say). You > aren't obliged immediately to incarnate a servant: the object adapter > can do so on-demand. Once a servant has serviced a request the object
The POA right?
> adapter can decide to kill it (called "etherealization"), to be > restarted when a new request comes in. You can also have one servant > which services requests for multiple objects.
Not implemented AFAIK. IMHO if you have a need for a large number of objects in your design it's likely you're doing something wrong.
> TCP and IPv4 are _very_ good protocols. (I don't know enough about > IPv6 to rate it.) The telecommunications protocols used on the > gigabit trunks and on the long-haul high-speed interconnects are > amazing feats of science. Of the really, _really_ large protocol
They are fine protocols, but only as transport and network layer protocols. The whole conceptual framework of protocols I think is best described by the OSI reference model. TCP and IPv4 only live within the context of the data link and physical layer protocols that carry them. All the issues of reliability, delivery and such need to be looked at as protocol stacks.
For those that want to learn about protocols break open the OSI spec on the reference model. Anybody remember the ISO spec number? I don't have it handy anymore.
When I think what are good protocols I think they should have state models that are totally defined. Modern protocols seem to be lacking proper definitions of their state machines and are more ambiguous in their specification. X.25 is very well defined with state tables unambiguously placed in the specification. Also I have found a good feature of a protocol is that is does not try to do too much. This means that its finite state machine does not exceed 15 states with about 15 events. Do not ask me to justify these arbitrary numbers. I have just found from experience that if the state machine exceeds these limits there is probably more than one state machine that can be layered into a protocol stack.
> protocols as well-designed as they are complex. The Telecom people > have probably done some of the best work there is in protocol
The major problem with the Telecom protocols I have found has been their defintions of their protocol data units which place a premimum on reducing the number of bits in network traffic. This makes the PDUs hard to parse. A great example of this, if you can get the spec is IS-634, the control protocol between Cellular Base Stations and Management systems. Whoever dreamed that up has never programmed a computer before. Also the telecom protocols (at least the cellular ones) are tending to define the protocol state machines in SDL which allows protocol designers to leave gaps of what happens when error conditions occur.
> As an example of a very good way of separating abstractions and > representation, ASN.1 and its encoding rules are worth a study, such > as what is done with SNMP.
ASN.1, what can I say, another language to learn. Liking Lisp, I think a Lisp external syntax should be used for a platform independent encoding of PDUs. It takes more bytes but it transports well (and I can see it clearly on a data scope).
I am still divided on the issue of creating protocols between cooperative machines/processes or going for a distributed OS view where everything is one large memory space. I thought that is what CORBA is offering, one large memory space. There is room for both of them, a distributed OS at some lower level must implement protocols. Does a programmer have to see that?
pve> objects in CORBA as horribly costly: they take about 1K of pve> space on the wire
You're talking about object references, which can actually be much smaller than 1 k (IOR strings don't tell you that much); it depends a bit on the ORB vendor. The minimum it must contain (for IIOP) is protocol name +version, hostname, portnumber, adaptor name and object identifier (the last two are mangled into the object key, in a vendor-specific fashion). These components would be necessary for any object reference that is supposed to work across a network. I believe I read that an estimate of the lower bound on the data in of an object reference is below 100 bytes (sorry, no 'references').
pve> and most deadly of all *the never, ever die*. pve> An object in CORBA, once created and given out *has* to remain pve> alive
Same is true for telephone numbers and URLs ... Somehow, the real world isn't quite aware of this :-)
pve> for the duration of the lisp process.
Peter> In at least one cl-ORB you can force the deletion of the object (this Peter> was added on request)
This sounds very suspicious to me. If an object should be deletable by a client, then it's interface should bloody well have a delete() or destroy() method or some such (and many do).
Peter> and further operations on the object result in Peter> an exception.
exactly.
Peter> Note that the published CORBA mapping claims that Lisp objects do not Peter> need the destroy method (sorry don't know the exact name)
'the destroy method' ? There is no such thing. It depends on the IDL, which has nothing to do with languages.
Peter> as Lisp Peter> doesn't need it...
??? If an IDL has interface Car { ...; destroy(); }
then this has nothing to do with Lisp garbage collection: it's simply a method to have clients delete a particular Car object.
>> The object adapter maintains a mapping between object identifiers (the >> server-specific component of an object reference) and servants. When >> publishing a service, the only thing which has to remain alive >> server-side is its object identifier (a key in a hashtable, say). You >> aren't obliged immediately to incarnate a servant: the object adapter >> can do so on-demand. Once a servant has serviced a request the object
Peter> The POA right?
(yes)
>> adapter can decide to kill it (called "etherealization"), to be >> restarted when a new request comes in. You can also have one servant >> which services requests for multiple objects.
Peter> Not implemented AFAIK.
This so-called DefaultServant approach is part of the POA, and therefore must be implemented in _all_ ORBs that CORBA 2.1 compliant (were now at version 2.3a, btw). If not, they are not compliant. Incidentally, the DefaultServant can be simulated by using a ServantLocator approach, where the preinvoke() method always returns the same servant. It prolly is slightly more costly though.
Peter> IMHO if you have a need for a large number of objects in your design Peter> it's likely you're doing something wrong.
Why? It turns out that using objects in our field (bioinformatics) is very natural and does make things easier. Since we're talking biggish databases (1.5 million biological sequences, with many more sub-objects) here, we inevitably have large numbers of objects. This has nothing to do with the design: using 1.5 million little pieces of text (which is actually were we come from) is no option.
When you're talking about large number of objects (all of them being equally important), you _must_ have persistency behind it. Given this, CORBA makes it easy to -- completely transparently to clients -- instantiate some 'working set' of all those objects on demand (which, BTW, no other distributed (object?) technology comes close to provding).
Philip -- Time passed, which, basically, is its job. -- Terry Pratchett (in: Equal Rites) --------------------------------------------------------------------------- -- Philip Lijnzaad, lijnz...@ebi.ac.uk \ European Bioinformatics Institute,rm A2-24 +44 (0)1223 49 4639 / Wellcome Trust Genome Campus, Hinxton +44 (0)1223 49 4468 (fax) \ Cambridgeshire CB10 1SD, GREAT BRITAIN PGP fingerprint: E1 03 BF 80 94 61 B6 FC 50 3D 1F 64 40 75 FB 53
Erik Naggum <e...@naggum.net> writes: > * Eric Marsden <emars...@mail.dotcom.fr> > | this is no longer true.
> I appreciate the update.
> I _still_ think CORBA sucks, though.
If you want to see protocol design gone berserk, try ASN.1. They haven't solved any of the real problems but they added heaps of complexity in the process. Unfortunately, it's caught on in some part of the IETF world, so I'm considering writing some tools in CL to make it livable.
-- Lieven Marchand <m...@bewoner.dma.be> Lambda calculus - Call us a mad club
In article <m3n1fmhtv0....@localhost.localdomain>, Lieven Marchand
<m...@bewoner.dma.be> wrote: > Erik Naggum <e...@naggum.net> writes:
> > * Eric Marsden <emars...@mail.dotcom.fr> > > | this is no longer true.
> > I appreciate the update.
> > I _still_ think CORBA sucks, though.
> If you want to see protocol design gone berserk, try ASN.1. They > haven't solved any of the real problems but they added heaps of > complexity in the process. Unfortunately, it's caught on in some part > of the IETF world, so I'm considering writing some tools in CL to make > it livable.
> > a CORBA method invocation does not necessarily involve network > > communication: if the client and server are collocated (reside in the > > same address space), the ORB can use a simple method call.
> AFAIK no common lisp ORB can collocate.
Xanalys HCL ORB does co-location optimization for Common Lisp clients and servers within the same LispWorks process.
* Lieven Marchand | If you want to see protocol design gone berserk, try ASN.1.
ASN.1 is not a protocol design. It's a data description language. The full name is Abstract Syntax Notation #1. It does no more than define structures that are named and identified by mutual agreement. To use ASN.1, you have to choose some encoding rules, and there are unfortunately too many of them, but the Basic and Distinguished Encoding Rules are actually OK. (C programmers hate them, because they make life so much harder in an untyped language like theirs, but if you know what kinds of objects you get, as in dynamic types, you can easily deal with these things.)
| They haven't solved any of the real problems but they added heaps of | complexity in the process.
I can't agree with your assessment. Would you like to explain what you consider the real problems they have not solved and what the heaps of complexity added have been?
| Unfortunately, it's caught on in some part of the IETF world, so I'm | considering writing some tools in CL to make it livable.
I'm surprised that you haven't, already. ASN.1 is about typed data. It does not live well in a "typed variable" approach to programming.
#:Erik -- Does anyone remember where I parked Air Force One? -- George W. Bush
* Wade Humeniuk <humen...@cadvision.com> | They are fine protocols, but only as transport and network layer | protocols.
What does this mean? It makes absolutely no sense at it stands.
| The whole conceptual framework of protocols I think is best | described by the OSI reference model.
Not at all. Only some frameworks are describable in ISORMOSI, specifically those that actually used it while being described.
Please note that the full name is the _ISO_ Reference Model for Open Systems Interconnection. It's their model. It is _not_ a model that explains or can describe all Open Systems Interconnection.
See The Elements of Networking Style: And Other Essays & Animadversions on the Art of Intercomputer Networking by M. A. Padlipsky for a full coverage of this. ISBN 0-595-08879-1.
| TCP and IPv4 only live within the context of the data link and | physical layer protocols that carry them.
This is false.
| All the issues of reliability, delivery and such need to be looked | at as protocol stacks.
If you use the ISORMOSI on the Internet, you will end up with very, very weird attitudes towards a very fine technology, sort of like the people who believe that now that we have 8-bit byte-adressable machines, the concept "byte" is conflatable with "octet", and then their heads explode when other concepts of "byte" present themselves to them.
| For those that want to learn about protocols break open the OSI spec | on the reference model. Anybody remember the ISO spec number? I | don't have it handy anymore.
I would recommend against ISORMOSI until you understand whence it came, that is: the history of protocol design preceding it, both within the CCITT/ITU and the ISO camps and without either. There are very different cultures at work, here. That's a contributory reason that TCP/IP won. "If ISORMOSI really was so great, how come nobody talks their protocols?" actually applies.
| The major problem with the Telecom protocols I have found has been | their defintions of their protocol data units which place a premimum | on reducing the number of bits in network traffic.
You _really_ want this, but perhaps you need to work with these guys to realize that 1% more protocol overhead means 1% more money to buy the same bandwidth, or slower deployment due to higher costs, etc.
| This makes the PDUs hard to parse.
That does not follow _at_all_.
| A great example of this, if you can get the spec is IS-634, the | control protocol between Cellular Base Stations and Management | systems. Whoever dreamed that up has never programmed a computer | before.
I'm making an unsubstantiated guess here, much like you do, and would counter that he probably does protocol implementation in dedicated chips. So would you if you dealt that these things.
| Also the telecom protocols (at least the cellular ones) are tending | to define the protocol state machines in SDL which allows protocol | designers to leave gaps of what happens when error conditions occur.
I have worked a little with SDL, but that is years ago, but most of what I have worked with in the Telecom world has been described with SDL (Z.100) or 'variations" like Estelle.
| ASN.1, what can I say, another language to learn. Liking Lisp, I | think a Lisp external syntax should be used for a platform | independent encoding of PDUs. It takes more bytes but it transports | well (and I can see it clearly on a data scope).
Notice that ASN.1's encoding rules are actually parsable with the same ease as (most) Lisp objects (that is, excluding symbols, which are a pain insofar as they overlap syntactically with numbers).
I see a very clean mapping between ASN.1 and Lisp, qua languages to describe and encode data.
| I am still divided on the issue of creating protocols between | cooperative machines/processes or going for a distributed OS view | where everything is one large memory space. I thought that is what | CORBA is offering, one large memory space. There is room for both | of them, a distributed OS at some lower level must implement | protocols. Does a programmer have to see that?
If you do the global memory thing, at least figure out the need for cache coherence and propagation protocols. Nobody I talked to about CORBA have had the faintest clue what that would entail for CORBA, so I gave up talking to these guys. (This was not in a Lisp context, BTW.)
About half of what I have done over the years has had to do with ensuring that lots of computers very far apart agree to what the world looks like at exactly the same time. "One large memory space" sort of covers it, since the idea is that through intelligent protocols and very careful programming, lots of computers actually get the same values without having to ask anyone _else_ for them. There are several interesting products that offer some of this functionality for databases, messages servers, etc, these days.
I'm not sure a programmer needs to see everything, but being able to ensure that you have the information you need in time requires work, and I fail to see how anyone but programmers should do that. Like TCP and IP do not live quietly down in the basement, but actually extend their services and _presence_ all the way up to the "application layer" (and you _really_ want this, by the way), there is no way you can avoid knowing about "the underworld" relative to your actual interests. If you think you can avoid it, you are only saying that you are willing to accept some set of default behaviors, but if you don't know what they are, you are also likely to be wrong.
The belief in cleanly separated layers is almost a religion. It has no basis in reality or experience, but there is nothing that can make someone who believes in it stop believing in it. There's always an answer for why it's a good idea despite all the hairy stuff they have to deal with. Just like the whole ISORMOSI thing. And almost like the belief in structured programming and object orientation where the only time anyone can be trusted to use them well is when they know when _not_ to use them.
Make that a more general assertion: If you think you have an answer for everything, the answer is probably not right for anything. If you have an answer for some things, the answer is probably right for those things.
#:Erik -- Does anyone remember where I parked Air Force One? -- George W. Bush
On Tue, 31 Oct 2000 16:53:12 +0000, Jason Trenouth <ja...@harlequin.com> wrote:
>> > a CORBA method invocation does not necessarily involve network >> > communication: if the client and server are collocated (reside in the >> > same address space), the ORB can use a simple method call.
>> AFAIK no common lisp ORB can collocate.
>Xanalys HCL ORB does co-location optimization for Common Lisp clients and >servers within the same LispWorks process.
Sorry, but what's the need to use something like corba within a single process? =:-O
TIA O:-)
//----------------------------------------------- // Fernando Rodriguez Romero // // frr at mindless dot com //------------------------------------------------
* Fernando Rodríguez | Sorry, but what's the need to use something like corba within a single | process? =:-O
Well, besides the hammer, nail/thumb analogy, you might decide not to "know" where your objects are. This could lead to all _kinds_ of interesting performance pessimizations, just one of which is CORBA.
#:Erik -- Does anyone remember where I parked Air Force One? -- George W. Bush
Erik Naggum <e...@naggum.net> writes: > The Telecom people have probably done some of the best work there > is in protocol design. Just take a look at how they started out > with very low speeds, like 300 bps, but over time managed to > squeeze 56kbps through the feeble phone lines that were not > upgraded, then got DSL to work across that same old copper wire.
I don't know how 56kbps or ISDN etc really work, but I guess they are more about very high modulation schemes, good channel estimations and equalizations, error correcting codes and data compression than they are about clever protocols.
And the old copper wires aren't probably the problem, anyway. They should not be much worse than your ordinary 10Base-T twisted pair ethernet wire. The problems are probably more with the filters along the way that have been optimized for base-band speech signals.
I'm very impressed by these techniques as well, but I don't think you can learn from them how to design a better CORBA. They are just worlds apart.
> * Jon S Anthony <j...@synquiry.com> > | The real question should be whether you believe your new protocol adds > | real value to what it is you are producing. If you are in the > | protocol business this is obvious. If you are in something else > | entirely and only need to make use of protocols, it is highly unlikely > | that the time spent on inventing yet another one will be of any real > | value for your project/product.
> I disagree with this assessment. It is the same argument that can > be made for something overly complex and badly implemented, like > SGML, It has also been touted as solving problems that people would > not be able to solve cheaper by themselves. That was just plain
Yes, this is the obvious counter argument, but it really doesn't address the issue. Those involved in things like defining and implementing SGML (or <fill in the blank>) _should_ be concerned about "doing it right" because the result of that work _is_ their primary value added (it _is_ their product/project).
Everyone going off and reinventing this stuff on their own, _even if they know they can do a better job of it_, when it is not the primary work they are involved in, and when the available offerings will not negatively impact this primary work is just counter productive.
This in no way suggests that it is not appropriate or sensible or even "a good thing" for someone to focus on defining and producing better such offerings and making them generally available.
> How much effort does it take a good system designer to come up with > something better than XML for any _particular_ purpose? If he > grasps the good and useful qualities of SGML, a simplified syntax, > slightly general tools, etc, can be written in a fairly short amount > of time, and it costs less to develop, maintain, and use than a > full-fledged SGML system does,...
This assumes that the tradeoff analysis for use is clearly negatively disposed towards the available offering. For XML and SGML this is likely true for most of the suggested uses as most of the suggested uses are simply inappropriate. Perhaps you would include CORBA as well, but I would not.
> Precisely, but having designed a few protocols that have been in > wide use for over a decade each, just how much effort do you think > it is to design new ones? The reason protocol design is hard is
If it doesn't provide you any advantage, the amount of effort it would take is irrelevant. Again, if you're interested in getting into the protocol business, that's a different story.
> | The nice thing about using CORBA to do this is that it at least > | eliminates all the marshalling and unmarshalling of data items > | (primitive and structured) in a platform independent way.
> You know, this is _not_ a hard problem. It is a hard problem in C++ > and the like, but that is because those languages have lost every
Whether it is hard or not is irrelevant. It still needs to be done and it still needs to be maintained and it still needs all this on various platforms. And for what? Additionally, you then need to make it available for use in things like C++, Java, Perl, etc., at least this is true for the sort of positioning we need. With CORBA all of this is already done, and it just works. Let the armies of drones hacking at C++, Java and the rest spend their time doing this.
> | Unless your business is really line protocols or something similar, > | rolling your own here with sockets is just a distracting waste of > | resources.
> Well, I have tried both approaches. Have you?
Yes.
> | Only if you don't make use of threads in making the calls in the > | first place. If each call is a thread, the "waiting for the > | synchronous reply" is irrelevant. Most ORBs are multithreaded and > | can easily handle this.
> Right. Not my experience. Of course, everything gets better in the > mythical "future", so do stay with CORBA if you have other things to
Just to be clear, the multithreaded ORBs are available now and have been for years.
> | Well we have done it at 2000 miles and the results were basically > | "instantaneous" (well under a second). Using straight X was death. > | Using HTTP was (of course) worse than death.
> How long time do you think you would have spent designing a protocol > that would have been just as good?
Designing is only a fraction of the effort. You then need to implement it across several platforms and make it available for use in an effectively open ended set of languages (at the least C++ and Java). Given what we are doing, I would guess it would have taken well over a person year or more of resources. And for what? To get something just as good? Probably not even as good if you factor in such things as the IDL compilers, exceptions, and the like.
Now, an order of magnitude better (depending on how that gain is distribted), that would be a different story, but the effort would go up dramatically and you are then basically in the distributed object protocol _business_ (or at least you _should_ be).
/Jon
-- Jon Anthony Synquiry Technologies, Ltd. Belmont, MA 02478, 617.484.3383 "Nightmares - Ha! The way my life's been going lately, Who'd notice?" -- Londo Mollari
In article <87itq8ln9g....@zagadka.ping.de>, Marius Vollmer
<m...@zagadka.ping.de> wrote: > And the old copper wires aren't probably the problem, anyway. They > should not be much worse than your ordinary 10Base-T twisted pair > ethernet wire. The problems are probably more with the filters along > the way that have been optimized for base-band speech signals.
Well there is the minor detail that 10baseT is only specced to go 100m while ADSL has to go for several km.
Humble old AppleTalk has been quietly driving up to 2 km of phone wire (using the Farallon "PhoneNet" adaptors) for nearly 15 years now at 230,400 bps. That's the same speed as a lot of people's budget-price ADSL runs at, acheived using a handful of simple passive components (transformer, resistor, capacitor) plugged into a serial port. Now of course ADSL can do better than that -- more like 2 Mbps - 6 Mbps -- if the telco wants you to (or you pay them enough), but it *has* had a few more years of development and those Nokia M10's aren't cheap at all.
In our last episode (Tue, 31 Oct 2000 20:51:31 GMT), the artist formerly known as Fernando Rodríguez said:
>On Tue, 31 Oct 2000 16:53:12 +0000, Jason Trenouth <ja...@harlequin.com> >wrote: >>> > a CORBA method invocation does not necessarily involve network >>> > communication: if the client and server are collocated (reside in the >>> > same address space), the ORB can use a simple method call.
>>> AFAIK no common lisp ORB can collocate.
>>Xanalys HCL ORB does co-location optimization for Common Lisp clients and >>servers within the same LispWorks process.
>Sorry, but what's the need to use something like corba within a >single process? =:-O
Um. Because that provides the highest conceivable speed of access between client and server?
I might have an application that is distributable via CORBA so that parts can run on separate hosts _if need be_; efficient colocation means that this results in minimal degradation of performance if the components run on the same host. -- (concatenate 'string "cbbrowne" "@" "ntlug.org") <http://www.ntlug.org/~cbbrowne/corba.html> C is almost a real language. (see assembler) Even the name sounds like it's gone through an optimizing compiler. Get rid of all of those stupid brackets and we'll talk. (see LISP)