Newbie questions about Pliant

Newbie questions about Pliant

Browser

I cannot run it on my computer
Message posted by michel on 2006/01/21 18:19:55
Tried to run the browser by:
pliant module /pliant/graphic/browser/sample/run.pli command run_both
(by root in a session owned by root)
Got he message:
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified

----------------------------------------------------------------
Failed to open X11 display
execute /pliant/graphic/console/x11.pli (internals) 20 1
parse /pliant/graphic/console/x11.pli (internals) 22 1
module /pliant/graphic/console/x11.pli
execute <command line> 1 1
parse <command line> 2 1
module <command line>
----------------------------------------------------------------
actions stack is:
execute /pliant/graphic/console/x11.pli (internals) 20 1
parse /pliant/graphic/console/x11.pli (internals) 22 1
module /pliant/graphic/console/x11.pli
execute <command line> 1 1
parse <command line> 2 1
module <command line>
----------------------------------------------------------------
processor stack content is:
error_notify_fatal (ErrorID Str) +14
error_report +61
error_notify (ErrorID Address Str) +85
error  /pliant/language/debug/error1.pli (internals) 58 1
_noname_  /pliant/graphic/console/x11.pli (internals) 20 1 /pliant/graphic/conso
le/x11.pli (internals) 21 3
pliant internal execute function (Function) +10
. execute (Expression) +318
  /pliant/graphic/console/x11.pli (internals) 20 1
. execute (ParserContext) +51
parser_filter_execute +240
pliant internal parse_one_token function (ParserContext) +391
compile_text (List Module) +230
pliant_load_module (Str Module Int Module) +920
graphic_console  /pliant/graphic/console/prototype.pli (internals) 57 1 /pliant/                   graphic/console/prototype.pli (internals) 64 5
browser_client  /pliant/graphic/browser/client/main.pli (internals) 17 1 /pliant                   /graphic/browser/client/main.pli (internals) 31 16
run_both  /pliant/graphic/browser/sample/run.pli (internals) 217 1 /pliant/graph                   ic/browser/sample/run.pli (internals) 221 3
_noname_  <command line> 1 1 <command line> 1 1
pliant internal execute function (Function) +10
. execute (Expression) +318
  <command line> 1 1
. execute (ParserContext) +51
parser_filter_execute +240
pliant internal parse_one_token function (ParserContext) +391
compile_text (List Module) +230
??? at 134599695
---------------

Server info:

Mandriva linux (X.Org X11 6.9.0 patch level 5.2.20060mdk)

Michel & Pom
Message posted by hubert.tonneau on 2006/01/21 19:04:04
Why
  XOpenDisplay ":0.0"
fails on your box seems very strange to me.

You can try
  xhost
to see X11 security policy,
and
  set | grep DISPLAY
to see the default screen in your terminal environment.
Message posted by michel on 2006/01/21 23:24:10
Sorry, our fault (we ran it on :1.0). This said it still does not work.
A window appears half a second and we got the following error message:

processor stack content is:
. vector  /pliant/graphic/vector/font.pli (internals) 1803 1 /pliant/graphic/vector/font.pli (internals) 1805 6
. bbox  /pliant/graphic/vector/font.pli (internals) 1835 1 /pliant/graphic/vector/font.pli (internals) 1839 22
. bbox  /pliant/graphic/vector/font.pli (internals) 1876 1 /pliant/graphic/vector/font.pli (internals) 1878 3
. bbox  /pliant/graphic/layout/form.pli (internals) 421 1 /pliant/graphic/layout/form.pli (internals) 425 5
. dispatch  /pliant/graphic/layout/text.pli (internals) 119 1 /pliant/graphic/layout/text.pli (internals) 209 27
. dispatch  /pliant/graphic/layout/text.pli (internals) 223 1 /pliant/graphic/layout/text.pli (internals) 237 3
. position  /pliant/graphic/layout/text.pli (internals) 261 1 /pliant/graphic/layout/text.pli (internals) 272 3
. position_recurse  /pliant/graphic/layout/helper/recurse.pli (internals) 7 1 /pliant/graphic/layout/helper/recurse.pli (internals) 15 15
. position  /pliant/graphic/layout/sequence.pli (internals) 35 1 /pliant/graphic/layout/sequence.pli (internals) 37 8
. position  /pliant/graphic/browser/client/window.pli (internals) 296 1 /pliant/graphic/browser/client/window.pli (internals) 303 12
. lazy_display  /pliant/graphic/browser/client/window.pli (internals) 506 1 /pliant/graphic/browser/client/window.pli (internals) 547 11
frozen expression at /pliant/graphic/browser/client/context.pli (internals) 277 1  /pliant/graphic/browser/client/context.pli (internals) 277 1 /pliant/graphic/                                      browser/client/context.pli (internals) 277 9
run_thread  /pliant/language/schedule/threads_engine.pli (internals) 328 5 /pliant/language/schedule/threads_engine.pli (internals) 383 13
----------------------------------------------------------------


