On Tue, Dec 21, 2021 at 10:05 AM Ivan V. <[email protected]> wrote:
>
> Thank you, Jacques, for your thoughtful response.
>
> I've been experimenting with php for a few hours now. It's exactly as Linas 
> said, like reading and writing files, completely php native, no addons. I'll 
> probably go like an ajaxing php script that opens a connection, sends a 
> command, reads a response, and closes the connection. Things look promising 
> for now, it is just that little something I'd like to avoid: mandatory 
> sleeping php for 125 milliseconds (on my machine) to give a time for getting 
> the response after sending a command. But I'm out of ideas on how to avoid it.

Ah. But of course it's never as simple as it seems.
-- conventionally, socket-reads are blocking: the call does not return
until there is something to be read,
-- blocking kills interactivity, so usually people do socket i/o is
done in it's own thread.
-- if you don't like threads, then there are async i/o libraries that
try to avoid this,
-- and it rapidly goes downhill from there, because you have to deal
with things that hang, never return, crash, return only partial
messages, and its a general horror show.
-- I've used one async library in my life, the boost c++ async
library, and it is 100% awful.

This is why network programming is challenging.

--linas

p.s. you don't have to close the cogserver socket after one message,
you can keep it open.


>
> - ivan -
>
> uto, 21. pro 2021. u 15:23 Jacques BasaldĂșa <[email protected]> 
> napisao je:
>>
>> Hi Ivan,
>>
>> Maybe, if you use zeroMQ (there is a PHP version, 
>> https://www.php.net/manual/en/book.zmq.php) you can use the sockets just 
>> like Linas is saying.
>>
>> In Python, the actual code would be:
>>
>> ```
>> import zmq
>>
>> context = zmq.Context()
>> socket  = context.socket(zmq.REQ)
>> socket.connect ("tcp://localhost:17001")
>>
>> socket.send ("(+ 2 2)")
>> message = socket.recv()
>> ```
>>
>> That requires the server to listen to the tcp socket connection which is the 
>> transport layer of your telnet connection. Telnet itself would be the 
>> application layer and, as Linas says, is probably not necessary.
>>
>> My 2 cents.
>> Jacques.
>>
>> On Tue, Dec 21, 2021 at 8:23 AM Linas Vepstas <[email protected]> wrote:
>>>
>>> Hi Ivan,
>>>
>>> Some quick remarks about networking.
>>>
>>> -- Using telnet to access the cogserver is wild technology overkill.
>>> Telnet was designed to provide a teletype terminal over the network,
>>> including lots of complex teletype escape sequences. The cogserver
>>> needs exactly zero of that.
>>>
>>> -- the cogserver network interface is extremely low-level. So
>>> low-level, you can't get any lower. It's rock-stupid simple and basic.
>>> You open a socket. A very basic, simple, plain ordinary socket. Then
>>> you read and write characters to it. That's all. That's it. It's not
>>> any harder than opening a file, and reading/writing to that. Uses the
>>> same read/write API that files use. If you know sockets well (and it
>>> seems very few people do) it's about 5-10 lines of code. Or less.
>>> There's absolutely no need for complexity.
>>>
>>> I don't know php well enough, but the pseudocode really should be
>>> ```
>>> sock = open (locahost, 17001)
>>> write (sock, "(+ 2 2)")
>>> read(sock, buffer)
>>> close(sock)
>>> ```
>>> Really little or nothing more than that..
>>>
>>> FWIW, that's my coding philosophy: remove as much complexity as
>>> possible ("but no more"). Kind of everything is guided by that.
>>>
>>> Linas
>>>
>>>
>>> On Mon, Dec 20, 2021 at 6:05 PM Ivan V. <[email protected]> wrote:
>>> >
>>> > I was thinking more in a direction of including some MIT licensed php 
>>> > telnet library. If I'm on the right path about this, then there is no 
>>> > need for installing netcat, "only" php and Apache web server. But from 
>>> > your examples, netcat command prompt seems pretty simple to use. I'm 
>>> > still not sure about php running native programs, especially receiving an 
>>> > output from them, including running the whole app directly from the web.
>>> >
>>> > - ivan -
>>> >
>>> > pon, 20. pro 2021. u 23:22 Linas Vepstas <[email protected]> napisao 
>>> > je:
>>> >>
>>> >> And one more, I hit send too soon.
>>> >>
>>> >> echo -e "scm quiet\n(+ 2 2)\n" |nc -N localhost 17001
>>> >>
>>> >> The "quiet" mode suppresses the printing of the guile prompts.
>>> >> Unfortunately, the first prompt is always sent :-(
>>> >>
>>> >> -- linas
>>> >>
>>> >> On Mon, Dec 20, 2021 at 4:15 PM Linas Vepstas <[email protected]> 
>>> >> wrote:
>>> >> >
>>> >> > Shoot. I wrote the wrong thing.
>>> >> > Try this:
>>> >> >
>>> >> > echo "(+ 2 2)" |nc -N localhost 17001
>>> >> >
>>> >> > The -N flag closes the socket after getting the reply, otherwise it
>>> >> > hangs waiting for more input.
>>> >> > So you'd replace the echo by php print and pipe to command.
>>> >> >
>>> >> > -- Linas
>>> >> >
>>> >> > On Mon, Dec 20, 2021 at 4:10 PM Linas Vepstas <[email protected]> 
>>> >> > wrote:
>>> >> > >
>>> >> > > On Mon, Dec 20, 2021 at 3:39 PM Ivan V. <[email protected]> wrote:
>>> >> > > >
>>> >> > > > Ok, this was fun...
>>> >> > > >
>>> >> > > > I restarted the computer in the meanwhile, deleted the whole 
>>> >> > > > OpenCog, and recloned and rebuilt everything without any problems. 
>>> >> > > > This time I put all the additional assets I needed like cogserver 
>>> >> > > > under `opencog` directory, if that means anything.
>>> >> > >
>>> >> > > You should be able to `git clone` to anywhere  at all.  And after
>>> >> > > building, saying `sudo make install` puts everything under the
>>> >> > > `/usr/local` directory.
>>> >> > >
>>> >> > > My guess is that you had old and incompatible clones:  you would have
>>> >> > > to say `git pull` in all repos, to get a self-consistent version.
>>> >> > >
>>> >> > > > Cogserver is now up and running on port 17001, successfully 
>>> >> > > > communicating to rlwrap telnet. The initial test went fine.
>>> >> > > >
>>> >> > > > Next, the plan is to telnet it from php, and pipe it to html 
>>> >> > > > visualizer, if that's ok.
>>> >> > >
>>> >> > > probably the simplest way to do this is by wrapping php around 
>>> >> > > netcat.
>>> >> > > Warning, there are two incompatible versions of netcat you can
>>> >> > > install. They are *almost* compatible, but not quite; one needs an
>>> >> > > extra flag that the other doesn't, else it hangs up too soon.
>>> >> > >
>>> >> > > I have the bsd version installed the package is `netcat-openbsd`
>>> >> > >
>>> >> > > Use it like so: `nc localhost 17001 (+ 2 2)`  or `nc localhost 17001
>>> >> > > (cog-prt-atomspace)` and so on.
>>> >> > >
>>> >> > > > Wish me luck :)
>>> >> > >
>>> >> > > Good luck!  and Merry Christmas, too!
>>> >> > >
>>> >> > > -- linas
>>> >> > >
>>> >> > > >
>>> >> > > > - ivan -
>>> >> > > >
>>> >> > > > pon, 20. pro 2021. u 20:00 Linas Vepstas <[email protected]> 
>>> >> > > > napisao je:
>>> >> > > >>
>>> >> > > >> On Sun, Dec 19, 2021 at 2:11 PM Ivan V. <[email protected]> 
>>> >> > > >> wrote:
>>> >> > > >> >
>>> >> > > >> > Hi Linas and others,
>>> >> > > >> >
>>> >> > > >> > Sorry for the delay, I've been busy with my other projects. Now 
>>> >> > > >> > I tried to install OpenCog, made through several make steps 
>>> >> > > >> > until my machine started to hang. Tried several times, it 
>>> >> > > >> > always hangs on the same build step. I guess this is a penalty 
>>> >> > > >> > for having only 4GB on my machine, right?
>>> >> > > >>
>>> >> > > >> It builds just fine on my six-year-old 1GB laptop (which cost $200
>>> >> > > >> when new, so low end from the get-go.).  I can even browse the web
>>> >> > > >> while it's building.
>>> >> > > >>
>>> >> > > >> Open a bug report. describe the problem.
>>> >> > > >>
>>> >> > > >> > And then I tried another option: I installed OpenCog from here: 
>>> >> > > >> > `https://github.com/opencog/docker`. I tried to follow 
>>> >> > > >> > `README.md` instructions, ran `./docker-build.sh -a` (the 
>>> >> > > >> > script successfully completed), but then I got stuck starting 
>>> >> > > >> > cogserver because the `cogserver/build/` folder is empty.
>>> >> > > >>
>>> >> > > >> The docker containers are possibly stale.
>>> >> > > >>
>>> >> > > >> --linas
>>> >> > > >>
>>> >> > > >> --
>>> >> > > >> You received this message because you are subscribed to the 
>>> >> > > >> Google Groups "opencog" group.
>>> >> > > >> To unsubscribe from this group and stop receiving emails from it, 
>>> >> > > >> send an email to [email protected].
>>> >> > > >> To view this discussion on the web visit 
>>> >> > > >> https://groups.google.com/d/msgid/opencog/CAHrUA34a2O624WCfk821t3wqUEYeg0WM%2B571AOKxGG2cCUB_xA%40mail.gmail.com.
>>> >> > > >
>>> >> > > > --
>>> >> > > > You received this message because you are subscribed to the Google 
>>> >> > > > Groups "opencog" group.
>>> >> > > > To unsubscribe from this group and stop receiving emails from it, 
>>> >> > > > send an email to [email protected].
>>> >> > > > To view this discussion on the web visit 
>>> >> > > > https://groups.google.com/d/msgid/opencog/CAB5%3Dj6WYVbV14e4xZPWYJm-iEnzNdi21YXQK%2BbmWRa5f%2B29j4w%40mail.gmail.com.
>>> >> > >
>>> >> > >
>>> >> > >
>>> >> > > --
>>> >> > > Patrick: Are they laughing at us?
>>> >> > > Sponge Bob: No, Patrick, they are laughing next to us.
>>> >> >
>>> >> >
>>> >> >
>>> >> > --
>>> >> > Patrick: Are they laughing at us?
>>> >> > Sponge Bob: No, Patrick, they are laughing next to us.
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Patrick: Are they laughing at us?
>>> >> Sponge Bob: No, Patrick, they are laughing next to us.
>>> >>
>>> >> --
>>> >> You received this message because you are subscribed to the Google 
>>> >> Groups "opencog" group.
>>> >> To unsubscribe from this group and stop receiving emails from it, send 
>>> >> an email to [email protected].
>>> >> To view this discussion on the web visit 
>>> >> https://groups.google.com/d/msgid/opencog/CAHrUA35jXYy0AgLtum%3DvynpN%3DjvTH0r%2Bv5NPnBWncMVAxaKjtw%40mail.gmail.com.
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google Groups 
>>> > "opencog" group.
>>> > To unsubscribe from this group and stop receiving emails from it, send an 
>>> > email to [email protected].
>>> > To view this discussion on the web visit 
>>> > https://groups.google.com/d/msgid/opencog/CAB5%3Dj6XaSAiommr7aLKHs880h7G_yEY0Nx2QKTismCoZRzw9nw%40mail.gmail.com.
>>>
>>>
>>>
>>> --
>>> Patrick: Are they laughing at us?
>>> Sponge Bob: No, Patrick, they are laughing next to us.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "opencog" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/opencog/CAHrUA37G6CUQrdHQpwMS%3DkmM3StUZNCrUrmsVohr-sd51ZSsgA%40mail.gmail.com.
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "opencog" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/opencog/CA%2B_pmb6BgsVcp%2B9HuYY%3Dmm-%2BwNjmf7aX7aBLK1ZJ1R%3DxwZpe-Q%40mail.gmail.com.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "opencog" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/opencog/CAB5%3Dj6XmuXC81OSgOBfa0-VWJ4TWKi80biNHbJ%3DBwa%3D1SXyYQQ%40mail.gmail.com.



-- 
Patrick: Are they laughing at us?
Sponge Bob: No, Patrick, they are laughing next to us.

-- 
You received this message because you are subscribed to the Google Groups 
"opencog" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/opencog/CAHrUA34AdmAmWMxNL4dXD4ReNgcrybOiF8JXQgv2Aa7r_On09Q%40mail.gmail.com.

Reply via email to