home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / comp / humanfa / 3028 < prev    next >
Encoding:
Text File  |  1993-01-23  |  23.3 KB  |  458 lines

  1. Newsgroups: comp.human-factors
  2. Path: sparky!uunet!zaphod.mps.ohio-state.edu!pacific.mps.ohio-state.edu!cis.ohio-state.edu!news.sei.cmu.edu!bb3.andrew.cmu.edu!crabapple.srv.cs.cmu.edu!hopkins
  3. From: hopkins@cs.cmu.edu (Don Hopkins)
  4. Subject: Re: Info on UIL (User Interface Language)
  5. In-Reply-To: gbc@neural.hampshire.edu's message of 21 Jan 1993 21:51:46 GMT
  6. Message-ID: <C19uqs.H2E.1@cs.cmu.edu>
  7. Originator: hopkins@ECP.GARNET.CS.CMU.EDU
  8. Sender: news@cs.cmu.edu (Usenet News System)
  9. Nntp-Posting-Host: ecp.garnet.cs.cmu.edu
  10. Organization: School of Computer Science, Carnegie Mellon University
  11. References: <1jn5tiINNo7p@nic.umass.edu>
  12. Date: Fri, 22 Jan 1993 20:11:02 GMT
  13. Lines: 443
  14.  
  15. In article <1jn5tiINNo7p@nic.umass.edu> gbc@neural.hampshire.edu (Gary Cote) writes:
  16.  
  17.    From: gbc@neural.hampshire.edu (Gary Cote)
  18.  
  19.    Can somebody give me some info about UIL (User Interface Language)?
  20.    I understand that it was created by Digital, that it creates a
  21.    textual representation of a user interface, and that it is somewhat
  22.    of a standard (?). 
  23.  
  24.    How much of a standard is it?  Does it extend beyond the DEC
  25.    platform at all? 
  26.  
  27.    Does it support, or is it dependent on, X?
  28.  
  29.    Are there any public domain utilities that make use of it? 
  30.  
  31.    Thanks for any pointers.
  32.  
  33.    Gary Cote
  34.  
  35.    gbc@neural.hampshire.edu
  36.  
  37. Here are some classic messages about UIL.  Avoid it like the plague.  
  38.  
  39.     -Don
  40.  
  41. To: xpert@expo.lcs.mit.edu
  42. Cc: Erik Hardy <ejh@sei.cmu.edu>
  43. Subject: Re: To UIL or not to UIL? 
  44. From: Niels P. Mayer <mayer%hplnpm@hplabs.hpl.hp.com>
  45.  
  46. In article <?@?> mikey@portia.Stanford.EDU (Michael Yang) writes:
  47. > In article <553@tci.bell-atl.com> kempf@tci.bell-atl.com (Cory Kempf) writes:
  48. > >I need to build an application that uses X/motif.  What I need to
  49. > >decide is if we should use UIL or not.  Or maybe WINTERP?  Are there
  50. > >any strong oppinions out there one way or another?  
  51. > One advantage of using UIL, is that it's portable and is part of Motif
  52. > from OSF (though for some reason, HP's "Motif" release doesn't include
  53. > it).
  54.  
  55. I don't work for the product division responsible for HP's X products, and
  56. I don't claim to speak for them. However, the rumor I heard is that UIL
  57. wasn't included in HP's product because "it didn't meet HP's quality
  58. standards for a supported software product." This is only a rumor, talk to
  59. someone in charge for the official poop.
  60.  
  61. The unofficial poop, which is my personal opinion (and reflects the
  62. opinions of others older, more experienced, and more learned than I) is
  63. that UIL SUCKS. The idea itself is somewhat silly, the implementation is
  64. buggy; and it is an inelegant solution to application customization.
  65. Finally, UIL doesn't make life as an application programmer any easier --
  66. It requires that you learn yet another programming language that is
  67. completely nonstandard, UIL, alongside a number of Motif resource manager
  68. calls. You have to master all that while trying to understand the
  69. interactions of the large number of features in the Motif toolkit. The
  70. recent questions we've seen on this group about getting back the widgetID
  71. for a widget created in UIL is a good example of the kinds of cruft that
  72. you can expect when doing any sort of serious programming with UIL. And I
  73. wouldn't expect to see any example-laden books like Doug Young's excellent
  74. Xt/Motif text for UIL application programming in the near future.
  75.  
  76. In sum, if I didn't have WINTERP around, I would prefer to program in
  77. straight C rather than use UIL.
  78.  
  79. It still escapes me why UIL was ever built the way it is. The Motif widgets
  80. are essentially "interpretive" in that you can give programmatic commands
  81. to the Motif library to create new widgets, and the Xt intrinsics will
  82. create the new widget on-the-fly.  You can also send messages to created
  83. widget objects via the "methods" in the Xt intrinsics, and especially via
  84. XtSetValues() -- these changes are also interpreted by the intrinsics and
  85. result in an eventual updating of the visuals associated with the widget.
  86. The only thing that is "compiled" about widgets is the order that they
  87. appear inside their "manager" and that ultimately depends on the
  88. implementation of the manager widget.
  89.  
  90. UIL is thus a compiler for an interpreter. UIL compiles a widget layout
  91. (specified in a UIL text file) into a UID (user interface definition) file.
  92. A UIL-based application then uses the built in Motif resource manager to
  93. read in the compiled description of the layout in order to produce a user
  94. interface. UIL then makes the claim that this can be used to drastically
  95. alter the look of an application independent of the program's semantics
  96. (e.g. what the CHI community would call a "UIMS"). I seriously wonder how
  97. drastic an alteration is possible without providing deeper hooks into the
  98. semantics of the application itself. Alas, UIL is not a programming
  99. language, so that is impossible.
  100.  
  101. Imagine, for example, what would be required to turn a "pushbutton-based"
  102. application, such as the X11r3 xmh into a Mac-style "pulldown-menu based"
  103. application?  How are you going to describe the semantics of the way the
  104. current-selected message in the browser interacts with the current-selected
  105. folder (selected via pulldown menu or dialog box) and the actions
  106. move/copy/delete (also selected via menu)? Are you really going to be able
  107. to describe both styles of interface with UIL?? Or are you going to have to
  108. provide two different styles of hooks in the application itself -- one UI
  109. hook for the pushbutton-based UIL interface, and another for a menu-based
  110. UIL interface. If you have to enumerate and hard-code every conceivable
  111. dialogue style in the application, is UIL really a useful UIMS??
  112.  
  113. No, really all that UIL gives you is an extension of the old "Xdefaults"
  114. scheme of customizing an application. Yes, UIL's syntax makes it clearer
  115. which Xdefault resources will affect which widgets. Yes, UIL does allow you
  116. to specify the widget hierarchy and callbacks in an interface. However,
  117. customizing a UIL application will continue to be as tedious, if not more
  118. tedious than it is to currently customize an application via resource
  119. settings. The current state of X applications is that you set X resources
  120. (via editing .Xdefaults or twiddling with xrdb) and then run an appliction
  121. to "interpret" the resource settings. If things don't turn out right, you
  122. quit the application, edit your resourcre file again, and rerun the
  123. application. Anybody that has tried this knows it is tedious, especially if
  124. the application does alot of startup processing.  UIL gives you the same
  125. tedium, with an additional compilation step thrown in.  Sounds like a great
  126. idea, no?
  127.  
  128. And to make things worse, it is quite difficult to extend UIL to handle new
  129. widgets. While the Motif toolkit does provide a broad coverage of UI needs,
  130. serious applications may end up using at least one new widget not contained
  131. in the existing Motif widget set....
  132.  
  133.                 --------
  134.  
  135. WINTERP attempts to solve some of the problems that UIL claims to solve,
  136. but it takes a completely different tack. WINTERP gives you access to the
  137. "interpretive" nature of the Motif widgets through its built in mini-lisp
  138. interpreter (XLISP). The lisp interpreter and the interactive interface to
  139. widgets are useful both in prototyping an application, as well as allowing
  140. an end-user to customize a delivered application.
  141.  
  142. For prototyping, WINTERP allows you to incremetally build up a user
  143. interface, piece by piece. It also means that you can "play" with the
  144. interface, modifying both the look and feel of the application
  145. interactively. WINTERP even includes a "direct manipulation" primitive that
  146. allows you to change widget resources, callbacks and eventhandlers by
  147. designating a widget with the mouse. With WINTERP, one need not suffer the
  148. tedium required in rerunning or recompiling the application in order to
  149. make a change to a UIL or X resource -- incremental changes to an
  150. application can be tested interactively.
  151.  
  152. Unkike UIL, WINTERP's widget-description language is based on a REAL
  153. PROGRAMMING LANGUAGE, which enables you to use the language to represent
  154. and manipulate the state of the application and the UI. UIL is not a
  155. programming language, so you can only describe a widget layout, only mock
  156. up prototype a static interface; you have to go through alot of trouble in
  157. order to link up the functionality of your application with the dynamic
  158. dialog-style of display that makes up a real application.  WINTERP, on the
  159. other hand, will allow you to prototype the dynamics of the interface. In
  160. fact, WINTERP makes an excellent applications prototyping environment
  161. because you can use an interactive, high-level programing language to build
  162. the user interface AND also prototype the "dialogue" aspects of the working
  163. application.
  164.  
  165. For customizing a delivered application, WINTERP's language interpreter
  166. allows users to interactively modify the interface and customize
  167. application functionality.  WINTERP-based applications that are designed
  168. for customizability will contain C-implemented lisp primitives to
  169. accomplish core functionality which the customizer can "tie together" via
  170. interpreted lisp. Applications might come with a set of predefined
  171. interface libraries that enable different interface styles, such as the
  172. pulldown- versus button-based style mentioned above. Users may use
  173. "programming by example" to mix and match features and functionality
  174. available in example interface profiles in order to come up with an
  175. application better tailored to their needs. Often repeated commands can be
  176. included in new menu or pushbutton entries, and commands themselves can be
  177. modified to suit the user's needs.
  178.  
  179. WINTERP helps promote an "open", tailorable architecture for applications
  180. because designers recognize that they cannot foresee all the possible needs
  181. of the end-user. Applications like gnuemacs and autocad have shown that
  182. such architectures are very poweful indeed. In addition to being "open" to
  183. the application customizer, WINTERP is also "open" to other applications
  184. because WINTERP's lisp interpreter is a SERVER (using TCP sockets). Other
  185. applications, possibly running non-locally, can send lisp commands to a
  186. WINTERP-based application in order to execute functionality internal to the
  187. application. Such an architecture allows applications to talk to each
  188. other, share data, etc. You might think of such functionality as
  189. "client-side NeWS without the postscript imaging model"....
  190.  
  191. The choice of Lisp as the widget layout and prototyping language in WINTERP
  192. provides numerous advantages. Lisp programs are in the same form as lisp
  193. data. That means that lisp programs can easily perform computations to
  194. create/alter data structures representing lisp programs. This sort of
  195. meta-programming is especially useful in WINTERP because a user interface
  196. description in winterp-lisp can be treated both as data as well as a
  197. programmatic description of a user interface. That means you can use
  198. winterp-lisp to create all sorts of dynamic widget layouts through lisp
  199. computations that create and mutate data strucures representing
  200. user-interfaces. We are using this feature in our groupware toolkit to
  201. allow active user interfaces (akin to "forms") to be created, filled out,
  202. program-transformed, shipped around via e-mail, and then interpreted on the
  203. receiver's workstation to pop up an active form.
  204.  
  205.             --------------------
  206.  
  207. UIL could be useful however -- rather than being a "compiler for an
  208. interpreter", UIL could become a real compiler that took a structured
  209. description of an interface's widget hierarchy, the resources used, the
  210. callbacks, eventhandlers, etc. All that information could then be compiled
  211. into straight Xlib + C code that would be much more efficient in size and
  212. server resource usage than the equivalent Motif/Xtoolkit calls. Kludges
  213. such as "flattened widgets" and "gadgets" wouldn't be needed because the
  214. compiler would be able to figure out which server resources, gc's, and
  215. windows could be shared by widgets based on "type declarations" and
  216. "constant declarations" gleaned from the UIL file.... (and then I woke up
  217. from my dream)....  this would obviously be one heck of a compiler
  218. project... 
  219.  
  220.             --------------------
  221.  
  222. For more information on WINTERP, see the X11r4 contrib distribution --
  223. contrib/clients/winterp/doc/winterp.doc and 
  224. contrib/clients/winterp/doc/winterp.doc. If you are planning on building
  225. WINTERP from the X11r4 contrib tape distribution, you must apply the
  226. patches posted to comp.windows.x/xpert on 1/8/90 (titled
  227. "Patches to X11r4 contrib/clients/winterp (Motif application prototyper)".
  228.  
  229. Better yet, retrieve WINTERP via anonymous ftp from expo.lcs.mit.edu. In
  230. directory oldcontrib, you will find the following:
  231.     -rw-rw-rw-  1 ftp          6252 Dec 19 08:57 winterp.README
  232.     -rw-rw-rw-  1 ftp        605837 Dec 19 08:57 winterp.tar.Z
  233. In directory oldcontrib/winterp.binary, you'll find:
  234.     -rw-rw-rw-  1 ftp        808483 Dec 19 06:46 hpux-s800.tar.Z
  235.     -rw-rw-rw-  1 ftp        605899 Dec 19 06:43 hpux-s300.tar.Z
  236.  
  237. -------------------------------------------------------------------------------
  238.         Niels Mayer -- hplabs!mayer -- mayer@hplabs.hp.com
  239.           Human-Computer Interaction Department
  240.                Hewlett-Packard Laboratories
  241.                   Palo Alto, CA.
  242.                    *
  243.  
  244. Date: 19 Jan 90 09:53:11 GMT
  245. From: umich!umeecs!anon@yale-zoo.arpa  (Omar S. Juma)
  246. Subject: Re: To UIL or not to UIL?
  247. To: xpert@expo.lcs.mit.edu
  248.  
  249. In article <11658.632634712@hplnpm> mayer%hplnpm@HPLABS.HPL.HP.COM (Niels P. Mayer) writes:
  250. [Heavily edited]
  251. >
  252. >                                           ...rumor...           ...UIL...
  253. >                                         ...didn't meet HP's quality...
  254. >            ...poop...
  255. >  ...UIL SUCKS...                        ...silly...
  256. >...buggy...         ...inelegant...
  257. >          ...doesn't make life...                            ...easier...
  258. >...completely nonstandard...
  259. >
  260.  
  261. I absolutely agree.  I've only had 4 years of serious software
  262. experience, and UIL is the ***worst*** language/compiler combination I
  263. have ever seen.  Nothing, not even working with punch cards, has left me
  264. with a more bitter taste in my mouth.  If UIL were a car, not even the
  265. Russians would want to manufacture it.  If UIL were a--but, wait a
  266. minute, let's be objective for a minute:
  267.  
  268. *    The UIL compiler does not invoke cpp before it starts its
  269.     journey.  Yo, DEC!!!  Even xrdb uses cpp.  There are several
  270.     advantages to using cpp.  Hey, guys, ever heard of macros?  Huh?
  271.     What's that you say?  You wanted to create your own macro
  272.     facility?  Oh, I see, in the next version.  When's that?  Huh?
  273.     Next year?  Oh.  But what do we do in the meantime?  Huh?  Did
  274.     you say "copy and paste"?  Isn't that kind of inelegant?  I tried
  275.     that.  It bloated the simplest UIL files to thousands of lines.
  276.     What?  Yeah, thousands, not hundreds.  Made them difficult to
  277.     edit.  Huh?  Split the files, you said?  I dunno, that's kind of
  278.     old-fashioned, rather stupid.  Say what?  I can run the file
  279.     through cpp first?  Yeah, I tried that, in fact, since I had no
  280.     intention of wading through huge UIL files; it gave me vertigo.
  281.     Huh?  You want to know how that worked, you say?  Well, I ran
  282.     into this problem, see.  After I did a few nice macros and got
  283.     ready and all, I ran the UIL compiler.  I got this strange error
  284.     message.  It told me that maximum line length was 132 characters.
  285.     Huh?  Well, see, some of my macros were rather long, like 140
  286.     characters, see, and I couldn't make them less than 132 short of
  287.     compressing all the whitespace out of the macro and turning it
  288.     into one huge token.  Huh?  You never thought anyone would ever
  289.     write macros bigger than 132 characters?  Oh, well, I did.
  290.  
  291.     [Quiz of the decade:  Where did DEC come up with 132?  What, is
  292.     it 128 and a bit?]
  293.  
  294. *    Defective error reporting.  What do I mean by defective?  Like,
  295.     it's almost impossible to figure out what the UIL compiler means
  296.     when it complains about something.  Like, if you forget a
  297.     semicolon someplace, the compiler pukes into its own food, eats
  298.     it back again, and pukes it out again, and just gets totally ill,
  299.     dude.
  300.  
  301. *    Documentation.  Huh?  Did someone say documentation?
  302.  
  303. *    Language design.  Whoever designed UIL must have been heavily
  304.     involved in BASIC and FORTRAN, because that's as sophisticated as
  305.     it ever gets.  The language is extremely simple-minded.  No
  306.     conditional processing.  No interface actions.  No anything.  All
  307.     UIL offers is a substitute to writing out almost the exact same
  308.     stuff in a C program.  Yes, I know that writing it in C would be
  309.     even more time-consuming, but there I have access to powerful
  310.     macros and procedural mechanisms, not to mention conditional
  311.     processing, that can make life easier.  Any intelligence in the
  312.     interface must be performed in the program anyway; you can't
  313.     delegate any actions to the UIL portion, as Niels says.  Which
  314.     brings me to wonder why OSF never gave Open Dialogue any serious
  315.     consideration (please, don't tell me about "demonstration
  316.     technology").  If not the entire Open Dialogue system, then at
  317.     least the language, which was several generations ahead of UIL.
  318.     My personal impression is that DEC shoved UIL down OSF's throat
  319.     as its "contribution", though in effect all it's done is cause
  320.     people to waste inordinate amounts of time and effort creating
  321.     workarounds.
  322.  
  323. *    Scale.  You really cannot write a serious application using UIL
  324.     and its compiler.  The mechanism simply cannot handle the sheer
  325.     volume of text required to describe the interface.  You need an
  326.     intermediate agent, and OSF just didn't think it was necessary to
  327.     supply one.  I would have settled for preinvoking cpp, but even
  328.     that is not enough.
  329.  
  330. *    Elegance.  If you try to develop an application using creation
  331.     callbacks and the other standard mechanisms supplied by OSF, you
  332.     will end up with a horrendous piece of noodle code on your hands.
  333.     UIL lends itself very well to kludgy solutions; I tried hard to
  334.     extricate myself from all this mess, but it was not possible
  335.     unless I adopted several coding and pre-compilation standards.
  336.     In essence, I've spent the better part of two months fighting the
  337.     UIL mechanism, trying to create a logical framework around which
  338.     I can develop several large applications, and I'm getting close
  339.     to completely throwing in the towel and starting from scratch
  340.     with WINTERP.  I've looked everywhere, and all I see is square
  341.     pegs that have been shoved and squeezed into round holes.  You
  342.     can't go very far with such a setup.
  343.  
  344. *    Extensibility.  Are you kidding me?  Extend UIL?  I'd rather go
  345.     gene splicing than try to tack on more crud to UIL.  DEC has
  346.     supplied what can be generously called as an embryonic extension
  347.     mechanism.  It's badly documented, and from what I've seen by
  348.     wading through the code, they never really thought anyone would
  349.     want to extend it.  Like, dude, there's everything you'll ever
  350.     need there anyway, so why bother?
  351.  
  352.  
  353. I'm really sorry to be saying all of this, but UIL is not a solution.
  354. Unfortunately, unless OSF is willing to break with tradition and supply a
  355. completely different mechanism for the next release of Motif, we are
  356. stuck with UIL for quite a while.  Which means we will all waste more
  357. time and energy coming up with solutions.  Here's some alternatives:
  358.  
  359. *    Create a wrapper around UIL.  Bury it under a ton of macros,
  360.     processing languages, prepackaged C code.  Then it may be
  361.     possible to develop an interactive interface editor that uses
  362.     these mechanisms.  This is what I'm currently trying to do, but
  363.     as I said, I'm thinking of giving it up.
  364.  
  365. *    Get the format for UID files and develop your own UIL language
  366.     and compiler.  This is fairly time-intensive, but offers the
  367.     chance to start from zero and build the system correctly.
  368.  
  369. *    Use WINTERP.  I'm just not sure about this now, but it's starting
  370.     to make more and more sense.
  371.  
  372. *    Use LISP entirely.  Don't even bother with C, C++, Pascal,
  373.     FORTRAN, or anything similar.  Start with LISP.  Develop
  374.     everything in LISP.  This seems to be the most intuitive
  375.     alternative, but it requires ***a lot*** of work.  And it's not
  376.     entirely portable, at least not yet.
  377.  
  378.  
  379. I could go on...
  380.  
  381.  
  382. anon@eecs.umich.edu
  383.  
  384. ...anon...
  385.  
  386. Date: 27 Mar 90 13:36:06 GMT
  387. From: snorkelwacker!spdcc!tauxersvilli!alphalpha!nazgul@bloom-beacon.mit.edu  (Kee Hinckley)
  388. Subject: Re: UIL or NOT to UIL
  389. To: xpert@expo.lcs.mit.edu
  390.  
  391. I tried to reply directly to this, but auto-trol.com doesn't seem to
  392. be around, so...
  393.  
  394. In article <792@auto-trol.UUCP> marbru@auto-trol.COM (Martin Brunecky) writes:
  395. >     For your case I'd need a more generic one, specifying widget ID to
  396. >     to set. Easy to do. I did not think of one, since to accomplish your 
  397. >     task we have WsMatrixBox, which does all you need with 2-3 resources,
  398. >     without all that ugly code.
  399.  
  400. I don't suppose WsMatrixBox is available anywhere?
  401.  
  402. >     With the X resource database, there is no problem, since the
  403. >     "hidden" widget always has a name (somehow constructed by the
  404. >     confusion routine). And since there is a name, and a known place
  405. >     in widget hierarchy, you can define any resources you wish.
  406. Ugh. Not your fault, but ugh nonetheless.
  407.  
  408. >>Incidentally.  OSF did at one point consider using an extended
  409. >>Xresources form as an alternative to UIL, but was convinced (I forget
  410. >>the exact reasons) that it wasn't appropriate (too hacky?).
  411. >>
  412. >     Wasn't the real reason some OSF member was already using UIL
  413. >     and wanted to make it a "standard" ?
  414.  
  415. Keep in mind these are my opinions and mine alone, based on my view as
  416. part of the team that "created" Motif.
  417.  
  418. There is no question in my mind that had OSF not chosen UIL, an "OSF
  419. Member" would have been upset.  The results of that, I don't know - it
  420. didn't come to that.  My feeling, and what I believe the consensus to
  421. have been, was that UIL, while by no means perfect or even correct,
  422. was a step in the right direction.  I also felt (and I regret not
  423. examining the code more throughly in the hour or so I had it) that it
  424. could be fixed, and that no better, timely (e.g. Open Dialogue was
  425. potentially not timely (in retrospect I know that is wrong, it could
  426. have been there, but...)), solution existed.  Given that something
  427. like it seemed necessary, both as a transfer language for IDTs
  428. (something the membership wanted), and as a means for supporting
  429. internationalization, it was decided that it should be included but
  430. not placed in the AES (Application Environment Specification) - in
  431. other words, the specification of UIL is open for change in the
  432. future. I, at least, was under the impression that work would begin to
  433. correct these problems as soon as Motif was released.  In fact, there
  434. were several possible approaches bandied about for what the new UIL
  435. would look like and who would do the work.
  436.  
  437. In my opinion OSF dropped the ball here, and frankly I feel somewhat
  438. betrayed, since what we worked out was a compromise and I feel it was
  439. tossed as soon as the transition team left. I should point out
  440. however, that I don't think, given my knowledge of the people who are
  441. at OSF, that this was done for political reasons.  I suspect it has
  442. been more a matter of manpower and priorities. I do think that it's
  443. extremely regretable however, since the number of programs using UIL
  444. is (as I was afraid) increasing rapidly, and any viable UIL
  445. replacement now must support seamless translation to and from UIL
  446. files.
  447.  
  448.                                 -kee
  449. -- 
  450. +-----------------------------------------------------------------------------+
  451. | Alphalpha Software, Inc. | Voice/Fax: 617/646-7703 |   Home: 617/641-3805   |
  452. | 148 Scituate St.         | Smart fax, dial number. |                        |
  453. | Arlington, MA 02174      | Dumb fax, dial number,  |   BBS:  617/641-3722   |
  454. | nazgul@alphalpha.com     | wait for ring, press 3. |   300/1200/2400 baud   |
  455. +-----------------------------------------------------------------------------+
  456.  
  457.