Michel & POM
Message posted by hubert.tonneau on 2006/01/21 23:28:24
You need fonts: just download:
http://fullpliant.org/pliant/browse/file/archive/font.tgz
and untar it at Pliant root.
Message posted by michel on 2006/01/22 00:00:41
Works fine (although slow)
Message posted by michel on 2006/01/23 23:52:19
It seems that thereis a bug in pliant-96pre3.tgz
pliant/graphic/browser/sample/run.pli

with all commands I get the same message :

Failed to compile ()   (LayoutPC rw  'setup'  BrowserWindow rw  ?  ?  ?  ?  ?  'flags')
  compile /pliant/graphic/browser/client/window.pli (internals) 301 1
Message posted by hubert.tonneau on 2006/01/23 23:54:59
Please cleanup your tree.
There is no more /pliant/graphic/browser/ directory;
it is replaced by /pliant/graphic/ui/ directory,

So, in order to start the browser, you should now type something like:
pliant 'precompile /binary/ui.dump module /pliant/graphic/ui/client/main.pli' module /pliant/graphic/ui/sample/run.pli command run_both

Message posted by hubert.tonneau on 2006/01/24 00:00:21
Please, also notice that you can get very fast browser startup through
precompiling everything:
pliant 'precompile /binary/run.dump module /pliant/graphic/ui/sample/run.pli' module /pliant/graphic/ui/sample/run.pli command run_both
Message posted by maybe Boris Reitman on 2006/01/24 00:07:46
Thanks Hubert, the new browser looks sexy :)  Some questions,

How do I scroll the page down ? Page Down, arrow keys, space bar 
don't work for me.

How do I start the server separately, and the client separately ?

I have never been able to quite understand whats the proper way to deal with dump files:
To make a precompiled dump file, do I run the program (say, client browser)
first time as root ? And after that, can I run it as a normal 
user with only a read permission to the dump file ? I mean, is the original 
dump file ever updated during runtime ?

Where can I find documentation/explanation on what part of the computation happens 
on the server and what part on the client ?  For example, in the example for 
adding two integers at the beginning of the test page, is the computation 
happening on the server or on the client ? 

How can we make a plugin for mozilla and/or IE in order to enable access 
to the pliant server framework from a standard browser?  I mean, can we make 
a self-installing pliant client browser, in the same way that plugins like flash 
are installed automatically ?  You have mentioned something about VNC interface,
but I want to verify exactly what you mean by this. Do you suggest that the 
pliant server can work in VNC mode and render everything serverside,
and talk directly to a standard vnc client ?

Thanks,
Boris
Message posted by hubert.tonneau on 2006/01/24 00:59:03
> How do I scroll the page down ? Page Down, arrow keys, space bar 
> don't work for me.

Only the mouse right button enables to do that at the moment.

> How do I start the server separately, and the client separately ?

To start the server, you can use (assuming you are using pliant 96 pre 2 or more):
pliant 'precompile /binary/rip.dump module /pliant/graphic/image/rip.pli' module /pliant/graphic/ui/sample/run.pli command run_server

To start the client, you can use:
pliant 'precompile /binary/rip.dump module /pliant/graphic/image/rip.pli' module /pliant/graphic/ui/sample/run.pli command run_secured_client

