Newbie questions about Pliant

Newbie questions about Pliant

trying new ui

having trouble making connection to server
Message posted by maybe Boris Reitman on 2007/02/21 04:21:18
I have tried several scenarious, and got stuck in each case.

  Here is how I started my server:

    boris@dali ~ $ /pliant/fullpliant
    HTTP server is running.
    HTTP server is running (TCP port 8080).
    Pliant UI server is running.
    Pliant multiplexer is running (TCP port 8081).
    Pliant UI console is running.
    UI HTTP proxy server is running.
    UI HTTP proxy server is running (TCP port 8082).
    loading /pliant/menu.ui
    loading /pliant/graphic/ui/client/windows_manager.ui

  Here's my settings in run.pli

    constant auto_ui true
    constant auto_http false
    constant auto_console pliant_execution_mode="fullpliant"

Accessing from web-browser:
- at what url to access http proxy server to see the main menu ?  I tried: 

In all cases I get an empty page.

Accessing from pliant ui:
- I tried to access from windows ui client the linux server above, and it didn't wor
k.  How do I specify the URL instead
  of loopback:/pliant/menu to point to my server that is 
  running on (port 8081 multiplexer).  These all gave me an empty page.

After I enter the URL whould I have to "Login" ?  Can you explain where are the publ
ic/private keys that I need to
generate ? Are they per user or per computer ?  
On my server I have a user admin, how would I connect with that user from windows ui
 client to linux ui server ? 

- where do pliant win32 console messages go ? if they are lost, how can I redirect t
hem to a file ?

- settings set in pliant ui in "Settings" area are not remembered after restart.

- problems starting HTTP Server: 
  starting with auto_http=true in run.pli crashes after process memory usage goes to
  - without ever starting http server, I can't set the setting to start
    ui http proxy
  - If I need to generate keys to make the connections to another computer then I ca
n't do it because I can't start 
http server.

To summarize, if you could describe a step-by-step howto to get client/server setup 
going between windows clients (web-browser & ui client, and Vnc?) and linux server,
it would be great.

Message posted by maybe Hubert Tonneau on 2007/02/21 20:11:19
I have to think seriously about it because I understand that the current
packaging makes in completely unusable for anybody but me.
It's a shame the better the concepts are in Pliant, the worse the packaging is.
The only excuse I have is that switching from HTML/HTTP interface to the UI
disturbed quite a lot of things, but I now have to make it not last too long.

The current situation is that when you start Pliant using 'fullpliant'
executable, you get a local console that should enable you to configure
everything (also some restart may be required if you want more or less services
to run).

Now, if you want to access remotely, you should also use 'fullpliant'
executable on the client machine at the moment (or a web client).

Also, it's clear to me that I have to provide more precise and step by step

PS: When something goes wrong in Pliant, you might get a crash report in the
    temporary directory.
Message posted by maybe Boris Reitman on 2007/02/21 23:36:51
> The current situation is that when you start Pliant using 'fullpliant'
> executable, you get a local console that should enable you to configure
> everything (also some restart may be required if you want more or less services
> to run).

> Now, if you want to access remotely, you should also use 'fullpliant'
> executable on the client machine at the moment (or a web client).

I understand this situation and I am trying to do just that, not more, 
but can't get it to work.

Note: I think it would be good to try a different default port instead of 36, 
because I don't want to run pliant as root.
Message posted by maybe Boris Reitman on 2007/03/24 07:21:00
Could you help me with this step ? 
Message posted by maybe Hubert Tonneau on 2007/03/24 12:53:36
I've just uploaded pliant-98pre1.tgz and for you.
I've been doing a lot of bug fixing in the previous weeks, so that release 98
is close to production quality.
The 'run.pli' has also been partly rewritten.

Please test and comment on your remaining problems and I will try to make
the Pliant from unpacking the tarball to a working server easier.
Message posted by maybe Hubert Tonneau on 2007/03/24 13:01:24
The good news for you is that Pliant HTTP proxy now implements a working google
map like server side rendering feature: you declare a large drawing area in
your application, and only the areas the user is truely viewing are rendered
and transfered over the Internet.

