<div dir="ltr">With this command, I was able to take the attached screenshot (screenshot.png, at:C:/Program Files (x86)/Google/Chrome/Application/80.0.3987.163/screenshot.png).  It looks possible to dump DOM as well.  It looks like it takes a screenshot before X_ITE loads, so it may be worth putting in some kind of delay?<div><br></div><div>$ cat chrome.sh<br>"c:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --headless --disable-gpu --screenshot <a href="https://www.coderextreme.net/X3DJSONLD/src/main/html/index.html">https://www.coderextreme.net/X3DJSONLD/src/main/html/index.html</a><br></div><div><br></div><div><div><img src="cid:ii_k8w8l8ic0" alt="screenshot.png" width="538" height="404"><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:58 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">in Bash, the chrome process looks killable, if you try all the possible ways to interrupt a command at the shell (if someone has a reliable key pattern for killing processes in bash, let me know).  Otherwise, use task manager.  (only kill the --headless process, you'll probably be unable to kill the other processes, and killing the --headless one kills the others.<div><br></div><div>I've tried with a couple of sites now.  I've read that you can debug the chrome using node, but haven't tried that yet.<br><div><br></div><div>John</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:47 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">This should work!  I will start trying to run some X3DJSONLD web pages on <a href="https://coderextreme.net" target="_blank">https://coderextreme.net</a><div><br></div><div>I recommend using Command Prompt, but I'd check to see if the chrome process is running.  PowerShell doesn't seem to be working.</div><div><br></div><div>Bash seems to work, but somewhat hard to kill the process.</div><div><br></div><div>"c:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --headless --disable-gpu --remote-debugging-port=9222 <a href="https://www.chromestatus.com" target="_blank">https://www.chromestatus.com</a><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:36 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Here we go, help on running chrome --headless:<div><br></div><div><br></div><div><a href="https://developers.google.com/web/updates/2017/04/headless-chrome" target="_blank">https://developers.google.com/web/updates/2017/04/headless-chrome</a> </div><div><br></div><div>Looks cool.  I'll have to figure out how to run chrome from the command line.</div><div><br></div><div>John <br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:27 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">However, the trends still say PhantomJS is more popular than headless chromium:<div><br></div><div><a href="https://trends.google.com/trends/explore?geo=US&q=%2Fm%2F012vm41z,headless%20chromium" target="_blank">https://trends.google.com/trends/explore?geo=US&q=%2Fm%2F012vm41z,headless%20chromium</a> </div><div><br></div><div>chromium interest appears localized to california. LOL!   PhantomJS interest is more national! <br></div><div><br></div><div>However, headless chrome is much more competitive than PhantomJS, and more distributed than chromium.</div><div><br></div><div><a href="https://trends.google.com/trends/explore?geo=US&q=%2Fm%2F012vm41z,headless%20chrome" target="_blank">https://trends.google.com/trends/explore?geo=US&q=%2Fm%2F012vm41z,headless%20chrome</a> </div><div><br></div><div> I'll see what I can do with chrome.  I am already looking into CEFpython for another project.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:21 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Ah, I was afraid of something like this: 

<a href="https://github.com/ariya/phantomjs/issues/15344" target="_blank">https://github.com/ariya/phantomjs/issues/15344</a>  PhantomJS development is pretty much frozen.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:18 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hmm.  Chromium might work.   Perhaps something like node-webgl would work?<div><br></div><div><a href="https://github.com/creationix/node-webgl" target="_blank">https://github.com/creationix/node-webgl</a> </div><div><br></div><div> <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=617551" target="_blank">https://bugs.chromium.org/p/chromium/issues/detail?id=617551</a><br></div><div><br></div><div>As of two years ago, PhantomJS was popular, followed by headless chrome:</div><div><br></div><div><a href="https://www.keycdn.com/blog/headless-browsers" target="_blank">https://www.keycdn.com/blog/headless-browsers</a> </div><div><br></div><div>I am not sure if either of these support webgl, but will do more searching <br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:07 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Looks like 