> I have never been able to quite understand whats the proper way to deal with dump files:
> To make a precompiled dump file, do I run the program (say, client browser)
> first time as root ? And after that, can I run it as a normal 
> user with only a read permission to the dump file ? I mean, is the original 
> dump file ever updated during runtime ?

You never need to be root. In order to precompile, the current user just needs
to have write access to /pliant/binary/ directory.

> Where can I find documentation/explanation on what part of the computation happens 
> on the server and what part on the client ?  For example, in the example for 
> adding two integers at the beginning of the test page, is the computation 
> happening on the server or on the client ? 

Everything application related is computed on the server side.
The easy, but wrong, design would have been to use Pliant dynamic compiling
capabilities to enable the server to send code to the client and have it
executed on client side. It would be wrong because if you want a reliable
application, you can't trust the client execution environment, and if you
want to deal with not too many security issues over time, you'd better not
let the server upload any kind of code to the client.

So, in Pliant browser, the protocol between the client and server has been
carefully design to be the fastest possible (efficient binary encoding,
completely asynchronous), but the client will not compute anything.

The server is sending the tree of the document to be rendered by client.
It can give some name to some nodes so that it can later resend only
subtrees starting from named nodes.

The client is sending events back to the server.

The client is performing:
. store the tree
. compute positions
. draw
. assign events to proper node in the tree before sending to the server
. some nodes such as input field or simple text are handled locally by the
  browser so that it does not need to send one event to server for each
  key pressed but will send a single event when the value of the field
  changed.

> How can we make a plugin for mozilla and/or IE in order to enable access 
> to the pliant server framework from a standard browser?  I mean, can we make 
> a self-installing pliant client browser, in the same way that plugins like flash 
> are installed automatically ?  You have mentioned something about VNC interface,
> but I want to verify exactly what you mean by this. Do you suggest that the 
> pliant server can work in VNC mode and render everything serverside,
> and talk directly to a standard vnc client ?

Making a plugin for Mozilla or IE is probably too hard because Pliant ui client
(browser) is written in Pliant, not in C.

There can be several usage configuation:
server <--- PML ----> ui client (browser) over X11 (available)
server <--- PML ----> ui client (browser) over Linux framebuffer (available)
server <--- PML ----> ui client (browser) over Win32 (futur)
server <--- PML ----> ui client (browser) <--- HTML ---> web browser (available but restricted)
server <--- PML ----> ui client (browser) <--- VNC ----> vnc client (futur)

As you can see, in any configuration, the server performs the lowest possible
amount of computations. I mean it mainly handles IO and storage.

All costy rendiring related computations (positioning, drawing) are performed
in the ui client (so called Pliant browser), and it could render locally
(X11, framebuffer or Win32), or alternatively can behave as a proxy,
I mean be on one side the ui client, and on the other side an HTTP server or
VNC server.

The advantage of this design is that in case of too much load on the ui client
(collaped because too much to compute, or memory exhausted), the server is
not disturbed. The other advantage is that there can be several proxy
accessing the same server in order to share the load and reduce the pratical
impact in case of a crash or collapsing of one of them.
Message posted by hubert.tonneau on 2006/01/24 01:14:16
Since you are interested with the existing Pliant HTTP server,
you should notice that when the Pliant ui client is performing as an HTTP
proxy, it performs something very interesting:

Pliant ui server (applications) use the very optimised Pliant protocol
encoded in PML, which has a session notion.
So, the Pliant ui client (browser) behaving as an HTTP proxy will handle
the session notion in place of the HTML/HTTP browser (IE, FireFox, etc)
This is implemented in /pliant/pliant/graphic/console/http_proxy.pli

The general layout if the Pliant ui client behaving as an HTTP proxy is:
. any session will be stored as an object in the Pliant general cache,
  so that some will be dropped when memory starts to be full
. the Pliant ui client will store the up to date tree, so that the Pliant
  ui server (application) can still send instructions to change part of
  the tree, the Pliant ui server (application) does not need to store
  or be abble to resend everything, yet the HTML/HTTP can request a fresh
  and full tree at any time
. the HTML/HTTP proxy uses AJAX to bring back the input field values rather
  than forms
