Pliant talk forum

Pliant talk forum

Discussion: Pliant UI development

A place to talk about fixes for the UI frontends.
Message posted by maybe Boris Reitman on 2006/05/23 04:22:51
I have this patch,

http://aristotle.hypervolume.com/~boris/pliant/patches/patch110_ajax_buttons.patch

It kind of works. Notice "prev_url" stuff. 

The problems with the patch are:

  1) the url doesn't change in address bar when a go to new interface screen,
so if reload the default url in the address bar, the server console restarts.

  2) buttons "before" and "after" in the test page section demo sometime work, sometime don't 
(most of the time don't). Might be something to do with section names, or timeout problems.

  3) when I click into a text-box input field, the page scrolls to the bottom.

  4) The left panel doesn't resize itself properly when I exit from the test sample into the main page.

I am proposing to create another event for button clicks, and keep "/run/" untouched.
The button event will be "/button/", similar to "/over/". We would still need to detect
if session url had changed.  If it did, will send to javascript info to what URL
to change the location.  This will take care of 1) and 4).

If you have nothing against this idea, I am going to do it.
Do you have any idea about number 2) ? 

Thanks,
Boris
Message posted by hubert.tonneau on 2006/05/24 09:15:20
> 1) the url doesn't change in address bar when a go to new interface screen,
>    so if reload the default url in the address bar, the server console restarts.

I agree with your plan to add a new instruction in 'apply' to let the HTTP proxy
instruct the browser to jump to another URL.

The HTTP proxy could also decide to switch to ask the browser to reload the URL
when too much changed.
Might also be a first easy to implement solution to your remark 2 bellow.

> 2) buttons "before" and "after" in the test page section demo sometime work, sometime don't 
>    (most of the time don't). Might be something to do with section names, or timeout problems.

It's clear that 'section_before' and 'section_after' cannot work with the
current implementation of the HTTP proxy.
I don't know yet what the best trick is to get these working.

> 3) when I click into a text-box input field, the page scrolls to the bottom.

I don't see this behaviour here. Maybe I failed to do exactly what you
described, maybe it is a bug related to some peticular browser.
Message posted by maybe Boris Reitman on 2006/05/25 04:05:15
Hubert,

I have updated the patch,

http://aristotle.hypervolume.com/~boris/pliant/patches/patch110_ajax_buttons.patch

I have a problem that I don't understand.  The try-catch
block in button_result() javascript function fails when I send the URL. 
For normal section updates it works.  The two alerts "here" and "there"
behave such that when I send the URL, "here" alert comes up, but "there" doesn't.
Instead I get the message in the catch block.

I don't understand what am I doing wrong in the server. Am I computing for too long,
or not sending correct headers, and thats why javascript doesn't process 
response correctly ? 

Thanks,
Boris
Message posted by maybe Boris Reitman on 2006/05/25 05:38:20
I updated the patch. My question still holds, except there is 
no "button_result" javascript function, but there is "run_result" function.
The problem is there, try/catch crashes when I check run_request.status.
This happens only when I try to send the PLIANT_UI_URL. In upgrade mode, it is fine.

Also, if you find the patch is a bit hard to read, the full code is here,

full code:
http://aristotle.hypervolume.com/~boris/pliant/patches/final/http_proxy.pli

just the patch: 
http://aristotle.hypervolume.com/~boris/pliant/patches/patch110_ajax_buttons.patch

Thanks,
Boris
Message posted by hubert.tonneau on 2006/05/27 11:16:41
>          http writechars "PLIANT_UI_URL"+character:1 
>          http writechars url_header+"/sync/"+secret
>          http writechars character:2

This is buggy. You have to write to 'answer' stream, not 'http'.

The reason is that the HTTP answer is chunked encoded, and the reason to do
so is to enable HTTP 1.1 keep alive connections.
Message posted by maybe Boris Reitman on 2006/05/28 05:41:38
Thanks Hubert.

I have updated the patch. It works, but section_before and section_after 
remains to be fixed.

How can I detect that the server executed section_before/section_after, 
so that I know to send the PLIANT_UI_URL command to the javascript in such case.

Also, I have created selenium tests,

  http://aristotle.hypervolume.com/~boris/pliant/selenium/

under the new patch,test #10 passes, but test #11 fails because 
section_before is broken.
Message posted by hubert.tonneau on 2006/05/28 10:01:35
> How can I detect that the server executed section_before/section_after, 
> so that I know to send the PLIANT_UI_URL command to the javascript in such case.

I will fix it, and add the server side rendering core,
then I will submit you the result for extensive test and more improvements
(using your Java applets)
Message posted by maybe Boris Reitman on 2006/05/29 00:50:33
I found a typo, and put up a patch, and updated final version,
http://aristotle.hypervolume.com/~boris/pliant/patches/patch120_fix_ie_requester_typo.patch
Message posted by maybe Boris Reitman on 2006/05/29 08:21:40
Added another patch, and updated final version.  This patch shows an hour-glass
cursor while button click is being processed. It also makes sure that until we receive an
ajax response, no other button clicks will be handled.  When we had a full refresh,
this was handled by the browser. With ajax, we need to make it recognizable to the user 
that a submit is hapenning. In the future, we might make a user-controlled option
to configure certain buttons not to show the hour glass cursor.