<a href="https://github.com/stackgl/headless-gl" target="_blank">https://github.com/stackgl/headless-gl</a> relies on Python 2.7. Further searching is necessary.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 5:02 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Very helpful, thanks.  I will pursue a headless browser for webgl in the near term.<div><br></div><div>John</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2020 at 4:03 PM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">You would need to try it but exporting and then importing or requiring<br>
may work: <a href="https://github.com/create3000/x_ite/blob/master/src/x_ite.js" rel="noreferrer" target="_blank">https://github.com/create3000/x_ite/blob/master/src/x_ite.js</a><br>
is probably the file to work on. Building should be possible to figure<br>
out.<br>
<br>
But x_ite uses browser DOM and of course webgl methods. It may be<br>
possible to provide shims or perhaps somehow disable rendering in the<br>
render loop: <a href="https://github.com/create3000/x_ite/blob/master/src/x_ite/Browser/X3DBrowserContext.js#L248" rel="noreferrer" target="_blank">https://github.com/create3000/x_ite/blob/master/src/x_ite/Browser/X3DBrowserContext.js#L248</a><br>
seems to be what is called each frame.<br>
<br>
-Andreas<br>
<br>
On Sat, Apr 11, 2020 at 2:09 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br>
><br>
> To get an X3D object, would we:<br>
><br>
> X3D = require("x_ite/X3D.js");<br>
><br>
> Then put<br>
><br>
> module.exports = X3D;<br>
><br>
> at the bottom of x_ite/X3D.js?<br>
><br>
> Or should we use something beside require in nodejs?<br>
><br>
> The later seems more reasonable, something similar to load in Nashorn.<br>
><br>
> Or can we use import?<br>
><br>
> John<br>
><br>
> On Sat, Apr 11, 2020 at 1:02 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br>
>><br>
>> So it seems like the only problem with creating node.js External SAI for X_ITE is getting the X3D object/function, and perhaps some things as you mentioned, a node.js DOM package?  One should be able to look at X3DJSONLD for ways to get the xmldom or jsdom module. Or should we proceed assuming a browser will be available (run a headless browser).<br>
>><br>
>> Should I revert the nodejs project to use createNode yet?  And we can proceed with my previous SAI HelloWorld example by getting rid of add and set functions, instead of going down Transform and X3DJSAIL rabbit holes?<br>
>><br>
>> Should I revisit Scripts.js (Script processor) for converting VRMLScript for X3DOM?<br>
>><br>
>> Thanks,<br>
>><br>
>> John<br>
>><br>
>> On Sat, Apr 11, 2020 at 8:40 AM Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> wrote:<br>
>>><br>
>>> Hi John,<br>
>>><br>
>>> x_ite just follows standard SAI, internal or external:<br>
>>><br>
>>> //get Browser<br>
>>> browser=X3D.getBrowser(); //X3D is global defined by x_ite.js<br>
>>> //get current scene<br>
>>> scene=browser.currentScene;<br>
>>> //make shape node<br>
>>> shape=scene.createNode('Shape');<br>
>>> //make box node<br>
>>> box=scene.createNode('Box');<br>
>>> //set geometry field<br>
>>> shape.geometry=box;<br>
>>> //add as root node (for example)<br>
>>> scene.addRootNode(shape);<br>
>>><br>
>>> For me the easiest way to experiment with scripting like this, is to<br>
>>> use the Chrome dev tools console with a simple scene like:<br>
>>> <a href="https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/desert3X_ITE.html" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaPanoramas/desert3X_ITE.html</a><br>
>>> Following the steps will give you a white box visible in the active scene.<br>
>>><br>
>>> x3dom uses the DOM as an interface to the scene. So you create DOM<br>
>>> elements using HTML5 methods and add those to the Scene DOM element.<br>
>>> There may be a way to avoid using the DOM and use internal, SAI like<br>
>>> functions. For example, the javascript domNode._x3dom property gives<br>
>>> you access to fields and methods for a node. But usually it is easiest<br>
>>> and most interoperable on a HTML5 page to use the DOM.<br>
>>><br>
>>> The field names are the same across browser but the internal<br>
>>> representation of field values (as a javascript object) is very<br>
>>> different. So one cannot use the results of SAI x_ite calls directly<br>
>>> with x3dom, or vice versa. It is necesssary to go through encodings.<br>
>>><br>
>>> I do not think X3DJSAIL deals a lot with Browser or ExecutionContext<br>
>>> SAI functions since they are tied to the specific browser but I may be<br>
>>> wrong.<br>
>>><br>
>>> Andreas<br>
>>><br>
>>> On Sat, Apr 11, 2020 at 2:58 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br>
>>> ><br>
>>> > Could Andreas explain how to use createNode in the context of X_ITE SAI?<br>
>>> > I think that createNode may be the one significant thing missing from X3DOM SAI.<br>
>>> > There's an unrelated one in the physics code.<br>
>>> ><br>
>>> > That is, you use createNode to createNodes in SAI, then you use the fields of the returned object.  Are these the same across browsers?<br>
>>> ><br>
>>> > Here's how to get a node from the standard:<br>
>>> ><br>
>>> > Browser.currentScene.createNode('Shape');<br>
>>> ><br>
>>> > Again, there is no createNode in X3DJSAIL to speak of.<br>
>>> ><br>
>>> > Thanks,<br>
>>> ><br>
>>> > John<br>
>>> ><br>
>>> > On Sat, Apr 11, 2020 at 1:24 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br>
>>> >><br>
>>> >> We have 2 versions of  JavaScript server side API, Nashorn and Node, both dependent on X3DJSAIL, and the code looks similar.  However, we do not have a JavaScript native version yet, even with JSweet (it's incomplete).<br>
>>> >><br>
>>> >> I believe that we should pursue an external SAI compatible with X_ITE, since X3DOM already has an external SAI.<br>
>>> >><br>
>>> >> Below is an example of "External" with X_ITE. Note that X3D is required to be defined, and x_ite.js should be loaded before X3D is called.  So how do we do that in node?  This is why I've been suggesting headless browsers!<br>
>>> >><br>
>>> >> ...so...I need to figure out an example of Transform in the standard.  It would seem like the thing to do would be to implement createNode?  Are there any examples of createNode?  Yes, in X_ITE at least.  Do we need to create an execution context to use it?  Yes!<br>
>>> >><br>
>>> >> Is there an X_ITE example of external createNode?<br>
>>> >><br>
>>> >> Yes!<br>
>>> >><br>
>>> >> As far as I can tell there is not a X3DOM version of ECMAScript SAI's createNode.<br>
>>> >><br>
>>> >> So I think we should start with X_ITE as I said before, and try to create an External ECMAScript SAI script (not DOM).<br>
>>> >><br>
>>> >> Do people agree that we should try to create an ECMAScript SAI example from outside X_ITE?<br>
>>> >><br>
>>> >> It appears that we either have to start from X3D(), below.   Can we make X3D() into an external SAI?<br>
>>> >><br>
>>> >> Do we need a browser in nodejs?<br>
>>> >><br>
>>> >> has anyone looked into chrome embedded framework?<br>
>>> >><br>
>>> >> John<br>
>>> >><br>
>>> >><br>
>>> >><br>
>>> >> -----------------------------------------------------------------------------<br>
>>> >> function load_X_ITE_XML(content, selector) {<br>
>>> >>         X3D(function() {<br>
>>> >>                 var browser = X3D.getBrowser(selector);<br>
>>> >>                 browser.replaceWorld(browser.createX3DFromString(content));<br>
>>> >>         }, function() {<br>
>>> >>                 alert("Failed to render XML to X_ITE");<br>
>>> >>         });<br>
>>> >> }<br>
>>> >><br>
>>> >> function load_X_ITE_DOM(element, selector) {<br>
>>> >>         X3D(function() {<br>
>>> >>                 if (typeof X3D.getBrowser !== 'undefined') {<br>
>>> >>                         var browser = X3D.getBrowser(selector);<br>
>>> >>                         if (typeof browser !== 'undefined' && typeof browser.importDocument !== 'undefined') {<br>
>>> >>                                 var importedScene = browser.importDocument(element);<br>
>>> >>                                 browser.replaceWorld(importedScene);<br>
>>> >>                         }<br>
>>> >>                 }<br>
>>> >>         }, function() {<br>
>>> >>                 alert("Failed to render DOM to X_ITE");<br>
>>> >>         });<br>
>>> >> }<br>
>>> >><br>
>>> >> function load_X_ITE_JS(jsobj, selector) {<br>
>>> >>         X3D(function() {<br>
>>> >>                 if (typeof X3D.getBrowser !== 'undefined') {<br>
>>> >>                         var browser = X3D.getBrowser(selector);<br>
>>> >>                         if (typeof browser !== 'undefined' && typeof browser.importJS !== 'undefined') {<br>
>>> >>                                 var importedScene = browser.importJS(jsobj);<br>
>>> >>                                 browser.replaceWorld(importedScene);<br>
>>> >>                         }<br>
>>> >>                 }<br>
>>> >>         }, function() {<br>
>>> >>                 alert("Failed to render JSON to X_ITE");<br>
>>> >>         });<br>
>>> >> }<br>
>>> >> -------------------------------------------------------------------------------------------------------------<br>
>>> >> John<br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> Andreas Plesch<br>
>>> Waltham, MA 02453<br>
<br>
<br>
<br>
-- <br>
Andreas Plesch<br>
Waltham, MA 02453<br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>