. the Pliant ui client is handling the history notion in place of the
  HTML/HTTP browser, so it is possible without crazy tricks to preserve
  the scrolling position when the HTML/HTTP browser asks for new pages

So, my view of it is that when the Pliant ui client is behaving as an
HTTP proxy because the application is intented to be used through a standard
web browser, what the Pliant ui client does in the middle is more valuable
than just translating HTML likes nodes of the Pliant tree to tree HTML nodes.
Message posted by hubert.tonneau on 2006/01/24 01:24:57
The model for Pliant applications using Pliant ui server interface is
lazy execution.

Basically, as a result of it's execution on server side, the application
is sending the PML encoded tree to the ui client.
Here is an example:

      text "This is "
      fixed
        text "fixed"
      text " attribute."

Now, some more powerfull instruction will freeze execution (so create a
Pliant DelayedAction) object, assign it an ID, store it in the server side
session data, and send the ID to the client, so that the client can send
back the ID when execution should resume as a result of an event.
Here is an example:

      button "display it"
        section_overwrite "help"
          text "selected value is "+s1+" and text value is "+s2

The 'section_overwrite' instruction execution is freezed, and then restarted
when the 'display it' button is pressed, and 'section_overwrite' instruction
means the body will provide the new content of the subtree starting from
node labeled 'help'

Another example:
      section "result" dynamic
        if v1<>undefined and v2<>undefined
          text " = "+(string v1+v2)
Is a bit more subtil. Since the section is marked 'dynamic', the body of
the 'section' instruction is freezed and turned to a delayed action, but
it will be executed immediately, so the section content is provided to the
ui client, but it will be possible to force reexecute at a later point,
so update the content, through using 'section_replay' instruction.
Example:
      section_replay "result"
Message posted by hubert.tonneau on 2006/01/24 01:42:39
Back to explaining the differences between the old Pliant HTTP server and
the new ui server.

Let's assume that you have the following code:

var Str s
...
button "display"
  text s

With the old Pliant HTTP server, since HTTP is session less, the server
has to send the value of 's' to the web browser, so that it can be provided
back to the HTTP server if the code bellow 'button' needs to be executed.
The value of the string has to be turned to a stream, and ciphered and
signed in order to preserve security, so it is always costy, and it's hard
if the data is not a simple string but a complex object such as a font.

On the other hand, with the new ui server, the value of the variable just
needs to be copied locally in the DelayedAction structure that will be stored
in the session. In case of a complex object such as a font, the application
will use Link:Font instead of font, so that only the Arrow will have to be
copied. It's cheap and efficient.

In facts, nothing would have prevented to create the session notion in the
old Pliant HTTP server in order to avoid the problems related to the session
less nature of the HTML/HTTP browsers, but designing the .page was much
harder because much related to driving HTML/HTTP browser externale constrains,
which are evolving over year.
Message posted by maybe Marcus on 2006/01/24 02:34:33
I have installed 96-pre2 in my laptop. When I try to run

pliant 'precompile /binary/rip.dump module /pliant/graphic/image/rip.pli' module /pliant/graphic/ui/sample/run.pli command run_server

after some time compiling, it stops, and presents the message 

     Killed

on the console.



Message posted by hubert.tonneau on 2006/01/24 02:45:59
Check that the executable is release 96 through the command:
pliant

Then check the name of your computer through:
pliant module /pliant/language/context.pli command 'console computer_fullname eol'

And finaly, in 'configure' 'names', in 'hosts' table, check the record with
the exact name of your computer.
You need a private/public key pair if you plan to use a secured connection,
but you also need 'Pliant multiservice' field to specify the TCP port to use
for Pliant multiplexer. You can use 36 if you are root, 8036 if not.
Message posted by maybe Boris Reitman on 2006/01/24 18:02:56
Thanks for you detailed response. Some more questions.

server <--- PML ----> ui client (browser) over Win32 (futur)
server <--- PML ----> ui client (browser) <--- HTML ---> web browser (available but restricted)
server <--- PML ----> ui client (browser) <--- VNC ----> vnc client (futur)

