Forum Replies Created
-
AuthorPosts
-
Jeremy
KeymasterHi Alex,
I don’t think there’s anything wrong with your experiment. I suspect that the zip file failed to download for some of your participants. Do you know if those participants were able to hear the audio files after seeing the preloading message? Could it be that those participants in particular all live in a specific region (your zip file is on a US Amazon server, which may very well be inaccessible from Mainland China, for example)
Jeremy
Jeremy
KeymasterYou get this error message because you are attempting to close the content of
newTrial(
twice:, // Wait 1s before moving to the next trial newTimer(6000).start().wait() ) .log( "word" , row.Word ) // Append the value of 'Word' at the end of the results lines newTimer(2000).start().wait() ) .log( "transition" , row.Transition ) // Append the value of 'Word' at the end of the results lines )
The first lone
)
in this code matches the(
of thenewTrial(
above in your code. The next.log
line applies to thatnewTrial(...)
object whose content was just closed with the preceding)
. However, on the next line, you are trying to add yet anothernewTimer
element, even though that line is no longer placed inside the parentheses of anewTrial
: that does not make sense to the script, which for all it knows is inside the parentheses ofTemplate
, but is done with thenewTrial(...)
it has already processed at that point. BecausenewTrial
has already been closed, the next lone)
matches the remaining open(
, which is the one from theTemplate(
above in your code. Accordingly, the last.log
command applies to thatTemplate(...)
object, but there is nolog
command on such objects, only onnewTrial(...)
objects (and on trial-internal elements, but they have a different meaning). Finally, the very last lone)
matches nothing, because at that point in your script there’s no open(
leftYou can see short error messages about those issues in the text editor on your project’s page, if you move your cursor over the red X icons that appear to the left of the line numbers
What you probably want is this:
Template("Word Pair List .csv" , row => newTrial( "experimental-trial" , defaultText.center() // Horizontally center all Text elements automatically , newText("word", row.Word) // Show the text from the 'Word' column .css("font-size", "24pt") // Increase the font size .log() // Reports when the Text is displayed in the results file .print() , newTimer(6000).start().wait() // Give 6s to read the word , getTex("word").remove() // Take the word off the page , newTimer(2000).start().wait() // Wait 2s on the empty page ) .log( "word" , row.Word ) // Append the value of 'Word' at the end of the results lines .log( "transition" , row.Transition ) // Append the value of 'Transition' at the end of the results lines )
Let me know if you have questions
Jeremy
Jeremy
KeymasterHello,
It would help if you could share the demonstration link to a project that exhibits the problem. When I try to complete the beginning of the script with either pieces of code, things run normally
This works:
Template("Word Pair List .csv" , row => newTrial( "experimental-trial" , defaultText.center() , newText("word", row.Word) .css("font-size", "24pt") .log() .print() , newText("transition") .log() .print() , newTimer(2000).start().wait() ) .log( "transition" , row.Transition ) )
and this works too:
Template("Word Pair List .csv" , row =&g; newTrial( "experimental-trial" , defaultText.center() , newText("word", row.Word) .css("font-size", "24pt") .log() .print() , newText("transition") .log() .print() , newTimer(6000).start().wait() ) .log( "word" , row.Word ) )
Here is my mock
Word Pair List .csv
table, for reference:Word,Transition hello,transition1 world,transition2
Jeremy
Jeremy
KeymasterHello,
There is no longer an experiment at the link you gave: you probably created that project when signed off and therefore didn’t save it into your account
I have created a minimal variant of the self-paced reading template to integrate a table of the format you describe (with only 3 mock items though): https://farm.pcibex.net/r/nolGGc/
As described in the tutorial, participants will be assigned a group based on the project’s internal counter, which is incremented only once a submission is received (which is the default behavior). Complete a test run once and take the experiment again to see another group, or use
?withsquare=N
in the URL to override the counter’s valueLet me know if you have questions
Jeremy
Jeremy
KeymasterHi Noelia,
The PCIbex Farm will only let you generate results files with 100k lines max (excluding comments lines) so my recommendation is you estimate how many participants fit in 100k lines, and you download the file and clear the results at those intervals. Just make sure you pause data collection in advance (turn off “published” on your project’s page) so you don’t get new data caught in while deleting results from the farm. Of course you can always not do that and keep collecting data, and use the “only include submissions” option to download your results in multiple batches of less than 100k lines each (maybe refresh the page each time too, if you do that)
The issue with large results files is that, the more lines the PCIbex Farm has in its database, the longer it takes to access it, resulting in longer delays for saving future incoming results and for downloading results files. We have had several crash episodes in the past related to large results files, so we try to encourage users to keep them light by limiting the number of lines logged, downloading the files regularly and deleting them once safely stored on a local device
We won’t initiate deletion of results without asking for consent. However, technical problems might cause data loss, for example if a participant loses their connection while taking your experiment, or if the server crashes or is temporarily down at the moment they send their responses (which, again, is more likely for larger data transactions, because of the memory load they incur)
Jeremy
Jeremy
KeymasterHi Carlos,
I’m just realizing now that, because I always open Chromium in incognito mode, my browser always blocks third-party cookies. When I try the experiment I linked to above, I see that the browser is blocking two third-party cookies. Regardless, the experiment runs smoothly
My questions were meant to be about potential problems with running experiments/opening a webgazer page (eg. this one), not about cookies or the TypeError message specifically. That being said, we’ve established that blocking third-party cookies does not prevent you from taking other experiments, if you were able to take the self-paced reading experiment while 6 third-party cookies were blocked
Jeremy
Jeremy
KeymasterHi,
Does the problem arise for webpages that use webgazer? And does it also happen for other experiments on the PCIbex Farm that do not use the EyeTracker element?
It could have to do with the EyeTracker element executing a
.js
file fetched from a distant site, and for some reason maybe the third-party cookie setting also targets thatJeremy
Jeremy
KeymasterIf you know the default value in advance, you can pass it to the hidden input:
<input name='proficiency_hidden' type='text' id='pfh' style='display:none;' value='5'>
Jeremy
Jeremy
KeymasterCorrect, this is what my workaround accomplishes
NB: the compatibility has to do with how the Ibex Form controller is written, it’s not a general PennController limitation. For example, the PennController Scale element effectively displays an
<input type="range">
element when applied the commandslider
and logs its value just fineJeremy
Jeremy
KeymasterHi,
PennController’s Html element is just a wrapper for Ibex’s Form controller. This controller only detects
<input type="text">
,<textarea>
,<input type="checkbox">
and<input type="radio">
fields (reference)If you really want to use an HTML input element of type range and have its value recorded, you can do this:
<input name="proficiency" min="1" max="9" step="1" type="range" onchange="(function(e){document.querySelector('#pfh').value=e.value;})(this)"> <input name='proficiency_hidden' type='text' id='pfh' style='display:none;'>
Jeremy
Jeremy
KeymasterHi,
The PCIbex Farm does not use third-party cookies, and as far as I can tell WebGazer does not use cookies at all. The PCIbex Farm uses only one session cookie that strictly stores minimally necessary information for navigating the website
I don’t know why the issue was solved in your case by allowing third-party cookies
Jeremy
Jeremy
KeymasterHi,
The experiment runs just fine when I replace webgazer’s js file URL, including the calibration phase: https://farm.pcibex.net/r/TEscrL/
(note that the eye tracker works best on Chrome; it’s been quite laggy on Firefox in my experience, when I was able to make it run)
Feel free to work on a copy of this project
Jeremy
September 20, 2021 at 12:08 pm in reply to: How to add a "come back" button to the practice trial #7290Jeremy
KeymasterHi,
Yes, there is a Ctrl+F function, you access it by pressing… Ctrl+F 😉
(on MacOS, it’s Apple+F, and make sure you have your cursor in the editor—click ‘+’ to open the replace field)
Jeremy
Jeremy
KeymasterHello,
Your logic is good, but you start and wait for all the Timer elements you create by default, so the “stop early” Key element is created only after the “delay” Timer element has ended. Move
newKey("stop early", "FJ").callback( getTimer("delay").stop())
just abovenewTimer("delay", 2000)
and it should work (you don’t need thestart
andwait
commands on the “delay” Timer element—nor on the “break” one, since those are executed by default)Jeremy
September 18, 2021 at 9:31 pm in reply to: How to add a "come back" button to the practice trial #7280Jeremy
KeymasterHi Larissa,
You script works fine when I try it myself: https://farm.pcibex.net/r/vjsHXy/
(I had to make a couple minor adjustments to the images and create a dummy table to make this project run—don’t hesitate to share your own project’s demonstration link in the future so we can see your code in its original environment and test it without making those edits)Lorrainy: your
callback
command should be.callback( jump("pratica1") , end() )
—when I apply this edit to (a copy of) your project, it works as expected: the experiment goes back to “pratica1” as soon as I click the “Voltar” button, I don’t need to click the “Seguir” oneJeremy
-
AuthorPosts