Re: A Succinctness Challenge

From: Marc Battyani (Marc.Battyani_at_fractalconcept.com)
Date: 05/31/04


Date: Mon, 31 May 2004 16:53:47 +0200


"Alexander Burger" <abu@software-lab.de> wrote
> Marc Battyani <Marc.Battyani@fractalconcept.com> wrote:
> > Here is what I do in my framework:
> > > - immediate responses to function keys acting on the database
> > > - pop-up dialogs and menus which handle database contents
> > > - unlimited table scrolling through the database
> > > - enable/disable GUI components depending on the current state of the
>
> Interesting. I still don't see how you do it in a portable way without
> Java, because no other technology gives you a permanent connection to
> the server in a portable way. Sorry, I could not find that information
> in your paper :-(

I could tell you, but after that I would have to ask Tim B. to send you his
black helicopters. ;-)
More serioulsy, I just use an hidden frame for behind the scene
communication.
Look at the table of content on the left of
http://msdn.microsoft.com/library/ to see what I mean (and you can look at
the javascript)

> I was trying many times to get away from Java (that's also the reason
> for the experiments in "lib/htm.l" I mentioned before), not because of
> security reasons, but because of poor Java support across many
> platforms.

Yes, one of my first framework version used a Java applet too, but nobody
accepted this.

> > And also :
> > Simultaneous update of all the views for all the users when a value
changes.
> > On the fly pdf generation with cl-pdf and cl-typesetting,
>
> Besides pdf, we also generate plain PS and LaTeX in some cases.
>
> > It works trough firewalls and proxies.
>
> Firewalls and proxies are not so much a problem, because it only
> concerns connections in one direction (from client to server, as the
> applet connects backwards). And Pico Lisp also supports a tunneling
> protocol.

OK.

> > > For a more complete application than the simple person database take a
> > > loot at "http://bws.software-lab.biz", which is a scaled-down version
> > > of a real application. It may not be fully functional because we were
> > > too lazy to generate all necessary test data, but you'll get an idea.
> > > Login with "test" and "test" and play around a little.
>
> > OK I've played a little with it (though I don't speak German)
> > It's a nice Java database application, not really a web application.
> > Obviously each framework designer will prefer it's own one, otherwise he
> > would have done it in another way ;-)
>
> Yes, we agreed on that before :-)
>
> As you said, it depends very much on the purpose. A web application is
> probably easier for an un-initiated user, but for people who have to
> work with it 8 hours a day a dedicated application might be preferred.

Hm, I assume you mean a dialog based application as the web applications are
dedicated too.

> It would be nice if you could post a solution to the simple person
> database of my original posting, using your framework.

Here it is: (I made some modifs to show some disable predicates, added a
maried status to show interaction with the spouse value, if you change sex
or your spouse gets maried to somebody else you are automatically un-maried,
etc.)
As you can see I don't rely on any database to make the controls though it
would be possible.

(defclass person nil
  ((name :value-type string :user-name #T(:en "Name" :fr "Nom" :de "" :sp ""
:it "") :disable-predicate 'locked-name)
   (locked-name :value-type boolean :user-name #T(:en "Lock name" :fr
"Verouiller nom" :de "" :sp "" :it ""))
   (sex :value-type symbol :user-name #T(:en "Sex" :fr "Sexe" :de "" :sp ""
:it "") :initform :male)
   (bithdate :value-type :date :user-name #T(:en "Birth date" :fr "Date de
naissance" :de "" :sp "" :it ""))
   (father :value-type person :user-name #T(:en "Father" :fr "Père" :de ""
:sp "" :it "") :get-object-func 'choose-father)
   (mother :value-type person :user-name #T(:en "Mother" :fr "Mère" :de ""
:sp "" :it "") :get-object-func 'choose-mother)
   (maried :value-type boolean :user-name #T(:en "Maried" :fr "Marié" :de ""
:sp "" :it ""))
   (spouse :value-type person :user-name #T(:en "Spouse" :fr "Conjoint" :de
"" :sp "" :it "") :disable-predicate '(not maried) :get-object-func
'choose-spouse))
  (:user-name #T(:en "Person" :fr "Personne" :de "" :sp "" :it "") :guid
39944127642591635827640405902 :short-description 'name))

(defun choose-father (obj)
  (remove obj
     (remove :female (persons *all-persons*) :key 'sex)))

(defun choose-mother (obj)
  (remove obj
     (remove :male (persons *all-persons*) :key 'sex)))

(defun choose-spouse (obj)
  (nset-difference
   (remove (sex obj)(persons *all-persons*) :key 'sex)
   (list obj (father obj)(mother obj))))

(defmethod (setf spouse) :around (spouse (obj person))
  (let ((prev-spouse (spouse obj)))
    (unless (eq prev-spouse spouse)
      (call-next-method)
      (when prev-spouse
 (setf (maried prev-spouse) nil))
      (when spouse
 (setf (maried spouse) t
       (spouse spouse) obj)))))

(defmethod (setf maried) :before (maried (obj person))
  (let ((spouse (spouse obj)))
    (when (not maried)
      (setf (spouse obj) nil))))

(defmethod (setf sex) :before (value (obj person))
  (unless (eq value (sex obj))
    (setf (maried obj) nil)))

 Marc
[Who should really be working on real work!]



Relevant Pages

  • Re: A Succinctness Challenge
    ... (unless (eq value (sex obj)) ... Here if a person gets un-married then the spouse also gets unmarried and she ... There isn't even SQL and/or a relational database ... (From the Oslo Lisp Workshop:) ...
    (comp.lang.lisp)
  • vista + java
    ... I work on windows vista. ... When I try to get information from register ... # An unexpected error has been detected by Java Runtime Environment: ... Object obj = value.getData; ...
    (comp.lang.java.programmer)
  • Re: change matlab GUI layout from command line?
    ... Play around with dt=get,'Desktop'). ... It's a java ... obj so do methodsviewto see available methods & set ... Yair Altman ...
    (comp.soft-sys.matlab)
  • Re: PHP5: Can a class inherit initialized classvariable from another class?
    ... > After declaring $obj as public and static I don't get any result as ... call explicitely (unlike java). ... Tim Van Wassenhove ...
    (comp.lang.php)
  • Obj C und Mysql
    ... Java Cocoa ist deprecated. ... eine DB Anbindung zu programmieren. ... Wie mache ich es mit Obj C? ... Ich sehe im Moment nur die ...
    (de.comp.sys.mac.programmieren)