0 votes
in SoSci Survey (dt.) by s171505 (160 points)

Liebes Sosci-Survey Team

Ich habe einen Questionnaire mit drei Complex Span Tasks und einem Change detection Task erstellt. Wenn ich beim Bearbeiten jeden Test ab der jeweiligen Seite abspiele, funktionieren sie alle. Wenn ich jedoch bei Seite 1 anfange und die drei Complex Span Tasks durchmache, zeigt mir erstens die Prozentzahl der ausgefüllten Aufgaben schon um die 90% an (was falsch ist, es sollte erst bei ungefähr 60% sein, wenn man den Change Detection Task beginnt), zweitens funktioniert zwar der Übungsteil des Change Detection Tasks, jedoch nicht die tatsächliche Aufgabe, wobei diese zwei Teile genau gleich aufgebaut sind und im Bearbeitungsmodus auch hintereinander abgespielt richtig funktionieren! Nur eben nicht, wenn der ganze Questionnaire abgespielt wird. Es wird seltsamerweise "There is no question ID in question()." angezeigt. Könnte es sein, dass der "Questionnaire" (also die Testung) für den Server einfach zu lang ist und er dadurch bugt? Insgesamt komme ich auf 311 Pages.

Herzlichen Dank im Voraus für Eure Antwort und freundliche Grüsse!

by SoSci Survey (330k points)
311 Seiten sind schon ziemlich lang ... aber der Fortschritt sollte ganz einfach als Quotient aus der aktuellen Seitennummer und der Anzahl der Seiten berechnet werden.

Aber fangen wir mal einfach an: (1) Sie haben alle Seiten in einem Fragebogen, korrekt? (2) Was zeigt denn die Debug-Information an? Speziell auf der Seite, wo die Fehlermeldung erscheint? Und auf der Seite wo der Fortschritt falsch angezeigt wird? Springt der Fragebogen vielleicht mittels goToPage() o.ä.? (3) Sind Sie sicher, dass eine Person mehr als 300 (!) Seiten durcharbeiten will und wird?

Tipp: Sie können unter "Erhobene Daten" -> "Daten ansehen" frühere Test-Interviews fortsetzen.
by s171505 (160 points)
Liebes Sosci-Team

Danke für die schnelle Antwort. (1) Alle Seiten befinden sich im gleichen Fragebogen. Tatsächlich ist der Quotient bei meinem Fragebogen jedes Mal falsch bei der Durchführung aller Seiten miteinander.. wenn ich auf Seite 44 von 325 bin zeigt es mir schon 35%, was ja schon zu hoch ist. Wenn ich jedoch ab Seite 44 die Testung beginne, dann kommt die richtige Prozentzahl (15%). (2) Ich habe nun ein paar Sachen verändert und nun lädt die gleiche Seite ständig neu anstatt wie eingestellt nach 2 Sekunden zu verschwinden, ohne dass es zur nächsten Seite weitergeht, obwohl bis hierhin alles funktioniert hat. Dieser Schritt funktioniert im loop, und bis dahin hat die Loop auch funktioniert, und auf einmal nicht mehr, was mich darauf schliessen lässt, dass es nicht an meiner Kodierung liegt, oder? Im Debug steht nichts. "Create question CD12", dann als letztes "The following placeholders have been prepared: %remain% = (text) 5000".
(3) Es sind kognitive Tests, daher gibt es nicht 300 Fragen zu beantworten sondern eine Testung durchzuführen, wobei unsere Probanden vor Corona 2 Stunden bei uns im Labor gesessen sind, da denke ich dass 30 Minuten vor dem Computer in Ordnung sind..

Auch wenn ich den Questionnaire fortsetze, stimmt dann zwar die Prozentzahl oben neuerdings, aber es hängt immer noch bei dieser einen Seite.

Liebe Grüsse!
by s171505 (160 points)
Ah! Jetzt habe ich es geschafft auf die nächste Seite zu kommen indem ich oben die Seite eingegeben habe (was schwierig war, da die Seite ständig neu geladen hat), und da steht nun "Adding the entry for pg.stack the data stored in this interview would exceed the limit of 64 KB. The value for pg.stack could therefore not be saved. This may cause errors in the questionnaire, the questionnaire may stop here, for example." Was genau heisst das in diesem Zusammenhang?
Vielen Dank im Voraus für die Antwort.

1 Answer

0 votes
by SoSci Survey (330k points)

Adding the entry for pg.stack the data stored in this interview would exceed the limit of 64 KB

Da haben wir das Problem :)

Höchstwahrscheinlich verwenden Sie nicht nur mehr als 300 Seiten, sondern dies in Verbindung mit setPageOrder() oder loopPage() oder einer ähnlichen Funktion. Wenn Sie dann noch Seiten haben, die keinen Inhalt zeigen (z.B. nur PHP-Code ohne Ausgabe) und daher übersprungen werden, dann führt das zu enorm viel Speicherverbrauch - und u.U. dazu, dass das Interview nicht korrekt fortgeführt werden kann.

Dieser Schritt funktioniert im loop, und bis dahin hat die Loop auch funktioniert

Was genau haben Sie denn im besagten Loop? Vielleicht reicht es schon, den Inhalt einer "leeren" Seite auf die vorherige zu verschieben, sodass keine Seite ohne Ausgabe entsteht.