http://aristotle.hypervolume.com/~boris/pliant/patches/patch130_wait_on_button_submit.patch

The next big usability roadblock in http proxy is controlling the max size of 
input fields, because that influences the layout on the page.  

As for the standalone ui client: is it possible now to access a remote URL with it ? 



Message posted by hubert.tonneau on 2006/05/29 13:12:10
> I found a typo, and put up a patch, and updated final version,

I had already corrected it at review time.

> Added another patch, and updated final version.  This patch shows an hour-glass
> cursor while button click is being processed.

Nothing appends with my Firefox 1 under Linux, but I might have not applied
it correctly.
I'll post my version at some point so that you can review.

> The next big usability roadblock in http proxy is controlling the max size of 
> input fields, because that influences the layout on the page.  

I'm not sure I want to do that.
I think having the ability to provide constrains on the table cells that
forwards the constrains to the content (so the input field) might be better.
Also it will probably only work with the native UI client.

> As for the standalone ui client: is it possible now to access a remote URL with it ?

Should be with 96d tarball.
Message posted by maybe Boris Reitman  on 2006/05/29 15:41:57
>> Added another patch, and updated final version.  This patch shows an hour-glass
>> cursor while button click is being processed.

>Nothing appends with my Firefox 1 under Linux, but I might have not applied
>it correctly.
>I'll post my version at some point so that you can review.

It doesn't work for me on Mozilla 1.7 too.  I don't have linux Firefox < 1.5,
but I suspect it will also not work.  On Firefox >= 1.5 it works in both linux 
and windows, and also works in IE.

>> The next big usability roadblock in http proxy is controlling the max size of 
>> input fields, because that influences the layout on the page.  

>I'm not sure I want to do that.
>I think having the ability to provide constrains on the table cells that
>forwards the constrains to the content (so the input field) might be better.
>Also it will probably only work with the native UI client.

Ok, this might work. I had a request from my users to have a larger input field,
but they may have felt so because paste didn't work properly.
Message posted by maybe Boris Reitman on 2006/05/30 07:41:32
>> - there seems to be no way to paste in the windows ui 
>> (in linux I paste with middle mouse button)
>The reason is that I have not implemented the two following methods
>in /pliant/graphic/console/win32.pli
>
>  method c clipboard_export fun param
>    oarg_rw ConsolePrototype c ; arg Function fun ; arg Address param

>  method c clipboard_import text -> status
>    oarg_rw ConsolePrototype c ; arg_w Str text ; arg Status status
>
>The first one is a bit difficult to understand. The reason is that optimal
>clipboard export does not provide the content of the clipboard but just
>provides a way to get it if it is pasted. So, it is lazy evaluation.

Ok, Hubert, I am going to start working on enabling clipboard interaction for win32.