Do you suggest that a new instance of a ui client must be started for each 
connection from a user over the internet ? Isn't this expensive 
in terms of resources ?  How many simultaneousy user can be handled this way
on a standard box (say Pentium 2Ghz, 500Mb ram).  Also, the VNC suite that I have
seen is quite slow.  I have seen a program "Remote Administrator" that was
 for windows, like VNC, that worked very fast, and was usable over a phone-modem
connection.  Do you think the algorithm for VNC server can be improved so that a standard
vnc client will work faster ?

Another question, can we, instead of rendering into VNC protocol, 
render into flash/actionscript ? Most users have it on the system, and 
it wouldn't give the latency that is found with VNC.

Plugin idea:

There is a plugin for Firefox http://ieview.mozdev.org/ that puts a complete
application (IE) inside its panel.  Could we build a plugin that automatically
installs pliant on users system and somehow to get pliant to render into a 
firefox panel/window ?  

If a plugin for IE and Firefox can be built such that it can launch
pliant on a users system and provide to Pliant a function put_pixel(), and 
a pointer to a raster area (a rectangle inside a standard web browser window), 
would we be able to render the ui client into this raster area ?

About pliant browser:

 Some more questions: 
 - is there a place to type a URL in the browser ?
 - if I make a change in test.pli, do I need to restart a server, a client ?
 - can you explain how the image generation in test.pli works ? the double
   for loop, does it run on the server ? 
 - whats the meaning of the "inside" keyword as in 
     section "input1" inside
     section "result" dynamic inside
 - are the windows 'main', 'bottom', 'left', 'help' predefined and are there 
   for all applications that I will write ?
 
Thanks,
Boris 
Message posted by hubert.tonneau on 2006/01/24 21:00:02
> Do you suggest that a new instance of a ui client must be started for each 
> connection from a user over the internet ?

No. I don't understand your concern.
The Pliant ui client over X11 or Framebuffer can open up to 11 sessions
(switching is done through Ctrl + Fx).
The Pliant ui client as a HTTP or VNC proxy can open any number of sessions
until the memory or processor is exhausted.

> How many simultaneousy user can be handled this way
> on a standard box (say Pentium 2Ghz, 500Mb ram).

Do you mean when it acts as a proxy.
It's probably not at all the same if it acts as an HTTP or as a VNC proxy.

> Also, the VNC suite that I have seen is quite slow.

VNC is not slow; it's bandwidth hungry. So you can use it with full confort
only if the VNC client is connected through a 100 Mbps link at least to the
VNC server.

> I have seen a program "Remote Administrator" that was
> for windows, like VNC, that worked very fast, and was usable over a
> phone-modem connection.

It's using sophisticated vector + compression, whereas VNC uses a simple
bitmap + compression protocol.

> Do you think the algorithm for VNC server can be improved so that a standard
> vnc client will work faster ?

Well, if you wan't to speed up VNC for remote access, the best you can do
is install a local Pliant ui client vnc proxy (not available yet) so that
the distant (slow) connection will use Pliant ui PML protocol and the VNC
protocol will run on the fast local network.

> Another question, can we, instead of rendering into VNC protocol, 
> render into flash/actionscript ? Most users have it on the system, and 
> it wouldn't give the latency that is found with VNC.

You mean send the page as a display list (vector) rather than an image (bitmap).

From my point of view, it does not worse the effort because:
. translating from a vector instructions set to another is not at all a
  trivial task. How will you translate Pliant curves and fonts to the target
  vector language. Pliant also supports very high resolution images that would
  make some vector system collapes, not talking about transparency handling.
. in worse case senario, vector is heavier than bitmap.

In any case, working on low bandwidth connection needs sophisticated caching
on the client side. The fact that we can implement this with something like
flash is to be checked.
You talked about 'remote administrator'. Can it be accessed using Flash
on a browser or does it need a full client ?

Message posted by hubert.tonneau on 2006/01/24 21:00:19
> Plugin idea:
>
> There is a plugin for Firefox http://ieview.mozdev.org/ that puts a complete
> application (IE) inside its panel.  Could we build a plugin that automatically
> installs pliant on users system and somehow to get pliant to render into a 
> firefox panel/window ?  