As an example, if at some point I write a nice looking documentation for Pliant
(you know, in france we are in an election period so promising anything is rather
normal) I will be abble to render it fully on server side so that fonts and
layout are perfect: the user sees a photo of the book just like with PDF,
but only the truely seen area is sent so that the time to wait before beeing
abble to start to read is short: more content is provided when the user scrolls
down while reading.
Message posted by maybe Boris Reitman on 2007/03/25 10:38:15
Ok, I will repeat experiments a step at a time. I am stuck on the first step.

boris@dali /pliant/pliant/fullpliant $ /pliant/fullpliant
Failed to precompile dynamic page /pliant/browse/ : Failed to compi
le patch   ('file_tree_send'  'path')
  compile /pliant/appli/forum/patch.pli (internals) 131 13
compile /pliant/appli/forum/patch.pli (internals) 131 10
compile /pliant/appli/forum/patch.pli (internals) 131 10
compile /pliant/appli/forum/patch.pli (internals) 127 1
compile /pliant/appli/forum/patch.pli (internals) 127 1
compile /pliant/appli/forum/patch.pli (internals) 126 1
compile /pliant/appli/forum/patch.pli (internals) 126 1
compile /pliant/appli/forum/patch.pli (internals) 126 1
compile /pliant/appli/forum/patch.pli (internals) 126 1
parse /pliant/appli/forum/patch.pli (internals) 133 1
module /pliant/appli/forum/patch.pli
compile /pliant/appli/forum.pli (internals) 11 1
compile /pliant/appli/forum.pli (internals) 11 1
compile /pliant/appli/forum.pli (internals) 11 1
compile /pliant/appli/forum.pli (internals) 11 1
parse /pliant/appli/forum.pli (internals) 12 1
module /pliant/appli/forum.pli
compile /pliant/browse/ 5 1
compile /pliant/browse/ 5 1
compile /pliant/browse/ 5 1
compile /pliant/browse/ 5 1
parse /pliant/browse/ 6 1
module /pliant/browse/
execute /pliant/fullpliant/run.pli (internals) 118 1
parse /pliant/fullpliant/run.pli (internals) 139 1
module /pliant/fullpliant/run.pli
HTTP server is running.
HTTP server is running (TCP port 8080).
Pliant UI server is running.
Pliant multiplexer is running (TCP port 8081).
UI HTTP proxy server is running.
UI HTTP proxy server is running (TCP port 8082).
Pliant UI console is running.
loading /pliant/menu.ui
loading /pliant/graphic/ui/client/windows_manager.ui

The compile error above doesn't look fatal. A GUI client opens.
The problem is that I want to access the interface through a http proxy, and 
any url I try gives me a blank page.  I tried these:

Message posted by maybe Hubert Tonneau on 2007/03/25 11:57:13
The compile error message you got is related to the RCP implementation changes.
Just ignore it at the moment.

Assuming that the machine name is '' and it properly
relolves (DNS settings).
Then I got something working through getting in 'Services' 'UI, HTTP and FTP'
'sites' and defining a '' site with:
Server name:
Formard: tcp://
Protoocol: UI
Site root path:/
Home page: /pliant/menu
and one area with path '/' and read right 'everybody'

This is assuming that an 'anonymous' user is defined and granted 'everybody'

In the 'Forward' field, you must not use a direct IP address, and the TCP port
must be the one the Pliant multiplexer is using.

Last but not least, this is a simple configuration, but I would bet it to
be also subject to security hole because the site has the same name as the
machine and / is exported.
Message posted by maybe Hubert Tonneau on 2007/03/25 13:48:33
I've uploaded pliant-98pre2 with an easy way to define that the HTTP proxy must
run and specify the TCP port to use,
and a just a little bit modified 'misc' 'test' page to demonstrate lazy server
side rendering.
Message posted by maybe Boris Reitman on 2007/03/26 02:21:31
I have tried settings you suggested, and it still doesn't work.
Here are the screenshots:

I tried accessing http://proxytest.dali:8082/ and I get a blank page.
I have also tried http://proxytest.dali:8082/pliant/menu.

So in my setup I have:
  8080 -- the old HTTP server,  
  8081 -- multiplexer, 
  8082 -- http proxy.

If I try to access:  http://proxytest.dali:8080/  or http://proxytest.dali:8080/pliant/menu
I get error "You don't have read right on the requested URL".

I have added proxytest.dali to /etc/hosts:
boris@dali ~ $ ping proxytest.dali
PING localhost ( 56(84) bytes of data.
64 bytes from localhost ( icmp_seq=1 ttl=64 time=0.539 ms

I had to give group read/write permission to pdb files:
boris@dali ~ $ cd /pliant_security/
boris@dali /pliant_security $ ls -l
итого 1125
-rw-rw---- 1 boris pliant      21 Ноя  1 01:16 computer.pdb
-rw-rw---- 1 boris pliant    7592 Ноя  1 01:16 font.pdb
-rw-rw---- 1 boris pliant     519 Ноя  1 01:39 log.pdb
-rw-rw---- 1 boris pliant 1077931 Мар 25 20:27 session.pdb
-rw-rw---- 1 boris pliant   20367 Мар 25 20:13 site.log
-rw-rw---- 1 boris pliant   16911 Мар 25 20:10 site.pdb
-rw-rw---- 1 boris pliant    1046 Ноя  1 01:16 site_secret.pdb
-rw-rw---- 1 boris pliant    1217 Мар 25 20:22 this_computer.pdb
-rw-rw---- 1 boris pliant    3881 Мар 25 20:28 user2.pdb
-rw-rw---- 1 boris pliant    2605 Мар 25 20:21 user.log
-rw-rw---- 1 boris pliant    4044 Мар  3 21:03 user.pdb
-rw-rw---- 1 boris pliant    1350 Фев 20 22:21 user_secret.pdb

I am running /pliant/fullpliant as boris now, because if I run it as 
user 'pliant', the GUI doesn't open because there are no X rights for 'pliant' 
to open inside the X session of 'boris'.
Message posted by maybe Hubert Tonneau on 2007/03/26 03:15:02
Here are a few place where you might want to add some 'console' instructions in
order to see what's appening:

in /pliant/graphic/console/http_proxy.pli near line 1618 the 'connection_main'
method is called which is trying to connection to the UI server.

in /pliant/graphic/ui/server/instructions.pli near line 83, you are entering
the 'connect' instruction of the server so it did receive the request.
Message posted by maybe Boris Reitman on 2007/03/26 05:35:08
First I had to change the name of my computer from "dali" to "proxytest.dali",
to pass this "if" condition in http_proxy.pli:

1362     if site:computer<>"" and site:computer<>computer_fullname
1363       return

I added these print lines http_proxy.pli:

1627           console "Got ip = " ip eol
1628           console "Got port = " port eol
1629           console "Got path = " path eol
1630           var ExtendedStatus status := s connect_main "tcp://"+ip+":"+string:po     rt+path (var (Dictionary Str Blob) empty_context) ""

And also this in function connect_another of connect.pli: 
39     console "BORIS connect_another: server = [dq]" server "[dq] port = [dq]" por    t "[dq]" eol                                                                     
40     status := s open "tcp://"+server+"/client/"+string:port in+out+safe+noautopo    st # FIXME: find correct port

Here is the output:
Got ip = proxytest.dali
Got port = 8081
Got path = /
BORIS connect_another: server = "proxytest.dali" port = "8081"
TCP connection failed bad IP address
server connection oops (bad IP address)

So it is having problem connecting to the multiplexer.  
netstat shows that 8081 is in LISTEN state.

boris@dali ~ $ netstat -natuv | grep 8081
tcp        0      0  *               LISTEN 

boris@dali ~ $ ping proxytest.dali
PING localhost ( 56(84) bytes of data.
64 bytes from localhost ( icmp_seq=1 ttl=64 time=0.550 ms
Message posted by maybe Hubert Tonneau on 2007/03/26 10:51:39
If I understand properly your post the problem would be Pliant to be unable
to resolve name to IP address.

In order to find the IP address corresponding to a name,
Pliant calls the function pointed by 'dns_query_function'.
It is 'gethostbyname' unless the /pliant/protocol/dns/client.pli is loaded
which changes it to Pliant directly querying external DNS servers.

When Pliant is querying external DNS servers, the /etc/hosts files will not
be scan because Pliant has it's internal database for that. If you want to
provide it a value, go to 'Service' 'Names' 'Name' and enter the new mapping.
Message posted by maybe Boris Reitman on 2007/03/28 03:41:52
Thank you, it works. Both http proxy and standalone remote gui connection.

Can you please include the clipboard patch for windows gui:

str16.pli and utf16.pli can be found here:

Message posted by maybe Boris Reitman on 2007/05/29 21:26:32
Can the "recompile" button be available still, or have you removed it because
it is not supported anymore ?  

Can a similar recompile feature be available for the old http server, 
and if not, what precludes it from such that doesn't for the new ui ?
Message posted by maybe Hubert Tonneau on 2007/05/29 21:49:04
With the new UI, your application is responsible for calling 'ui_recompile' to
apply changes on the fly.
Also, with the new UI, a change to some code will be active only when the user
jumps to a new URL (or move back to the previous URL).

With the old HTTP server, applying some change to a .page will make it be
recompiled automatically.

The reason not to do it automatically with the new UI is that the new UI can
have more complex dependencies resolved automatically. I mean there are
'ui_function' and 'ui_type' so that checking if recompiling is required is
much more computationaly expensive, and recompiling order will be automatically
adjusted to match dependencies so that it would not be suited to do it on a
per file base as it was with the old HTTP server.
Message posted by maybe Boris Reitman on 2007/05/29 22:19:52
the ui_recompile recompiled .pli files too, while this is not available for http
server auto-recompile. ability to recompile .pli files when changes are made
would simplify development process signifcantly.
Message posted by maybe Hubert Tonneau on 2007/05/29 23:15:28
Also the new UI still cannot recompile everything on the fly, it can recompile
more than the old HTTP server.
This is not a trivial issue: the new UI keeps meta informations about what
function use what other one to try to compile properly.
This is why we now have 'ui_function' and 'ui_type' that are the same as
'function' and 'type' but with more meta informations in order to help
recompiling on the fly.
As a result, dont expect this advanced feature to be retrofitted to the old
HTTP server.
Message posted by maybe Boris Reitman on 2007/05/29 23:24:18
if its possibble to implement similar page_function page_type metas,
a simple string replace on the source code can port 
all the code to the new system.
Message posted by maybe Hubet Tonneau on 2007/05/29 23:30:34
Do you mean have old .page written applications work with the new UI server ?
Message posted by maybe Boris Reitman on 2007/05/29 23:38:06
Thats not what I meant, I meant to get the old .page stuff to have recompile
feature with minimal code changes on the user code.  If it is just the matter
of replacing 

method page xxx
  arg_rw HtmlPage page

with something like

page_function xxx

on the user part, its totally worth it.

But if getting old .page to work in the new ui framework will give the 
same effect, thats fine too, from my point of view, as a user.

btw, the ui_recompile button is not on the menu in the ui client.
should I just copy the code from old pliant releases ?
Message posted by maybe Boris Reitman on 2007/09/27 16:27:38
I just noticed I missed reading your reply about "ui_recompile". Thanks.
Message posted by maybe Boris Reitman on 2007/11/08 15:38:34
On, Windows the "Development" button is disabled. I am logged in as a user
with administrator priviledge.
Message posted by maybe Hubert Tonneau on 2007/11/08 16:44:09
It is because 'execute' is not implemented under Windows (implemented in
Message posted by maybe Boris Reitman on 2007/11/09 13:01:04
I am trying to connect from the windows version of ui to my server, aristotle.
It works from linux, but it doesn't work from windows. I am able to "Ask" for the
key, but I am not able to connect.  The error message is 
"failed to exchange a shared key".

The linux client setup is the same:

So it works from linux, but not windows. How come ?


Question #2: I am not able to connect from windows ui to linux ui, 
which are on my local network. My windows is and my linux is
I am not even able to ask for the key from the linux machine.  However,
telnet to to port 8081, on which is the multiplexer of the linux machine:


All screenshots are here:
Message posted by maybe Hubert Tonneau on 2007/11/09 13:48:33
From my point of view, it has nothing to do with Windows versus Linux.
In your Windows configuration, the host key pair is not ok (not displayed bold)
Message posted by maybe Boris Reitman on 2007/11/09 14:03:51
It is exactly the key returned by the Ask button, and it is exactly the same in 
both linux version and windows version.  

I see that function open_server_channel creates a log TraceSession,
and then binds it to server_log.  Where is this log written on disk ?
I have create the /log directory on aristotle server, and c:\log on windows client.
Message posted by maybe Boris Reitman on 2007/11/09 14:13:35
The reason it is not bold is because my name_secret.pdb doesn't have
entry for aristotle's private key.  Is that supposed to be sent to me when 
I press the Ask button ?
Message posted by maybe Boris Reitman on 2007/11/10 21:12:20
This block of code:
      ovar Str recipient_country := "USA"
      ovar Str recipient_province := ""
      ovar Str recipient_city recipient_city_other
      recipient_city := "Vancouver"
      section "ask_recipient_address"
          select "" recipient_country
            each country location_database:data:countries filter not country:disabled and country:caption:len > 0 sort country:caption
              option country:caption keyof:country
          if recipient_country="CAN"
            section_tail "ask_recipient_address"
                select "" recipient_province
                  option "Select the Province" ""
                  option "BC - British Columbia" "BC"
                  option "NV - Nova Scotia" "NV"
                  option "ON - Ontario" "ON"
                if recipient_province="BC"
                    section_tail "ask_recipient_address"
                      select "City: " recipient_city
                        option "Vancouver" "Vancouver"
                        option "Other" ""
                    if recipient_city=""
                      section_tail "ask_recipient_address"
                        input "City: " recipient_city_other

generates exception 11.

copy (Arrow Arrow) +50
arrow Universal (Universal) +17
. add  /pliant/graphic/ui/client/instructions.pli (internals) 37 1 /pliant/graphic/ui/client/instructions.pli (internals) 40 11
pliant ui client instruction function  /pliant/graphic/ui/client/instructions.pli (internals) 301 1 /pliant/graphic/ui/client/instructions.pli (internals) 306 3
. process_instruction  /pliant/graphic/ui/client/context.pli (internals) 329 1 /pliant/graphic/ui/client/context.pli (internals) 354 5
. standard_body  /pliant/graphic/ui/client/instructions.pli (internals) 43 1 /pliant/graphic/ui/client/instructions.pli (internals) 53 5
pliant ui client instruction function  /pliant/graphic/ui/client/instructions.pli (internals) 859 1 /pliant/graphic/ui/client/instructions.pli (internals) 863 3
. process_instruction  /pliant/graphic/ui/client/context.pli (internals) 329 1 /pliant/graphic/ui/client/context.pli (internals) 354 5
frozen expression at /pliant/graphic/ui/client/connect.pli (internals) 133 1  /pliant/graphic/ui/client/connect.pli (internals) 133 1 /pliant/graphic/ui/client/connect.pli (internals) 145 9
run_thread  /pliant/language/schedule/threads_engine.pli (internals) 330 5 /pliant/language/schedule/threads_engine.pli (internals) 370 9
. write_all_data  /pliant/language/stream/stream.pli (internals) 284 1 /pliant/language/stream/stream.pli (internals) 289 21
??? at -1088423588
Message posted by maybe Boris Reitman on 2007/11/11 15:05:41
Why do check if computer name matches the proxy site name in http_proxy.pli ?
1392     var Data:Site site :> site_database:data:site host
1393     if site:computer<>"" and site:computer<>computer_fullname
1394       return