Also, the current clipboard implementation for the linux ui doesn't change the text being selected
visually (doesn't make it white on black). If you have any tips on this one, let me know.

Thanks,
Boris
Message posted by hubert.tonneau on 2006/05/30 22:52:08
> Also, the current clipboard implementation for the linux ui doesn't change the text being selected
> visually (doesn't make it white on black). If you have any tips on this one, let me know.

Selection visualisation is not yet available in Pliant UI client, and it's
fairly disturbing for the end user.
Message posted by maybe Boris Reitman on 2006/05/31 07:11:50
I am having trouble getting the middle button click to propagate to the input layout event handler.
First, the strange thing is that wireless usb mouse doesn't send MBUTTONDOWN and MBUTTONUP events,
but instead ONKEYUP and ONKEYDOWN characters. (It works fine on linux ui version).
So I cought the event in the correct place in win32.pli, where the keyup is handled.
What breaks is the check in main.pli, function ui_client, where ec:mode is set.

------------8<----------
           var Pointer:UISession s :> c:session i
           each w s:windows
+            if w:x0<>undefined and x0>=w:x0 and y0>=w:y0 #and x0<w:x1 and y0<w:y1
+              if event="press"
+                console "PASSED xxx0 " eol
+            if w:x0<>undefined and x0>=w:x0 and y0>=w:y0 and x0<w:x1 #and y0<w:y1
+              if event="press"
+                console "PASSED xxx1 " eol
             if w:x0<>undefined and x0>=w:x0 and y0>=w:y0 and x0<w:x1 and y0<w:y1
+              if event="press"
+                console "PASSED xxx2 " eol
               if event="press" and (key parse "button" any)
                 c raise i false
               ec window :> w
               ec x := (x0-w:x0+w:scroll_x+0.5)*c:unit_x
               ec y := (y0-w:y0+w:scroll_y+0.5)*c:unit_y
               if (exists w:overlay)
+                #console "executing w:overlay event ec" eol
                 w:overlay event ec
               if (exists w:root)
+                #console "executing w:root event ec" eol
                 w:root event ec
------------>8----------

Full patch, against pliant96c  is at 
  http://aristotle.hypervolume.com/~boris/pliant/clipboard.patch


The left mouse button (button1) passes these "if"'s on button down, and only the first debug "if",
on button up.  

left button:
------------8<-----------
left button down
setting mode to layout_event_pointer: press key button1
PASSED xxx0
PASSED xxx1
PASSED xxx2
press button1
passed
press button1
passed
PASSED xxx0
left button up
------------->8------------

But as below output shows, the middle mouse button doesn't work.

middle button (button3):
-------------8<------------
keydown: middle button down
setting mode to layout_event_pointer: press key button3
PASSED xxx0
PASSED xxx0
setting mode to layout_event_focus: press key button3
press button3
keyup: middle button up
------------>8-------------

Am I right to assume button3 is the middle button ?  
So it seems that this condition fails: "x0 < w:x1".
Can you please explain the design of this x0, and x1, and y0 and y1.
Am I correct to undrestand that they are bounding boxes for widgets ? 

The problem probably has to do with GetMessage return value for the middle click,
in win32.pli,
-----8<----------
  GetMessage (var MSG msg) null 0 0
  # console "message " msg:message " " (shunt msg:hwnd=c:hWnd "yes" "no") eol
  if msg:hwnd=c:hWnd
    var Int x := msg:lParam .and. 2^16-1 ; var Int y := msg:lParam\2^16
------>8---------

If you have any thoughts on this, let me know. I will resume the hunt tomorrow.

Haven't tried pliant96d yet, but 96c ui implementation is dog slow on win32.
Thanks,
Boris
Message posted by hubert.tonneau on 2006/05/31 16:59:07
In a mouse event x0 and y0 are in facts x_or_x0 and y_or_y0
and if the event is a mouse related one, then the value is the position of
the mouse.

We have x0 y0 x1 y1 in order to be abble to pass an area, and it is used when
the event is redraw.

So, if under Windows some mouse event is received as a key stroke, then
when you translate it to an UI event, you have to fill x0 and y0 with the
position of the mouse. Should it not be provided by Windows, the you can
record all mouse move events positions in a pair of global variables, then
just use the content of these.
Message posted by maybe Boris Reitman on 2006/06/01 19:35:41
Thanks.  Turned out that my wireless mouse was misconfigured for the middle 
button to function as Zoom. After I changed it to be the middle click, I started to
receive correct events.

I have a working patch for the paste (clipboard_import) operation against pliant96c.

  http://aristotle.hypervolume.com/~boris/pliant/clipboard.patch

As well, I have found a bug in console/x11.pli clipboard_import function.
The variable lap was used twice as the loop counter in nested loop.

Can you please explain to me the "lap" thing for x11 ?  Do I need this for windows ?
Are you trying to prepare the contents of the clipboard to be in string form ?
Or are you trying to fetch text in utf8 format ?  In windows, there is CF_LOCALE
and CF_UNICODETEXT, and I don't know if I should attempt to read them.  Windows does
automatic conversion to CF_TEXT when I request it.

 
Message posted by hubert.tonneau on 2006/06/01 21:53:23
> As well, I have found a bug in console/x11.pli clipboard_import function.
> The variable lap was used twice as the loop counter in nested loop.

Oops. Thanks.

> Can you please explain to me the "lap" thing for x11 ?

Under X11, you send an event saying you want something, then you scan the
receive queue for the answer.
Also the protocol between the server and the client is asynchronous.
If I remember well, I've red somewhere that if no answer is received, it's
recommended to reask, but I don't know exactly why because TCP is a reliable
protocol so no request should be lost. Might be that X11 did not assume TCP
in it's early days.

> Do I need this for windows ?

Probably not, because under Windows there is probably no asynchronous protocol,
just a call to a library or kernel function.

> Are you trying to prepare the contents of the clipboard to be in string form ?
> Or are you trying to fetch text in utf8 format ?

The application must provide the clipboard in UTF8, and will receive the
clipboard also UTF8 encoded. So if the underlying system (X11, Windows, etc)
does not assume UTF8, then the layer implementing 'clipboard_export' and
'clipboard_import' is responsible for the translations.

In very fiew words, historically Pliant assumed standards strings to use
use iso8859-1 charset, but it was a bad choice, so at some point I moved
to assuming that standards strings are UTF8 encoded.
Now, when we talk about the UI, since it's fairly new, then it is clear
that UTF8 encoding must be assumed everywhere, so it's a bug if it's not
in some place.
Message posted by maybe Boris Reitman on 2006/06/03 08:40:09
Hi Hubert,

I have updated the patch,

  http://aristotle.hypervolume.com/~boris/pliant/clipboard.patch

which requires two files str16.pli and utf16.pli, that can be found here:

  http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/

The patch should be applied while in c:\pliant\pliant directory.  (patch -p0 < clipboard.patch)

It turns out that CF_UNICODETEXT in windows wants utf16 encoded unicode.
I have only implemented the minimal interface for str16 and utf16.  Please advise
me of the best way to package it, unless you prefer to do it yourself.

As well, the current implementation will work on Win2k, Winnt, and WinXP, but not
on Win98 and Win95.  Those don't support UNICODETEXT flag. For those we would 
need to encode the text in RTF using \uc1 to escape unicode characters.  I found
example implementation in GTK+ source code, and will implement it at a later date.

I would now like to explore packaging of the UI into a win32 setup.exe.  I think
that in the pliant web ui we should have a link in one of the pannels suggesting
to install the pliant gui client. Once clicked, everything is automatic from there,
and correct entries are added to the start menu and desktop. perhaps a browser plugin
can launch the application if it is installed.
 
On the gui three things are needed to make it usable: make it fast/responsive, 
selection visualization, select text in paragraphs.  I don't know how to go about the first two.
Message posted by hubert.tonneau on 2006/06/03 08:55:02
> I would now like to explore packaging of the UI into a win32 setup.exe

What your setup.exe must do is:
. welcome
. ask to where to unzip
. start 'fullpliant' executable

On my side, I've started to change 'fullpliant' so that it runs as a Windows
GUI application, and starts the UI to do futher configuration.

I'd be also happy you to write a small .pli that enables recording
'fullpliant' executable as a service, unrecording it as a service,
and stopping another running instance.

About the slowness issue, it's a bit strange because we have also noticed
here Pliant UI under Windows to be unresponsive on some machines and
responsive on some others.

About selection visualisation, I've talked about it with Loic yesturday,
and will implement it one day or another, as well as I will implement the
HTTP proxy server side rendering, so you don't have to worry about it at
the moment.
Message posted by maybe Boris Reitman on 2006/07/25 13:53:54
Hello Hubert,

I have the installer ready, what I need is a command to invoke the ui client 
from windows Start menu, and another command to precompile the ui client,
so that it will start very quickly.  Can you help me with that ?

http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/win32/InnoSetup/

Please take a look at pliant.iss and bat files in overlay directory.
At the moment the shortcut in the start menu is created, but it starts a blank console window,
i don't want to have it.  I want it to start like fullpliant.exe, in its own window.


Thanks,
Boris
Message posted by hubert.tonneau on 2006/07/25 14:46:31
Hi Boris,

Try to pick pliant 96e
then in /pliant/fullpliant/run.pli just change
  constant auto_ui false
  constant auto_http true
  constant auto_console false
with
  constant auto_ui true
  constant auto_http false
  constant auto_console true
then running 'fullpliant' script should be ok.

I have to think more about the precompiling issue.
Message posted by maybe Boris Reitman on 2006/07/25 15:30:46
in the meanwhile,
http://aristotle.hypervolume.com/~boris/pliant/pliant96d.exe
Message posted by maybe Boris on 2006/07/26 09:46:41
http://aristotle.hypervolume.com/~boris/pliant/pliant96e.exe
Message posted by maybe Boris Reitman on 2006/07/26 10:12:41
I will work on starting/stopping fullpliant.exe process.
When do you think all server config will be transfered to the new gui ? 
In the meanwhile, please suggest adding shortcut for starting a web-based config.
+ all the precompilation issues.

also, the windows ui doesn't redraw properly when I scroll and also 
when I move the whole window.  I am on windows xp.
Message posted by hubert.tonneau on 2006/07/26 14:37:50
> When do you think all server config will be transfered to the new gui ? 

I have to rework the windows manager since I'm not happy with it.

> In the meanwhile, please suggest adding shortcut for starting a web-based config.

Depending on the constants in run.pli the default will be to start the Pliant UI
browser or the HTTP server and web browser, so switching the default
is just modifying two lines.
Message posted by michel on 2006/07/27 17:59:40
can this change made by "custon" feature ?
Message posted by hubert.tonneau on 2006/07/27 18:09:43
> can this change made by "custon" feature ?

Good idea.

plugin auto
  constant auto_ui false
  constant auto_http true
  constant auto_console false
Message posted by maybe Boris Reitman on 2006/07/30 18:21:57
Code to terminate fullpliant process:
http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/win32/process.pli

Next will work on recording as service.
Message posted by hubert.tonneau on 2006/07/30 18:27:22
> Next will work on recording as service.

If you are digging in Win32 processes API, it would be nice to make
/pliant/admin/execute.pli
work under Windows.
Message posted by maybe Boris Reitman on 2006/07/31 01:00:48
Ok, i will work on execute support next.

I have updated the process.pli file. Please incorporate it into the code.
The service is currently added in "Manual" mode.  Let me know if you want 
auto-start on boot.  Is this code will be incorporated into fullpliant.exe ?
At the moment, if I start fullpliant multiple times, I have several fullpliant 
processes, but there should only be one.
Message posted by maybe Boris Reitman on 2006/07/31 01:13:20
In order for fullpliant.exe to be able to start as a service, 
it needs to respond to START control message, and needs a handler to be defined:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/service_functions.asp
Message posted by hubert.tonneau on 2006/07/31 01:19:12
> I have updated the process.pli file. Please incorporate it into the code.

From my point of view, the name of the new module should be
/pliant/win32/schedule/process.pli
in order to be constistent with the /pliant/linux/ tree containing Linux
specific code.
Do you agree ?

> The service is currently added in "Manual" mode.  Let me know if you want 
> auto-start on boot.

The general idea is that when the UI client is stable enough, 'fullpliant'
executable will lauch the UI client with administration rights, and all
configuration options should be available there. A bit like in a SOHO
system.
One very simple page should display all services that will be lauched
(SMTP, FTP, etc) with a wizard checking and reporting advises about their
configuration and under Windows, the bottom of this page could contain
an extra checkbox to specify if 'fullpliant' must be automatically launched
on boot.

Also, it's a bit too early for me to provide reliable advises about
configuration. I know that Marcus might have more precise ideas in the area.
The way I plan to do it is turn the UI interface to stable, then focus on
the 'boot from USB key' version. When this reference one is ok, then
we might decide that on an existing operating system such as Linux or
Windows, launching 'fullpliant' means the same as booting from the USB key.

> Is this code will be incorporated into fullpliant.exe ?

I don't understand. Why do you want special code in fullpliant.exe ?

> At the moment, if I start fullpliant multiple times, I have several fullpliant 
> processes, but there should only be one.

One must not launch two Pliant instances that share the same security or
datas subdirectories.
How we grant this exact behaviour is not so clear for me at the moment.
Message posted by maybe Boris Reitman on 2006/07/31 07:57:53
Yes, I agree. 

>> Is this code will be incorporated into fullpliant.exe ?

>I don't understand. Why do you want special code in fullpliant.exe ?
>> At the moment, if I start fullpliant multiple times, I have several fullpliant 
>> processes, but there should only be one.
> One must not launch two Pliant instances that share the same security or
> datas subdirectories.
> How we grant this exact behaviour is not so clear for me at the moment.

I realize that this is a general problem that occurs when 
two pliant instances access the same db.  When fullpliant.exe is available in 
a shortcut in a Start menu, there is a very high chance a user will launch it 
twice.  I would like to solve this problem, for now.   In this case the most 
correct behaviour is not to run fullpliant.exe if one is already running.
Should this check be added to /pliant/fullpliant/run.pli ? Like this, 

  if fullpliant_is_running
    exit

When fullpliant is a service, how will we display the GUI ?
http://www.dotnet247.com/247reference/msgs/42/211138.aspx

Also, a bit different question: where is the place in the UI interface to connect 
to a different pliant ui server ?  We need an address bar, or something 
of this sort.
Message posted by hubert.tonneau on 2006/07/31 13:07:19
>  if fullpliant_is_running
>    exit

That's not enough. We need to know if another instance is running and sharing
the same security or data path.
The easy way would be to create a flag file in the directory where we write
Pliant PID, but then we lack one operating system feature which is to specify
that the operaring system must delete a given file when the process ends.
Without this feature we get the same kind of stupid problems we get with
Mozilla where a crash might leave the file, so on restart the browser does
not work any more.

> When fullpliant is a service, how will we display the GUI ?
> http://www.dotnet247.com/247reference/msgs/42/211138.aspx

If we want to get adminstrator right without asking for login, then Pliant
UI client must run in the same Pliant process as the server.

When we have set a real account, then both of them can run in different
processes.

> Also, a bit different question: where is the place in the UI interface to connect 
> to a different pliant ui server ?  We need an address bar, or something 
> of this sort.

There is an 'url' button on the right.
Also access to a distant server might not work well at the moment because
you need to set up the crypto keys properly.
Message posted by maybe Boris Reitman on 2006/08/01 17:19:20
I am not concerned about pliant.exe, only about fullpliant.exe, since
only that one is available as a shortcut in Start menu.  In this case, 
why is my suggestion not sufficient ?  If a user tries to start a second 
fullpliant.exe, it fails. fullpliant.exe is a "singleton" concept.

>> When fullpliant is a service, how will we display the GUI ?
>> http://www.dotnet247.com/247reference/msgs/42/211138.aspx

>If we want to get adminstrator right without asking for login, then Pliant
>UI client must run in the same Pliant process as the server.

>When we have set a real account, then both of them can run in different
>processes.

Here is how I see it:

Windows services can not display gui.  Therefore, for administration task, we need 
to stop the fullpliant service, and start fullpliant process.

For all other tasks, fullpliant service acts as a UI server for internet 
connections, and displays no win32 gui.  The user starts UI client and connects to 
localhost as the start page.

Therefore, I see two shortcuts in Start menu:

1) Admin UI 
  if fullpliant service is stopped and fullpliant.exe process is running, abort.
  Else:
  1.1) stop fullpliant service
  1.2) start fullpliant.exe process 
    1.2.1) connect to localhost ui

  When user kills/quits the application, start fullpliant service again,
  so that others can connect to the server.

