On 16 May 2013 15:05, Sven Van Caekenberghe <[email protected]> wrote:
>
> On 16 May 2013, at 14:41, Camillo Bruni <[email protected]> wrote:
>
>> cool :)
>
> Thx, it is actually very simple, just a little hack.
>
> I wanted to make it work like your zero-conf scripts
>
> $ curl localhost:1701/repl | bash
>
> But that does not seem possible (after a day of fruitless bash hacking ;-): 
> bash already reads its script from stdin, hence the script itself cannot read 
> his own input from stdin (or so it seems).
>
> If you would happen to know how to do it …
>
you know you can always add one more pipe, do you?

<whatever gives some output to> | <this guy who consumes it and gives
to> | <another guy which consumes it and outputs the result>

:)

>> On 2013-05-16, at 14:36, Sven Van Caekenberghe <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> Here is a little tool that might be useful to some you. For others it might 
>>> be a nice example.
>>>
>>> So you have your shiny Pharo server application running in the cloud. When 
>>> something goes wrong, most of the time you will just restart, manually or 
>>> automatically. But sometimes you wish you could interact with a running 
>>> headless server image. Problem is, you can't out of the box.
>>>
>>> ZnReadEvalPrintDelegate is a simple tool that exports a REPL Web Service. 
>>> Much like the emergency evaluator. Primitive but better than nothing. 
>>> Install it on a port of your choice, running in a independent Zn HTTP 
>>> server, bound to localhost only.
>>>
>>>      ZnReadEvalPrintDelegate startInServerOn: 1701.
>>>
>>> There is only one API method: POST a plain/text Smalltalk expression to 
>>> evaluate, get the result back.
>>>
>>>      ZnClient new
>>>              url: 'http://localhost:1701/repl';
>>>              contents: '42 factorial';
>>>              post.
>>>
>>> Here is an example terminal session (logged in to the server, not remote):
>>>
>>> A GET on the service /repl gives some help text
>>>
>>> $ curl http://localhost:1701/repl
>>> # Pharo Smalltalk REPL. POST expressions to evaluate
>>> # Here is one way (type ctrl-d to end input)
>>> curl -X POST -H'Content-Type:text/plain' --data-binary @- 
>>> http://localhost:1701/repl
>>>
>>> A POST with -d is good for short expressions
>>>
>>> $ curl -X POST -H'Content-Type:text/plain' -d '42 factorial' 
>>> http://localhost:1701/repl
>>> 1405006117752879898543142606244511569936384000000000
>>>
>>> For longer or multi line expressions you can read input from stdin and end 
>>> with ctrl-d (copy the expression returned by the GET). Or you could send 
>>> text files.
>>>
>>> $ curl -X POST -H'Content-Type:text/plain' --data-binary @- 
>>> http://localhost:1701/repl
>>> { (1 to: 10) sum. (1 to: 10) average }
>>> {55. (11/2)}
>>>
>>> There is error handling as well:
>>>
>>> $ curl -X POST -H'Content-Type:text/plain' --data-binary @- 
>>> http://localhost:1701/repl
>>> 1 plus: 2
>>> MessageNotUnderstood: SmallInteger>>plus:
>>> SmallInteger(Object)>>doesNotUnderstand: #plus:
>>>      Receiver: 1
>>>      Arguments and temporary variables:
>>>              aMessage:       plus: 2
>>>              exception:      MessageNotUnderstood: SmallInteger>>plus:
>>>              resumeValue:    nil
>>>      Receiver's instance variables:
>>> 1
>>> UndefinedObject>>DoIt
>>> Compiler>>evaluate:in:to:notifying:ifFail:logged:
>>> Compiler>>evaluate:in:to:notifying:ifFail:
>>> Compiler>>evaluate:in:to:
>>> ZnReadEvalPrintDelegate>>evaluate: in Block: [| result |...
>>> BlockClosure>>on:do:
>>> ZnReadEvalPrintDelegate>>evaluate: in Block: [:out | [| result |...
>>> String class(SequenceableCollection class)>>new:streamContents:
>>>
>>> WARNING: never open this service beyond your local network ! This service 
>>> gives you absolute control over and access to everything in your image. For 
>>> example, the following will kill your image:
>>>
>>> $ curl -X POST -H'Content-Type:text/plain' -d 'Smalltalk quitPrimitive' 
>>> http://localhost:1701/repl
>>>
>>> All this in one class and a handful of methods.
>>>
>>> Enjoy,
>>>
>>> Sven
>>>
>>> PS1: Part of Zinc HTTP Components, in the bleedingEdge version.
>>>
>>> PS2: Of course, basic authentication or HTTPS can be added through simple 
>>> Zn configuration.
>>>
>>> --
>>> Sven Van Caekenberghe
>>> Proudly supporting Pharo
>>> http://pharo.org
>>> http://association.pharo.org
>>> http://consortium.pharo.org
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>



-- 
Best regards,
Igor Stasenko.

Reply via email to