Again, does it worse the effort.

> - is there a place to type a URL in the browser ?

This is the job of the Pliant ui windows manager. I have not done it properly
yet. I must first add the flag that enables some session to get full control
on the browser.

> - if I make a change in test.pli, do I need to restart a server, a client ?

No, you just press 'recompile' button on the home page.

> - can you explain how the image generation in test.pli works ? the double
>   for loop, does it run on the server ? 

The image and vector part in the test page are far from complete.

'image_define' create an image on the client side, assign it an ID, then
copies the content from the server to the client.
'image_copy' performs 'copyarea' on the client side.
'image_inline' adds a node on the client tree that will contain the image.
This may well change because it's still under construction.

> whats the meaning of the "inside" keyword as in 
     section "input1" inside

A normal section is outside any paragraph, so can contain one or several
paragraphs, tables, etc.
An 'inside' session is inside a paragraph.
The reason of the need to have 'inside' explicitely specified is that the
'para' instruction is sometime automatically provided by the ui server.

If you write
cell
  text "foo"

The ui server automatically turns it to:
cell
  para
    text "foo"

So, if you write
cell
  section "s1"
    text "foo"

It could be:
cell
  section "s1"
    para
      text "foo"
or
cell
  para
    section "s1" # it is not in facts unless you add 'inside' attribute
      text foo

> - are the windows 'main', 'bottom', 'left', 'help' predefined and are there 
>   for all applications that I will write ?

The Pliant screen layout is much constrained with Pliant ui.
The top left and bottom windows are for your applications menus, icons, etc,
the right window is for the window manager,
and the center window is for the core document.

The choice for this is to enable the system to automatically position
windows, so:
. it works better for users that only use the keyboard
. it tend to waste less screen surface
. it works better in a VNC client
This might be subject to discution. In some applications, having the ability
to split the screen in a more complex way may be usefull, so it might evolve
over time. Whan I don't want is to switch to the general layout when the
end users have to organize manually the windows position.

Please notice that the central window may be splitted to display up to four
sessions at once. Also the menus (top, left and bottom) ot the active session
are visible. You can see it as a generalisation of the Mac concept of only
the menu bar of the active window was visible.
Message posted by maybe Boris Reitman on 2006/01/24 21:52:29
The remote administrator utility is a separate program. 
It doesn't run in a web-browser. http://www.famatech.com/

Does the ui client HTTP proxy mode give a interface to all the features
of an application ? What do you mean by saying that it is limited ?

What I would like to be able to do is to give someone a URL to access my website 
(written in Pliant new browser design)
and to know that they are going to be able, without any trouble, view and use the application,
and enjoy the experience. You suggested to install a local ui vnc proxy 
on users system and have an embedded vnc viewer inside a webpage access it.
This can work. This whole installation process should be automatic and require 
no user intervention except to click "ok to install". Do you agree ?