2) Client UI
  if fullpliant service is stopped and fullpliant.exe process is running 
  in admin mode (default), abort.
  Else:
  2.1) start fullpliant service
  2.2) start fullpliant.exe with PLIANT_HOME=/second  (ui client only)
    2.2.1) connect to localhost ui as the start page

What do you think of this design ? Can you please help me with exact 
syntax for doing (2.2).

Thanks,
Boris
Message posted by hubert.tonneau on 2006/08/04 14:26:37
I bet that we need four different executables:

pliant.exe
does nothing special

fullpliant.exe
Pliant installation, configuration and recovery tool.

srvpliant.exe
Pliant Windows service.

clipliant.exe
Pliant console to administrate srvpliant.exe
This one runs in another directory.

So the standard install process would be:
1) run fullpliant.exe in order to do basic configuration.
2) when everything is properly configured, switch to using srvpliant.exe
   and clipliant.exe if Pliant services are exepected to run all the time
3) if something goes wrong so that either srvpliant.exe or clipliant.exe
   get unusable, switch back to using fullpliant.exe


> Can you please help me with exact syntax for doing (2.2)

You can try something like
pliant root /second/pliant/ ...

One small problem is that the 'root' option syntax is not consistent with
the environment syntax that would be:
PLIANT_ROOT=/second pliant ...