by s171505 (160 points)
Der Loop besteht aus 5x96 Bildern.. es gibt 5 variablen die in diesem Loop verwendet werden, jedes Mal wird da ein Bild gezeigt, also 5x96 Bilder werden angezeigt, wobei nach 5 Bildern immer gefragt wird, ob die zwei Target Bilder identisch waren oder nicht.
Aber könnte es sein, dass einfach der gespeicherte Datensatz zu lang ist und nicht das Interview an sich? Kann man irgendwie Variablen aus dem Datensatz (z.b. all die "-9" Werte von Bildern die keine Antwort benötigen sondern nur für 2000ms vorgezeigt werden) löschen, damit es Platz schafft für die anderen, wichtigen internen Variablen?
by s171505 (160 points)
Ah habe es ständig mit unset() probiert, aber mit dropValue() funktioniert es... vielleicht sollte es so klappen, wenn ich alle Values die unwichtig sind mal rauslösche!
by s171505 (160 points)
Gibt es irgendeine Möglichkeit einfach alle Daten die "-9" als Value haben zu droppen anstatt das für jede Variable zu machen?
by SoSci Survey (330k points)
> Aber könnte es sein, dass einfach der gespeicherte Datensatz zu lang ist und nicht das Interview an sich?

Nein, die Fehlermeldung bezieht sich ganz klar auf eine Hintergrund-Variable zur Steuerung von Loops und Seitenabfolgen. Allerdings kann es sein, dass Sie mit registerVariable() diesen Hintergrundspeicher noch füllen, sodass sich der Speicherüberlauf ergibt.

> Gibt es irgendeine Möglichkeit einfach alle Daten die "-9" als Value haben zu droppen

Ich bin ziemlich sicher, dass es daran nicht liegt. Und ich habe das System programmiert ;) Mit ein paar tausend Variablen kommt SoSci Survey schon klar. Wenn es nun funktioniert, vorher aber nicht, dann liegt es vermutlich an einer anderen Änderung am Fragebogen.

Aber nochmal mein Hinweis: Kritisch sind in diesem Kontext Sprünge innerhalb von Seitenfolgen und Loops. Wenn Sie also ein goToPage() in einem Loop verwenden, benötigt das übermöglich viel Speicher. Wenn Sie auf einer Seite (evtl. auch abhängig von einer Filterbedingung!) keinen Inhalt zeigen, benötigt das in einem Loop übermäßig viel Speicher.

Wenn es nun funktioniert, prüfen Sie bitte, dass es nicht nur daran liegt, dass jetzt andere Filter greifen als bei früheren Tests.
by s171505 (160 points)
Vielleicht hilft es, meinen Code für diese Aufgabe zu sehen...

Alle CD-, CT- und CE-Fragen sind Bilder, entweder welche wo man nichts antworten muss und das Bild nach 2000ms verschwindet, oder welche wo man Ja/Nein antworten muss.

Ich verstehe nicht, wieso der genau gleiche Code mit nur 18 Durchlaufen funktioniert (im Übungsteil) aber dann mit 96 nicht mehr, obwohl es genau gleich aufgebaut ist. Ausser es liegt eben daran, dass 96 loops zu viele sind.. wobei ich auch probiert habe, die Aufgabe in 3 Stücke zu teilen also je 32 Durchläufe am Stück im loop zu haben und dann in einem nächsten Schritt wieder nochmal 32 etc... aber klappt nicht.


<!-- Page 304 -->
<page ident="CD" intID="728">
<php intID="730"><![CDATA[
$arrCD = array(
0=>array('CD02'),
...
95=>array('CD01')
);
registerVariable($arrCD);

$plusss = array(
0=>array('CD03'),
....
95=>array('CD03')
);
registerVariable($plusss);

$encCD = array(
0=>array('CD05'),
...
95=>array('CT97')
);
registerVariable($encCD);

$plusss2 = array(
0=>array('CD04'),
...
95=>array('CD04')
);
registerVariable($plusss2);

$recCD = array(
0=>array('CD06'),
...
95=>array('CT98')
);
registerVariable($recCD);


$endCD = array(
0=>array('CE01'),
...
95=>array('CE96')
);
registerVariable($endCD);

$solutionCD = array(
'CE01_01' => 1,
...
'CE96_01' => 2
);
registerVariable($solutionCD);

$i = loopToPage('endCD', 96);

$set1 = $plusss[$i];
question($set1[0]);
]]></php>
</page>


<!-- Page 305 -->
<page ident="arrCD" intID="731">
<php intID="732"><![CDATA[
//Seite2 arrow
$i = loopIndex();
$set2 = $arrCD[$i];
question($set2[0]);
]]></php>
</page>


<!-- Page 306 -->
<page ident="encCD" intID="733">
<php intID="743"><![CDATA[
//Seite3 encode
$i = loopIndex();
$set3 = $encCD[$i];
question($set3[0]);
]]></php>
</page>


<!-- Page 307 -->
<page ident="plusplus" intID="744">
<php intID="745"><![CDATA[
//Seite4 plus2
$i = loopIndex();
$set4 = $plusss2[$i];
question($set4[0]);
]]></php>
</page>


<!-- Page 308 -->
<page ident="recCD" intID="746">
<php intID="747"><![CDATA[
//Seite5
$i = loopIndex();
$set5 = $recCD[$i];
question($set5[0]);
]]></php>
</page>


<!-- Page 309 -->
<page ident="endCD" intID="748">
<php intID="749"><![CDATA[
//Seite6
$i = loopIndex();
$set6 = $endCD[$i];
question($set6[0]);
]]></php>
</page>
by SoSci Survey (330k points)
Ich sehe zumindest auf den ersten Blick nichts, was zum Überspringen von Fragen führen dürfte (sofern Sie in den Fragen selbst keine Filterfragen definiert haben).

Dass Sie die langen Arrays mittels registerVariable() speicher, dürfte das Problem allerdings mit-verursachen. Es wäre hier tatsächlich besser, im Karteireiter "PHP-Funktionen" eine Funktion zu definieren, welche die benötigten Arrays (oder jeweils eines davon, was Ihnen lieber ist) mittels Funktion liefert, sodass diese nicht im Interview gespeichert werden müssen.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...