I finally got some time to move further with the OpenCog Atomspace visualisation project. Front-end is more or less finished. It includes:
- read - print - loop (RPL without Eval in the middle) - remembering history of passed input - reporting errors on invalid s-expressions - visualizing valid s-expressions The link to try it is the same: http://ocog.atspace.cc/atomizer/ What remains is the juicy part - connecting eval and print to OpenCog server REPL. Hopefully soon. pet, 8. lis 2021. u 01:15 Linas Vepstas <[email protected]> napisao je: > On Thu, Oct 7, 2021 at 3:41 PM Ivan V. <[email protected]> wrote: > > > > Hi linas, > > > > Nice to see someone having fun with this thingy :) > > Yeah. I don't know why people ignore this mailing list these days. > Maybe it's covid. > > > Thousands of nodes might seem a bit of overkill for this system, > especially considering the fact that this system is a brute s-expression > listing machine, without caring what nodes stand for the same one. I > believe the system wouldn't choke on that, but navigating them would be a > Hell of a task. > > Yep. and that is exactly what the atomspace does! > > > However, there is one trick that might render all this usable: what if > there was a query system (already a part of AtomSpace) to narrow down only > the nodes we are looking for. > > Yep! > > > For example, a command `display some-query` could intercept an output > and pipe such an output to the visualisation module, showing only atoms of > our interest, not the entire Atomspace. > > Yep! There is no need to "intercept it". It is given to you, > directly. The actual syntax would be > (display (cog-execute! (MeetLink ... the actual query))) > and since display doesn't print a newline, use formated print instead: > > (format #t "And the answer to the query is ~A\n" (cog-execute! > (MeetLink ... the actual query))) > > > I was also thinking of advancing REPL to editing sessions for Atomspace > scripts. > > Well, the existing repls allow you to edit to your hearts content. So > I guess you mean a new web-page repl? > > > Such session would first check if Atomspace is empty (eg. no one is > currently using it). > > well, in typical use, you don't start empty, but either attach to some > existing database, or dump a bunch of atoms in. > > > Then the telnet would populate Atomspace from the editing session, with > intercepting `display` commands, concatenating them ino one s-expression > and piping it out to the visualizer. Lastly, after ending the script, > telnet would wipe out the entire Atomspace to prepare it for the next > visualization cycle. > > Well, wiping it out would be a bit much... > > However, there is one weird trick ... > > In your local atomspace, you can do this: > > (cog-open (CogStorageNode "cog://example.com:17001")) > (fetch-atom (Concept "foo")) ; this will get all the (truth) values ... > (store-atom (Concept "bar")) ; this will store all the values > (fetch-incoming-set (Concept "foo")) ; get every Link that foo is inside > of ... > > so if example.com is running a cogserver on port 17001, then you can > have access to it. and copy atoms between it and your local atomspace. > Just don't trash it's contents, the owner might not be happy. > > --linas > > > > > I believe this would do the trick for reasonably small scripts, just to > make things simpler for newcomers, so they can play with smaller scripts. > > > > But even if this would work, multi-user access is concerning me as a > quirk I would like to avoid. Guaranteed empty Atomspace between display > sessions would somehow do a job, but it does not scale very well. It would > be awesome if there would be some on-demand allocating of a namespace > specific to individual users connecting to cogserver. > > > > I agree that implementing editing sessions in this way (with keeping > current Atomspace state empty) sounds somewhat strange. Are there other > options for doing this from telnet? > > > > All well, > > Ivan > > > > čet, 7. lis 2021. u 21:52 Linas Vepstas <[email protected]> > napisao je: > >> > >> Hi Ivan! > >> > >> Well that was fun! > >> > >> There are two REPL loops (four, actually) the guile/scheme repl loop; > >> the guile/scheme repl loop provided by the cogserver, which is almost > >> the same except it runs over telnet. Then there's the python repl, > >> and the cogserver provides a telnet python repl, too. The telnet > >> python REPL is almost the same as regular python, but not quite, it > >> hand;es whitespace differently. Python is to blame for that: > >> whitespace rules for repls are different from whitespace rules on > >> files. Whatever. At any rate, these are all inter-operable: atoms > >> created in one show up in the other. > >> > >> An interesting visualization is this one: > >> (List (Word "this") (Word "that")) > >> (List (Word "this") (Word "thing")) > >> (List (Word "this") (Word "cat")) > >> (List (Word "that") (Word "cat")) > >> ... > >> So, if you start at (Word "this") and move up, you'll find a thousand > >> List's. Pick one (say, "cat") move down and then back up, you'll find > >> a thousand Lists that "cat" is in. Bouncing around in this network > >> can be entertaining, provided the pairs are meaningful. > >> > >> The point here is that the s-expression (Word "that") is globally > >> unique: it is one and the same, everywhere. > >> > >> --linas > >> > >> On Tue, Oct 5, 2021 at 2:43 AM Ivan V. <[email protected]> wrote: > >> > > >> > Hi Linas and others :) > >> > > >> > Diving deeper into OpenCog, I learned some basics of interfacing with > Atomspace. I decided to delay the initial idea of visualizing the inference > process, and to simply focus my attention to s-expressions which is > atomspace based on. See my latest experiment with s-expressions at: > >> > > >> > http://ocog.atspace.cc/atomizer/ > >> > > >> > The experiment simply parses provided s-expression string, breaks it > down to its elements recursively, and shows it on the screen to navigate > by. It isn't a super-king of usability, but it may look fancy to beginners, > and attractive enough to show off to someone how the bare Atomspace concept > looks like. > >> > > >> > If bundled with an appropriate opencog input/output system like REPL > or something, it may form a usable whole, at least to beginners who learn > basics of interacting with Atomspace. > >> > > >> > Finally, there may be a chance I stitch it to OpenCog. If I opt out > for this, I think I'll be using telnet to connect to cogserver. I may want > to make read-eval-print-loop accessible from web browsers, updating the > visualization of the current Atomspace state on each cycle. There already > exist some telnet libraries to do this with php, so I believe this may be a > simpler solution than the proposed wrapping atomspace interface for use > with js. Maybe not as flexible as Linas' proposition, but simpler. > >> > > >> > Be well, > >> > Ivan > >> > > >> > > >> > pet, 24. ruj 2021. u 06:07 Ivan V. <[email protected]> napisao je: > >> >> > >> >> Great, I believe it would ease things a lot. Let me notify you when > I'm ready to do some more serious coding. > >> >> > >> >> Ivan > >> >> > >> >> pet, 24. ruj 2021. u 04:48 Linas Vepstas <[email protected]> > napisao je: > >> >>> > >> >>> Hi Ivan, > >> >>> > >> >>> On Thu, Sep 23, 2021 at 10:51 AM Ivan V. <[email protected]> > wrote: > >> >>> > > >> >>> > Thank you, I'll take some time to think about it if you don't > mind. > >> >>> > >> >>> Heh. Too late! Rather than nagging you or anyone else about this, I > >> >>> thought about it a bit, and realized that I could hack up a basic > >> >>> solution in a day. So I did. If you grabe the very latest atomspace > >> >>> and cogserver code, then you get a simple network API to the > >> >>> atomspace, here. The README explains all: > >> >>> > >> >>> > https://github.com/opencog/atomspace/blob/master/opencog/persist/json/README.md > >> >>> > >> >>> The JSON is delivered as a string, over the network. You still have > to > >> >>> do something with it. If/when you want to create javascript, > node.js, > >> >>> emscripten, or whatever kind of interfaces to it, let me know. I > just > >> >>> now create a new, empty git repo at > >> >>> https://github.com/opencog/atomspace-js > >> >>> > >> >>> Anyone who is interested should just ask, I'll provide write access > to > >> >>> that repo. > >> >>> > >> >>> --linas > >> >>> > >> >>> > >> >>> > >> >>> > > >> >>> > čet, 23. ruj 2021. u 17:34 Linas Vepstas <[email protected]> > napisao je: > >> >>> >> > >> >>> >> On Thu, Sep 23, 2021 at 3:15 AM Ivan V. <[email protected]> > wrote: > >> >>> >> > > >> >>> >> > Just a quick question while we're at it, if I may: what is the > best way to communicate between web browser and atomspace? > >> >>> >> > >> >>> >> Currently, none. The "atomspace explorer" used an atomspace > server > >> >>> >> that was weird, slow, mis-designed, old and incomplete... > >> >>> >> > >> >>> >> Let me take you on a trip. > >> >>> >> > >> >>> >> What is really needed are some javascript bindings that talk to > the > >> >>> >> cogserver. It is very easy, trivial, even, to talk to the > cogserver, > >> >>> >> and get a reply. The hard part is to convert the results into > whatever > >> >>> >> javascript you want -- we do not have any existing layer for > that. > >> >>> >> Creating this layer would be an excellent project. > >> >>> >> > >> >>> >> Thus, for example: > >> >>> >> -- use javascript to open a socket to 17001 > >> >>> >> -- send command over that socket; for example, > >> >>> >> `(cog-value (Concept "foo") (Predicate "some key"))` > >> >>> >> -- read the result, for example > >> >>> >> `(FloatValue 1.000000 2.000000 3.00000)` > >> >>> >> -- close the socket, or re-use it. > >> >>> >> > >> >>> >> Great! But how do you convert `(FloatValue 1.000000 2.000000 > >> >>> >> 3.00000)` into what you want? (What do you want?) > >> >>> >> > >> >>> >> Now, before you get on that airplane, and start writing code to > use > >> >>> >> javascript to talk to the cogserver, consider this: > >> >>> >> > >> >>> >> If you wrote that code, you would have to cache the results > locally, > >> >>> >> in javascript. That is, you would have to create a local, > in-browser > >> >>> >> copy of (Concept "foo") and (Predicate "some key") and remember > that > >> >>> >> (FloatValue 1 2 3) is attached to it. In other words, you would > be > >> >>> >> re-inventing the atomspace, locally, running inside the browser. > Good > >> >>> >> god, why? We already have an atomspace, why reinvent a > >> >>> >> browser-specific one? (Because this is what things like the > >> >>> >> atomspace-explorer were doing.) > >> >>> >> > >> >>> >> The correct solution is this: create javascript bindings for the > >> >>> >> atomspace. That's it, end of story. Want to talk to some remote > >> >>> >> AtomSpace? Just use the CogStorageNode! That's it, you're done. > >> >>> >> > >> >>> >> I'll stop writing the email here .. because there is nothing > more to > >> >>> >> say! People who use web browsers need javascript. If we had > javascript > >> >>> >> binding to the atomspace, you would have it in your browser. > >> >>> >> > >> >>> >> If you want to create these bindings, I'l create a github repo > under > >> >>> >> the opencog project, give you full write permission, and you can > do > >> >>> >> whatever in there. I'm sure many people could use them. > >> >>> >> > >> >>> >> --linas > >> >>> >> > >> >>> >> > > >> >>> >> > čet, 23. ruj 2021. u 08:24 Linas Vepstas < > [email protected]> napisao je: > >> >>> >> >> > >> >>> >> >> On Thu, Sep 23, 2021 at 12:44 AM Ivan V. < > [email protected]> wrote: > >> >>> >> >> > > >> >>> >> >> > As for the visualization tool, I'll have more time in a few > weeks when I settle some of my obligations. > >> >>> >> >> > >> >>> >> >> You don't have to make promises! There is no intent to > guilt-trip you > >> >>> >> >> into doing something. > >> >>> >> >> > >> >>> >> >> > Then, a kind of OpenCog debugger (or IDE) is what I have on > my mind. > >> >>> >> >> > >> >>> >> >> In the end, whatever you create has to be for yourself, for > your own > >> >>> >> >> entertainment. If it turns out to be useful for others, that > would be > >> >>> >> >> wonderful, but, as this long conversation has shown, there's > no > >> >>> >> >> general vision of what anyone wants. Different people want > different > >> >>> >> >> things; what's useful for one is useless for another. > >> >>> >> >> > >> >>> >> >> > It would be something like an atomspace editor > communicating to cogserver, showing inference trees related to edited > fragments. Nothing too fancy, no dozens of options, just a simple atomspace > expressions writing aid, as minimalistic as it can get, with an editor on > the left and related inference trees on the right side. > >> >>> >> >> > >> >>> >> >> Two part reply. (1) inference trees are very specific to the > PLN > >> >>> >> >> backward chainer, and have almost nothing to do with the > atomspace. > >> >>> >> >> (other than that they are kept in the atomspace ... for a > while .. > >> >>> >> >> until they are deleted. Nil can supply those if that is what > you > >> >>> >> >> really want.) > >> >>> >> >> > >> >>> >> >> (2) Don't worry about the cogserver. Don't use the cogserver. > Just > >> >>> >> >> work with the atomspace directly. Why? (a) you don't need the > >> >>> >> >> cogserver to get things done. (b) if you absolutely must have > a > >> >>> >> >> network connection to some remote AtomSpace, use the > CogStorageNode > >> >>> >> >> -- it will automatically open a network connection to a remote > >> >>> >> >> AtomSpace, and it will automatically trade atoms with it, > bringing > >> >>> >> >> them over to your local AtomSpace. You just have to specify > which > >> >>> >> >> atoms. If you are not sure which atoms, you can easily run a > query on > >> >>> >> >> the remote AtomSpace. > >> >>> >> >> > >> >>> >> >> Documentation: > >> >>> >> >> https://wiki.opencog.org/w/CogStorageNode > >> >>> >> >> > >> >>> >> >> Demos: > >> >>> >> >> https://github.com/opencog/atomspace-cog/tree/master/examples > >> >>> >> >> > >> >>> >> >> -- linas > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> -- > >> >>> >> >> 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/CAHrUA34zZ%2BqFdgycq8PQjp1BvikD0b1Y8HSRSebMMxCfeF5p8Q%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%3Dj6UkUirdXC9h7fmgzHvaZzz46coGYTUAU2TdqigTEXX4xw%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/CAHrUA35-K8V6T3V%2BM7nLSze0NdPhcuk9txBNAoMAd1XJ%3DGekEw%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%3Dj6Vn5b1NdXa1ptQEtEMXES%3D9H23Ry6J3_X4f%3DAraf%2BEybg%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/CAHrUA36dV20DGvtE2hTP94q48-f5BrtBjRi3h%2Bv5U6hYhr3MsQ%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%3Dj6WS5S0vLzNRTpBP8BSh9N6XhDmd0wxyXgES4fs2iQjHvw%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/CAHrUA35rxQTu%2BNG7-k0h791LruXCLksyUCju-YgzGTC4eaQMOw%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%3Dj6V2EFAbtSA-DaLgA9Kod85%3D6yMwVgz1xWoV49QQ0QGAQg%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/CAHrUA37UtMHuv-UvU3vUqnCqSuFf0Kvx3%2Be0RHPctdwrJ26aLw%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%3Dj6W1erdofxrQQNcRRSN6zVYrHMfRovy2CWOZ_c2JiF6mkw%40mail.gmail.com.