The main problem with two Pliant process is that you need the accounts to
be properly setup on both sides.
Message posted by maybe Boris Reitman on 2006/08/06 13:42:41
Hi, 

Can you please help me to get started.  If I compile srvpliant.exe in the same 
way as fullpliant.exe, will some variable in run.pli be set to "srvpliant" ? 

Thanks,
Boris
Message posted by hubert.tonneau on 2006/08/06 13:47:52
Just look the 'fullpliant' string in /pliant/language/startup/startup.c

In facts, fullpliant.exe and pliant.exe are the same, and at startup time,
the software scans for the name of the executable, and behaves accordingly.
In case of 'fullpliant', what is done is
1) precompile /pliant/install/precompile.pli
2) load /pliant/fullpliant/run.pli

So, both 'srvpliant' and 'clipliant' should basically do the same, each of
them loading a different module, and maybe precompiling a different module
so that the browser can precompile nearly everything in order to start fast.
Message posted by maybe Boris Reitman on 2006/08/06 20:20:41
http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/startup.c

Let me know if you are ok with the paths.  Also, can be seen here:

http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/win32/InnoSetup/overlay/pliant/

Message posted by maybe Boris Reitman on 2006/08/07 17:31:07
> The main problem with two Pliant process is that you need the accounts to
> be properly setup on both sides.