About the windows of the pliant browser.  I suggest  
two automatic rearangement of windows triggered by a key:
- hide all windows except the main window
- put the left and right windows to the top and bottow so as to maximize 
  horizontal length for the main window. The reason is that many users are
  prepared to scroll vertically, but not horizontally (think of a webpage that 
  is too wide and doesn't fit horizontally).

I use the 'ratpoison' window manager (hightly keyboard oriented) in which  
all windows are maximized fullscreen, there are no panels with buttons. When 
I press "Ctrl-T :" i get a one line command line to type.  
"Ctrl-T m" gives a pop-up menu, and I can start common 
apps such as xterm or firefox.  "Ctrl-T c" starts a standard xterm.
To shuffle throught all the open windows I use "Ctrl-T n" and "Ctrl-T p".
It also has a horizontal and vertical split feature (like with the ui browser),
that could be not of symmetrical sizes. Also supports virtual desktops which 
limit the group of windows through which "Ctrl-T n" and "Ctrl-T p" shuffles.
They are accessed by "Alt-1,2,3,...,9".  Basically it is like the text-based 
"screen" but for X. Perhaps Pliant ui client browser can use some of these 
ideas, to help maximize screen area, and to allow unlimited number of windows.


Message posted by hubert.tonneau on 2006/01/24 22:32:05
> Does the ui client HTTP proxy mode give a interface to all the features
> of an application ? What do you mean by saying that it is limited ?

No. All other frontends (X11, Framebuffer, Win32 and VNC) will do.

The HTTP proxy will give only access to a subset of the Pliant ui features
because a web browser is very high level by nature, so it is hard to turn
it to low level.

I would say:
high level - XML: Web browser
medium level - vector: X11 Win32
low level - bitmap: VNC

The key target of Pliant ui is to be not too bad for any kind of usages,
whereas all other user interfaces target only one of the three usages.

In very fiew words, it's easy to go the way up (I mean turn VNC to high level)
because it's just a matter of stacking a library on top and accepting to
waste some bandwidth. On the other hand, getting the other way round is
just impossible.

Basically, there is one stupid issue about any modern web browser, which is
that it is not possible to define a square area, link it to an URL, so that
it is handled through a VNC like protocol. Just like a simple bitmap in
facts, but instead of just loading, it would provide just like VNC a
permanent link with the server beeing abble to send 'redraw rectangle' and
'copy area' instructions at any time, and the browser sending any event
back to the server.

Maybe we can implement a subset of this with some Javascipt and AJAX, but
it will be painfull and unefficient (HTTP is not a light efficient protocol
like VNC)

Message posted by maybe Marcus on 2006/01/25 03:03:14
What is the semantics of 'flush' in 

    while connection=success
      sleep 0.9
      section_replay "ts"
      flush
Message posted by hubert.tonneau on 2006/01/25 03:10:10
> What is the semantics of 'flush'

Force to send datas to the ui client, even if the ui server output buffer is not
full yet.
Message posted by hubert.tonneau on 2006/01/25 13:20:52
For the braves that still follow this long thread,
pliant-96pre12.tgz is available
and it contains a Pliant ui client HTTP proxy that works with frames instead
of a table to simulate Pliant ui windows on the web browser.

The code is a bit ugly, probably buggy, but it demonstrate what level
of confort we can reach when the end user uses the HTTP proxy.
Message posted by maybe Boris Reitman on 2006/01/25 14:45:29
>Basically, there is one stupid issue about any modern web browser, which is
>that it is not possible to define a square area, link it to an URL, so that
>it is handled through a VNC like protocol. Just like a simple bitmap in
>facts, but instead of just loading, it would provide just like VNC a
>permanent link with the server beeing abble to send 'redraw rectangle' and
>'copy area' instructions at any time, and the browser sending any event
>back to the server.

>Maybe we can implement a subset of this with some Javascipt and AJAX, but
>it will be painfull and unefficient (HTTP is not a light efficient protocol
>like VNC)

But we can implement such functionality as a plugin in C.  It will do just that:
create a square area, link it to a url, and will receive events such as copy
area and redraw rectangle.  I bet this is a simple plugin to write.

Boris








Message posted by hubert.tonneau on 2006/01/25 14:53:18
> But we can implement such functionality as a plugin in C. 

Fine.
The question is: does it belong to Pliant project ?

I mean, this is a VNC isssue.
VNC provides a Java implementation.
Why don't they also provide a plugin implementation.

Also, one open question is: can we have a plugin that handles only a box
in the browser page, not the all page ?
Message posted by maybe Boris Reitman on 2006/01/25 16:44:21
I think if we decide to use VNC client, the java VNC client is a better
solution than VNC plugin because most users already have a JVM in their browser.

So to summarize there are two scenarious:

A) a square in a web-browser talking to a local program on users computer.
   In this case VNC is fast and provides good user experience.  But this
   requires 
   - automatically installing pliant on users system
   - using an existing java VNC client that works inside a web-browser 
   - writing a bootstrap index.html that will start up the java VNC
     client and point it to localhost.

