<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jan 4, 2009, at 3:49 PM, Terje Norderhaug wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jan 2, 2009, at 11:30 AM, Alexander Repenning wrote:</div><blockquote type="cite"><div>This may be a good moment to discuss some of the ideas regarding the creation of LUI, the "Lisp User Interface as a cross platform, but Mac first" open source GUI tool.</div></blockquote><div><br></div><div>Yes! Thank you for being a force in moving this forward. Count me in.</div></div></div></blockquote><div><br></div><div><br></div><div>Excellent: Perhaps as next step I could just share some of our proof of concept code. It would allow you to run examples but also to see how hard or simple it would be to add more GUI controls.</div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br><blockquote type="cite"><div><span class="Apple-style-span" style="-webkit-text-stroke-width: -1; ">Some fundamental ideas of LUI are:</span></div><div>- separation of platform specific and independent code: write platform independent code or create specific Cocoa based extensions </div><div>- separation of procedural (Lisp) and declarative (XML syntax but it is really Lisp: X-expressions <a href="http://www.cs.colorado.edu/~ralex/papers/PDF/X-expressions.pdf)">http://www.cs.colorado.edu/~ralex/papers/PDF/X-expressions.pdf)</a> GUI information</div><div>- layout managers: interfaces that stretch and don't need, but do allow, hardcoded coordinates/sizes.</div></blockquote><div><br></div>I favor an approach in which the user interface to a high degree automatically adapt to each platform. That is, the goal is NOT to create user interfaces that looks and works similar on the different platforms, but instead adheres to their different HUI conventions and usability practices. Case in point, I once hoped CLIM would be a good fit for adaptive user interfaces, but got disappointed.</div></div></blockquote><div><br></div><div>I do like the adapt idea. I have seen some TCL interfaces that are just a pain for most Mac users. Bottom line is that Mac interfaces should not use Lisp as rationale to make bad interfaces. To a large degree Apple seems to be getting away with non windows looking interfaces on windows (iTunes, Safari). If Apple gives us these tools I think we should use them. I would not want to replicate the CLIM idea. Perhaps a better way that is not quite as adaptive would be to deal with a 2 level approach. The first level would be low level control wrappers such:</div><div><br></div><div><slider max-value="2.0"/></div><div><br></div><div>Currently we have this turn into a Cocoa control in CCL Mac and a Window slider widget on Allegro. Modulo some size issue which can be compensated for with automatic layout this can produce native looking controls. Still, the guidelines on Mac and PC do differ. A simple example would be the arrangement of OK, Cancel buttons. One could have a higher level representation, also in XML, to capture this via high level design pattern that may be rendered into the concrete stuff.</div><div><br></div><div>Initially, I think I would be OK with just the low level. We found that in most cases one can come up with a design that looks good on Macs and at least OK in Windows. </div><div><br></div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Alexander is right in proposing external, XML based user interface declarations that are platform and programming language independent. It facilitates that non-LISP'ers design or modify the user interface without requiring involvement by the LISP programmer. Way to go! These files could even be available for optional customization by the end user, for example, by placing them in the application bundle and loading them at runtime.</div></div></blockquote><div><br></div><div>That is right. With AgentCubes, which is the app that we are working on, everything on the screen is a CLOS object that via XMlisp gets automagically turned into XML and back. This XML captures not only GUI specs but, for end users, more important files such as their documents describing games (e.g., 3D content such as shapes, cameras, scenes, ...) which in some cases they need to edit at the XML level. The good news is they can.</div><div><br></div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Some other XML-based user interface description formats:</div><div><br></div><div>* XUL - <a href="https://developer.mozilla.org/en/The_Joy_of_XUL">https://developer.mozilla.org/en/The_Joy_of_XUL</a></div><div>* XAML - <a href="http://en.wikipedia.org/wiki/Extensible_Application_Markup_Language">http://en.wikipedia.org/wiki/Extensible_Application_Markup_Language</a></div><div>* UIML - <a href="http://www.uiml.org">http://www.uiml.org</a>/</div><div>* UIDL - <a href="http://www.usixml.org">http://www.usixml.org</a>/</div><div>* XFORMS - <a href="http://www.w3.org/TR/xforms11/">http://www.w3.org/TR/xforms11/</a></div><div><br></div></div></blockquote><div><br></div><div>Our XML is inspired by some of these formats, e.g., XUL. Many of these formats are assuming that they are rendering content into a browser window with little or no control for VERTICAL layout machinery because web pages only change rendering when resizing width not height. This may seem a detail but most "traditional" non browser windows must be able to also layout vertically. At any rate, the idea is to use as much as possible from existing specs but adding what is missing. Also important is the fluent integration of Lisp and XML. We can just mix things. </div><div><br></div><div>At any rate, it may be best to give you something to play with to get a better sense of the concrete way of making guis with XMLisp.</div><div><br></div></div><br><div apple-content-edited="true"> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">Prof. Alexander Repenning</font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px">University of Colorado</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Computer Science Department</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Boulder, CO 80309-430</p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">vCard: <a href="http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf">http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf</a></font></p><br class="Apple-interchange-newline"></span></span></span></div></span> </div><br></body></html>