In order to run "pliant root /second" do I need to have another pliant
installation in directory c:\second ?  (this is how I did it at the moment).

I uploaded the scripts at:
 
  http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/win32/InnoSetup/overlay/pliant/win32

srv_run.pli:
--8<--------------------
...
multiplexer_port "loopback" "loopback:/server/ui" "loopback:/client/ui"
...
ui_server
...
--->8-------------------

cli_run.pli:
-----8<---------------------
...
  multiplexer_port "loopback" "loopback:/server/ui" "loopback:/client/ui"
  sleep 0.1
  ui_client "url [dq]host://localhost/pliant/menu[dq] autosize windows_manager [dq]loopback:/pliant/graphic/ui/client:windows_manager[dq]"
...
---->8--------------------------------

I am getting a failure to connect:  "server connection oops".  However, I do see
that srvpliant.exe is listening on port 36

Can you explain to me the difference between listening on ui (port 36) and on port 8036,
what is role of multiplexer, and what is the difference between secure client and clear client.
What kind of user accounts do I need to setup for this to work. I would like to prepare
a pliant script that will execute as post-install to prepare the user accounts,
and generate ssl keys if needed.

If you want to try running it, download:

  http://aristotle.hypervolume.com/~boris/pliant/pliant_work.zip

which will extract into directories 'pliant' and 'second'.  Then, in seperate cmd shells:

c:\> pliant\srvpliant.exe
c:\> second\clipliant.exe root /second/

At the moment I compiled srvpliant.exe and clipliant.exe to run in a console,
for debugging purpose.










Message posted by hubert.tonneau on 2006/08/07 18:04:25
> In order to run "pliant root /second" do I need to have another pliant
> installation in directory c:\second ?  (this is how I did it at the moment).

Yes.
Also, under Linux it can be a soft link.

> Can you explain to me the difference between listening on ui (port 36) and on port 8036,

Under Linux, only 'root' can open port 36, so the one I've selected for
Pliant multiplexer is 36, but non 'root' users will have to use another one.

> what is role of multiplexer,

All Pliant services will use a single TCP port.
So, the multiplexer is waiting for a client, creating a new thread,
and call the code of the service the client requested.

> What kind of user accounts do I need to setup for this to work. I would like to prepare
> a pliant script that will execute as post-install to prepare the user accounts,
> and generate ssl keys if needed.

At some point, the Pliant install and configuration tool should do it
transparently just like on any decent SOHO system.
Message posted by maybe Boris Reitman on 2006/08/07 21:51:17
I am experimenting on linux first (pliant-96e):

Starting server:

  $ pliant 'precompile /binary/uiserver.dump module /pliant/graphic/ui/server/main.pli' module /pliant/graphic/ui/sample/run.pli command run_server

The server starts fine and and I can see that it is listening on port 8036.

Starting client:

  $ pliant root /second/ 'precompile /binary/uiclient.dump module /pliant/graphic/image/rip.pli module /pliant/graphic/ui/client/main.pli' module /pliant/graphic/ui/sample/run.pli command run_clear_client_only

I added function run_clear_client_only to /pliant/graphic/ui/sample/run.pli:

-----------8<-----------------------------
function run_clear_client_only
  ui_client "url [dq]tcp://localhost:8036/pliant/menu[dq] windows_manager [dq]loopback:/pliant/graphic/ui/client/windows_manager[dq] login [dq]admin2[dq] [dq]admin[dq]"
---------->8------------------------------

I am getting this error from the client:

  TCP connection succeeded
  not allowed

I am able to login with user admin2 password 'admin' to http server.

Also, when I run with "/pliant/fullpliant root /second/" why 
is /second_data and /second_security directories are not created, 
but /pliant_data and /pliant_security are used ? The PLIANT_ROOT= syntax didn't work for me, btw.