B) a square in a web-browser talking to a remote server.  Pliant is not installed 
   on a users system. To provide smooth user experience VNC is too slow. 
   What alternative communication protocol can be setup ? Would a square that 
   can respond to 'draw_rect' and 'copy_rect' commands from the server 
   be sufficient ?  If yes, than I am confused because VNC has precisely 
   such commands. From VncCanvas.java:

    343           switch (rfb.updateRectEncoding) {
    344           case RfbProto.EncodingRaw:
    345             handleRawRect(rx, ry, rw, rh);
    346             break;
    347           case RfbProto.EncodingCopyRect:
    348             handleCopyRect(rx, ry, rw, rh);
    349             break;
    350           case RfbProto.EncodingRRE:
    351             handleRRERect(rx, ry, rw, rh);
    352             break;
    353           case RfbProto.EncodingCoRRE:
    354             handleCoRRERect(rx, ry, rw, rh);
    355             break;
    356           case RfbProto.EncodingHextile:
    357             handleHextileRect(rx, ry, rw, rh);
    358             break;
    359           case RfbProto.EncodingZlib:
    360             handleZlibRect(rx, ry, rw, rh);
    361             break;
    362           case RfbProto.EncodingTight:
    363             handleTightRect(rx, ry, rw, rh);
    364             break;
    365           default:

    Would pliant ui client send more intelligent sequence of redraw commands
    than a standard vnc server which has no application knowledge ? Is that
    where the speed up will come from ? If yes, than we can use a standard VNC java
    applet client, and just make sure that ui client browser sends good sequence
    of redraw commands.

To answer your question, it is possible to have smaller squares, which
don't take full screen, and we could have several of them on one page. 
They are just java applets, which request small canvas sizes.

Boris
Message posted by hubert.tonneau on 2006/01/25 17:13:27
Your idea sounds great.

Please open a new discution on the Pliant talk forum, so that we don't bother
too much other readers, with title:
Using java to add VNC like control to the Pliant ui HTTP proxy
Message posted by hubert.tonneau on 2006/01/26 04:07:40
pliant-96pre14.tgz
is available and contains a seriously enhanced HTTP proxy:
. thread support
. mouse over support
. active variables support

The new AJAX interface is smart enough to send some local changes without
reloading the all page, also the algorithm used to decide what to resend
is a bit naive.

I also don't know how all this would survive on a slow connection.

To do: add some images support.
Message posted by maybe Boris Reitman on 2006/01/27 03:36:03
Great stuff!
Message posted by marcus on 2006/01/27 03:45:45
I second Boris. 

AWESOME!
Message posted by marcus on 2006/01/27 03:53:44
I've noticed that the 'button', and other Pliant UI (PUI) instructions, are 
syntactically and semantically similar to the equivalent .page instruction.

Are you going to provide PUI equivalents to .page's:
  - link
  - note
?
Message posted by hubert.tonneau on 2006/01/27 12:30:19
> Are you going to provide PUI equivalents to .page's:
>   - link
>   - note

'link' is available and is now the exact semantic equivalent of 'button'.
Only the drawing is different.
It reminds me that I should remove it on ui client side and replace it with
just a second style for button widget.

'note' will not be available because it would be an alias for 'link'

As a summary, what is différent is that the old 'link' instruction was:
link "label" "url"
Whereas the new is more general, so the old syntax must me translated to:
link "label"
  url_call "url"
Message posted by hubert.tonneau on 2006/02/06 19:23:32
Ok: here are the latest news.

The new prerelease of Pliant ui contains a VNC client as a sample applet.
/pliant/protocol/vnc/ui_client.pli
The key issue with this applet is that it is designed for scripting.
See the 'american' 'X11' and 'OCR' buttons code near the bottom.
The scripts lay in the applet code at the moment, but will be put asside
at a later point.

... and the unexpected bonus is that it has OCR capabilities, so if the
application you want to script contains a button with 'foo' label, then you
can try to clic on it using:
ocr_clic "foo"

This is the exact oposite and complementary part to Pliant. Pliant is a fully
consistent self contained system. The VNC applet with the scripting capability
brings it the ability to interract with completely heterogenous systems when
no documentation and clean scripting is provided.

The VNC applet is also interesting because it shows the behaviour of the
Pliant UI client in a more graphical application than database like access.
It uses both the hooking mechanism and bitmaps low level efficient handling.

Have fun.