Message posted by hubert.tonneau on 2006/08/07 23:27:43
> I am getting this error from the client:

You are hitting the fact that Pliant UI interface is still very experimental.
I have not yet switched to using it as my primary interface, so nothing
is really expected to work at the moment.

> Also, when I run with "/pliant/fullpliant root /second/" why 
> is /second_data and /second_security directories are not created, 
> but /pliant_data and /pliant_security are used ? The PLIANT_ROOT= syntax didn't work for me, btw.

The security:/ and data:/ path are defined in 'find_computer_name'
in /pliant/language/context/computer.pli

If the Pliant path is /second/pliant
then the others should be /second/pliant_security and /second/pliant_data

except in the case where Pliant path would be /usr/share/pliant
where the others will then be /etc/pliant/ and /var/lib/pliant/
because somebody told me it's the proper way to apply Unix rules.

Message posted by maybe Boris Reitman on 2006/08/11 17:00:00
I have added the code to allow for srvpliant.exe to function as a windows service.

http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/win32/InnoSetup/overlay/pliant/win32/schedule/process.pli

The entry point is the function fullpliant_service_main_loop which must be executed
at the end of the srv_run.pli script,

http://aristotle.hypervolume.com/~boris/pliant/boris.reitman/pliant/win32/InnoSetup/overlay/pliant/win32/fullpliant/srv_run.pli

I am having trouble running port multiplexer from the service mode. When run in the console, it works.
It must must be permissions on socket operations. Maybe you have ideas in this area.
 
As well, I need to have a way to send to ui_server a shutdown command.

Another question: why does a client also need to run port multiplixer ?

About the /second/ path.  I have decided to place the second installation of pliant,
into /pliant/second/pliant, so that it will be hidden from the user, and 
won't take a directory at the root. If you have another suggestion, let me know.

Do you have time right now to figure out why client/server 
connections are not working ?

Btw, it is possible to for windows service to do GUI, but it is not recommended,
and also I couldn't get it work on my end. It is called SERVICE_INTERACTIVE_PROCESS. 
So I am staying with the clipliant.exe / srvpliant.exe plan.

Thanks,
Boris

Message posted by hubert.tonneau on 2006/08/13 14:25:23
> I am having trouble running port multiplexer from the service mode. When run in the console, it works.
> It must must be permissions on socket operations. Maybe you have ideas in this area.

No, but the Pliant multiplexer can use any TCP port.

The related problem is that Pliant might have to rely to something else than
DNS to resolve names -> IP and port and public key.

> As well, I need to have a way to send to ui_server a shutdown command.

There are two solution:
. either access a UI URL with a sutdown button (user friendly).
. or implement a shutdown service at port multiplexer level (script friendly).

I believe that at some point, I will introduce a service including queries
about status, instruction to free some ressources, shutdown, etc through
another service at multiplexer level.

> Another question: why does a client also need to run port multiplixer ?

No.

> About the /second/ path.  I have decided to place the second installation of pliant,
> into /pliant/second/pliant, so that it will be hidden from the user, and 
> won't take a directory at the root. If you have another suggestion, let me know.

I will sort out all these issues only the next time I will package the USB
key.

> Do you have time right now to figure out why client/server connections are
> not working ?

I'm currently working on rewritting the windows positionning in the UI,
but I got plenty of ideas about audio this week so it went slow.
Message posted by maybe Boris Reitman on 2006/10/01 23:06:46
I would like to discuss the process for automatic updates for Pliant UI client,
under Windows environment. I think it is very important to have automatic/easy
upgrades right at the start.

One extreme is that Pliant code does everything
starting from downloading the new version, uncompressing it, rebuilding image
dump files and restarting itself.  The other extreme is to investigate windows 
live/automatic updates and to have all this work done externally. What are your
thoughts on this ?  Is it possible in Pliant to upgrade without 
restarting the client ? Just, sort of, recompile only the changed functions
and redraw the screen ?

Here is another related scenario: Suppose I have a pliant ui server that serves 
a Doom like game.  I would like to send to the client a custom pliant module, provided the clients authorizes me, to 
support some custom construts related to the game engine. I would like the ui-client
not have to restart the ui browser. 

So it seems like we can integrate the concept of general upgrade with concept of
custom plugins/modules issued by ui servers.
Message posted by hubert.tonneau on 2006/10/01 23:22:44
The problem here is trust.
Automatic upgrades means that you trust the provider and the download channel.
The problem is that I am not a security specialist, so I'm not abble to
install the highly secured server that would provide the upgrades, and even
more, I don't want to take the responsability for that.
Message posted by maybe  on 2006/10/02 02:20:23
Using a secured channel with some public key encryption seems not more dangerous than downloading on fullpliant.org without any security.
Message posted by maybe Boris Reitman on 2006/10/02 04:12:38
The problem is requiring a windows user to download a new version of application.
Windows users want everything to happen without any effort, on demand.  
If they come to a server to play Doom like game and it doesn't work, 
they will leave and will take no further action.
Message posted by maybe Boris Reitman on 2006/11/19 01:30:21
Hello Hubert,

While you are working on the website changes, I want to ask you if you plan 
to have the old http server framework available.  The reason is that for a commercial 
website that must rank well on google, it must be url based. I mean, different 
parts of the website must be reachable by nice looking / descriptive urls.
When everything runs under one url, or different urls with 
random string as a path, its not good for an online store website, like mine.

Boris
Message posted by maybe Hubert Tonneau on 2006/11/19 01:55:00
The UI interface is also URL based.

The problem is that a UI link is coded like this in the application source:
  link "some text"
    url_call "some url"
and it will make search engine robots life hard because the link does not
contain the informations about the target url. It just tiggers some code on
the server, and the execution of the code sends an instruction to the client
to jump to the new URL.
Basically, in the Pliant UI, a link is exactly the same as a button; only
the look is different. It is so true that at implementation level, a link
is a button with a different style.

But ... thanks to Pliant meta programming, it should be easy to translate the
previous pattern to a simple link.

Lastly, if the new UI HTTP proxy hides URLs, then it's probably something
we can and should get rid of.
Message posted by maybe Boris Reitman on 2006/11/19 17:09:05
So, what we need is in case of a "note" link, an optional argument
for the visible url, and the button*0*0... state will be passed 
using a cgi argument, rathen than in a URL.

note "Dozen Roses" "/roses/dozen_roses.html"
  ...
  goto_url "..."
  #or
  execute_dynamic_page "..."
  #or
  call_some_page_method ...
  
The link that will be generated in the web-browser will be:
/roses/dozen_roses.html?_=button*0*0... 

Google search engine counts a url with same path but 
with different cgi arguments as one.

If you think that this is a good idea, please let me know of 
an approach to take to implement it.

Thanks,
Boris
Message posted by maybe Hubert Tonneau on 2006/11/19 17:27:04
What I've done recently:
1) switch to FullPliant with the UI as the main interface. Outch.
2) rewrite various FullPliant administration tools using .ui syntax
3) correct the most ennoying bugs in the UI (using if as the main user interface
   for everyday work is not the same as testing it from time to time)
4) make the FullPliant text editor and file browser suitable for everyday
   intensive use
5) write a new more straight forward FullPliant install tool
6) reinstall the main fullpliant.org server with various logical computers,
   and the HTTP proxy to dispatch to various web servers hosted on various
   logical computers, some using the old HTTP interface, some using the new
   UI interface

The planning for the next weeks is the following:
7) make the document editor usable
8) start to use it to build the new Pliant site
9) iron out the HTTP proxy to make the new Pliant site nicely usable when
   seen from a standard web browser

So, your request is related to point 9, and will be handled, but it's much
easier for me to stick to the roadmap described here.
Message posted by maybe Boris Reitman on 2006/12/29 05:52:08
Happy upcoming New Year :)

Is the communitacation between standalone process for ui client 
and a server process working now ?  I'd like to finish the windows installer.

Thanks,
Boris
Message posted by maybe Hubert Tonneau on 2006/12/29 11:50:26
Yes, it does work nicely, also it still lacks some informative messages
when something goes wrong,
and there is no automatic mechnism to spread public keys.
I now use the UI everyday as my main user interface to both work on my laptop
and administrate servers.
The HTTP proxy is also working well even if not complete yet.

I have plans to make release 97 in january, but still have a fiew issues
to deal with before:
. check that Win32 still work
. make run.pli usable in a not FullPliant 2 environment
. update the release packaging tool to make it work in my new FullPliant 2
  environment

On the todo list, I also have to make the Pliant word processor usable so
that I can start to write the lot and lot of missing Pliant documentation.
Message posted by maybe Boris Reitman on 2007/01/03 20:58:54
Can you please upload a zip for pliant-96y or the latest version.
Thanks,
Boris
Message posted by maybe Hubert Tonneau on 2007/01/03 21:11:01
Do you mean the windows version ?
Message posted by maybe Boris Reitman on 2007/01/03 23:30:48
yes.
Message posted by maybe Boris Reitman on 2007/01/03 23:44:35
It doesn't need to work perfectly, as long as tcp/ip communication 
works between ui client and server processes.  This will enable me to finish 
the windows installer.
Message posted by maybe Boris Reitman on 2007/01/09 10:46:36
I am trying to run pliant-96y, and it is not working. On the server I run 
/pliant/fullpliant,

-------8<--------------
Pliant UI server is running.               
Pliant multiplexer is running (TCP port 36).          
UI HTTP proxy server is running.               
UI HTTP proxy server is running (TCP port 8082).
HTTP server is running.                           

Using your favorite browser, connect to the server via the URL
http://localhost:8081/
--->8---------------------

But accessing http://localhost:8082/menu or pliant/menu or with no path at all
returns an empty page.  How do  I get it to show a menu ?

I tried running the same command on the client, enabling the ui_client console.
I get an error that client can't start because I am not in the right color 
resolution, and that I need 24bit or 16bit color. But I have that.

How can I start ui_client by itself, withouth the server ? (into /second root)

Thanks,
Boris

Message posted by maybe Boris Reitman on 2008/02/03 18:06:21
Now that I was able to use windows UI to make connections, I will resume work 
on the windows pliant installer: (fullpliant.exe, srvpliant.exe and, clipliant.exe)
Message posted by maybe Boris Reitman on 2008/02/04 19:47:41
I have a first version of the windows pliant installer, which I posted on my pliant page. It doesn't install the service yet.