Problem with Inquisit batch in offline mode on Android tablet


Author
Message
AKrishna
AKrishna
Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)
Group: Forum Members
Posts: 88, Visits: 267
Hi all,

we're currently trying to run a battery of tests (written as a simple Inquisit batch collecting multiple script files) on tablets in offline mode (link: https://mili2nd.eu/vgbc) and running into some issues on Android, specifically on Samsung SM-T590 running Android 10 (Build QP1A.190711.020.T590XXU3CVG5) with Inquisit 6.6.1.

When I run the study on the tablet using the link in online mode, the study runs normally. I then set offline availability in the Tests tab and wait until the checkmark appears. Next, I disconnect from the WLAN and start the test. However, after completing the first script file called by the batch, Inquisit quits ("...encountered an error"). The Logs in the app show the following (omitting the first few columns):

InquisitPlayer   DataUploads   Not Started   Network Unreachable
InquisitPlayer   Finished Test    Failed   Script='WLLP_Norming_Test'   Account=4351    ScriptPath=https://scripts.millisecond.eu/[REDACTED]/wllp_norming_test/batch_alleaufgaben.iqx   HomeServer=eu.mili2nd.net   DataUrl=''     [... several expected parameters, such as session id and monkey status]
ExecutionError   Network Error: 'Host eu.mili2nd.net not found' in bool inquisit::Path::postFileHttp(const QUrl &, QByteArray &, const QString &, cnost QByteArray &, const QSTring &, const QStringList &)

I can try to extract the log as text and upload it, but it's not so simple, so I thought I would post the relevant lines as a start.

Thanks for any help!


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
AKrishna - 1/19/2023
Hi all,

we're currently trying to run a battery of tests (written as a simple Inquisit batch collecting multiple script files) on tablets in offline mode (link: https://mili2nd.eu/vgbc) and running into some issues on Android, specifically on Samsung SM-T590 running Android 10 (Build QP1A.190711.020.T590XXU3CVG5) with Inquisit 6.6.1.

When I run the study on the tablet using the link in online mode, the study runs normally. I then set offline availability in the Tests tab and wait until the checkmark appears. Next, I disconnect from the WLAN and start the test. However, after completing the first script file called by the batch, Inquisit quits ("...encountered an error"). The Logs in the app show the following (omitting the first few columns):

InquisitPlayer   DataUploads   Not Started   Network Unreachable
InquisitPlayer   Finished Test    Failed   Script='WLLP_Norming_Test'   Account=4351    ScriptPath=https://scripts.millisecond.eu/[REDACTED]/wllp_norming_test/batch_alleaufgaben.iqx   HomeServer=eu.mili2nd.net   DataUrl=''     [... several expected parameters, such as session id and monkey status]
ExecutionError   Network Error: 'Host eu.mili2nd.net not found' in bool inquisit::Path::postFileHttp(const QUrl &, QByteArray &, const QString &, cnost QByteArray &, const QSTring &, const QStringList &)

I can try to extract the log as text and upload it, but it's not so simple, so I thought I would post the relevant lines as a start.

Thanks for any help!


Alright, this would seem to come down to a character encoding issue / weird bug in the unzip library Inquisit uses to extract IQZIP files (which are just ZIP files). When you put an experiment into offline mode, the app downloads an IQZIP of all files uploaded to the web experiment. It then extracts the files from the IQZIP and stores them on the device.

Now, various of your files have things like umlauts ("ä", "ö". "ü") or ß in their file names. Turns out, the unzip routine manages to mangle these characters when extracting the files. I.e. zierkürbis.png becomes zierk�rbis.png or something like that. When a script that needs the file zierkürbis.png is parsed, it can't find the file stored locally, so it fails (and since the device is offline, it can't fetch the file from the web either).

We'll get that fixed, obviously, though I'm not yet sure if there's something we can do server-side with respect to the IQZIP generation that might get the unzip library to properly recognize the characters.

The immediate, if somewhat tedious, workaround would be to revise the scripts and file names to avoid umlauts and the like, i.e. replace "ä" with "ae", "ß" with "ss" and so forth. Then things should definitely work in offline mode as well.

Edited Last Year by Dave
AKrishna
AKrishna
Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)
Group: Forum Members
Posts: 88, Visits: 267
Dave - 1/19/2023
AKrishna - 1/19/2023
Hi all,

we're currently trying to run a battery of tests (written as a simple Inquisit batch collecting multiple script files) on tablets in offline mode (link: https://mili2nd.eu/vgbc) and running into some issues on Android, specifically on Samsung SM-T590 running Android 10 (Build QP1A.190711.020.T590XXU3CVG5) with Inquisit 6.6.1.

When I run the study on the tablet using the link in online mode, the study runs normally. I then set offline availability in the Tests tab and wait until the checkmark appears. Next, I disconnect from the WLAN and start the test. However, after completing the first script file called by the batch, Inquisit quits ("...encountered an error"). The Logs in the app show the following (omitting the first few columns):

InquisitPlayer   DataUploads   Not Started   Network Unreachable
InquisitPlayer   Finished Test    Failed   Script='WLLP_Norming_Test'   Account=4351    ScriptPath=https://scripts.millisecond.eu/[REDACTED]/wllp_norming_test/batch_alleaufgaben.iqx   HomeServer=eu.mili2nd.net   DataUrl=''     [... several expected parameters, such as session id and monkey status]
ExecutionError   Network Error: 'Host eu.mili2nd.net not found' in bool inquisit::Path::postFileHttp(const QUrl &, QByteArray &, const QString &, cnost QByteArray &, const QSTring &, const QStringList &)

I can try to extract the log as text and upload it, but it's not so simple, so I thought I would post the relevant lines as a start.

Thanks for any help!


Alright, this would seem to come down to a character encoding issue / weird bug in the unzip library Inquisit uses to extract IQZIP files (which are just ZIP files). When you put an experiment into offline mode, the app downloads an IQZIP of all files uploaded to the web experiment. It then extracts the files from the IQZIP and stores them on the device.

Now, various of your files have things like umlauts ("ä", "ö". "ü") or ß in their file names. Turns out, the unzip routine manages to mangle these characters when extracting the files. I.e. zierkürbis.png becomes zierk�rbis.png or something like that. When a script that needs the file zierkürbis.png is parsed, it can't find the file stored locally, so it fails (and since the device is offline, it can't fetch the file from the web either).

We'll get that fixed, obviously, though I'm not yet sure if there's something we can do server-side with respect to the IQZIP generation that might get the unzip library to properly recognize the characters.

The immediate, if somewhat tedious, workaroun would be to revise the scripts and file names to avoid umlauts and the like, i.e. replace "ä" with "ae", "ß" with "ss" and so forth. Then things should definitely work in offline mode as well.

Thanks for the quick response. I'll test and see - if everything works, I'll mark your post as the answer! :
AKrishna
AKrishna
Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)Distinguished Member (3.1K reputation)
Group: Forum Members
Posts: 88, Visits: 267
Dave - 1/19/2023
AKrishna - 1/19/2023
Hi all,

we're currently trying to run a battery of tests (written as a simple Inquisit batch collecting multiple script files) on tablets in offline mode (link: https://mili2nd.eu/vgbc) and running into some issues on Android, specifically on Samsung SM-T590 running Android 10 (Build QP1A.190711.020.T590XXU3CVG5) with Inquisit 6.6.1.

When I run the study on the tablet using the link in online mode, the study runs normally. I then set offline availability in the Tests tab and wait until the checkmark appears. Next, I disconnect from the WLAN and start the test. However, after completing the first script file called by the batch, Inquisit quits ("...encountered an error"). The Logs in the app show the following (omitting the first few columns):

InquisitPlayer   DataUploads   Not Started   Network Unreachable
InquisitPlayer   Finished Test    Failed   Script='WLLP_Norming_Test'   Account=4351    ScriptPath=https://scripts.millisecond.eu/[REDACTED]/wllp_norming_test/batch_alleaufgaben.iqx   HomeServer=eu.mili2nd.net   DataUrl=''     [... several expected parameters, such as session id and monkey status]
ExecutionError   Network Error: 'Host eu.mili2nd.net not found' in bool inquisit::Path::postFileHttp(const QUrl &, QByteArray &, const QString &, cnost QByteArray &, const QSTring &, const QStringList &)

I can try to extract the log as text and upload it, but it's not so simple, so I thought I would post the relevant lines as a start.

Thanks for any help!


Alright, this would seem to come down to a character encoding issue / weird bug in the unzip library Inquisit uses to extract IQZIP files (which are just ZIP files). When you put an experiment into offline mode, the app downloads an IQZIP of all files uploaded to the web experiment. It then extracts the files from the IQZIP and stores them on the device.

Now, various of your files have things like umlauts ("ä", "ö". "ü") or ß in their file names. Turns out, the unzip routine manages to mangle these characters when extracting the files. I.e. zierkürbis.png becomes zierk�rbis.png or something like that. When a script that needs the file zierkürbis.png is parsed, it can't find the file stored locally, so it fails (and since the device is offline, it can't fetch the file from the web either).

We'll get that fixed, obviously, though I'm not yet sure if there's something we can do server-side with respect to the IQZIP generation that might get the unzip library to properly recognize the characters.

The immediate, if somewhat tedious, workaroun would be to revise the scripts and file names to avoid umlauts and the like, i.e. replace "ä" with "ae", "ß" with "ss" and so forth. Then things should definitely work in offline mode as well.

That worked. For anyone who runs into this problem in future and needs to rename a bunch of files, try this in PowerShell:

Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ä','ae' }
Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ö','oe' }
Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ü','ue' }
Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ß','ss' }


Combining this with a quick search + replace routine in Inquisit (Ctrl + H) for the corresponding stimulus names is a fast workaround while this issue persists.

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
AKrishna - 1/26/2023
Dave - 1/19/2023
AKrishna - 1/19/2023
Hi all,

we're currently trying to run a battery of tests (written as a simple Inquisit batch collecting multiple script files) on tablets in offline mode (link: https://mili2nd.eu/vgbc) and running into some issues on Android, specifically on Samsung SM-T590 running Android 10 (Build QP1A.190711.020.T590XXU3CVG5) with Inquisit 6.6.1.

When I run the study on the tablet using the link in online mode, the study runs normally. I then set offline availability in the Tests tab and wait until the checkmark appears. Next, I disconnect from the WLAN and start the test. However, after completing the first script file called by the batch, Inquisit quits ("...encountered an error"). The Logs in the app show the following (omitting the first few columns):

InquisitPlayer   DataUploads   Not Started   Network Unreachable
InquisitPlayer   Finished Test    Failed   Script='WLLP_Norming_Test'   Account=4351    ScriptPath=https://scripts.millisecond.eu/[REDACTED]/wllp_norming_test/batch_alleaufgaben.iqx   HomeServer=eu.mili2nd.net   DataUrl=''     [... several expected parameters, such as session id and monkey status]
ExecutionError   Network Error: 'Host eu.mili2nd.net not found' in bool inquisit::Path::postFileHttp(const QUrl &, QByteArray &, const QString &, cnost QByteArray &, const QSTring &, const QStringList &)

I can try to extract the log as text and upload it, but it's not so simple, so I thought I would post the relevant lines as a start.

Thanks for any help!


Alright, this would seem to come down to a character encoding issue / weird bug in the unzip library Inquisit uses to extract IQZIP files (which are just ZIP files). When you put an experiment into offline mode, the app downloads an IQZIP of all files uploaded to the web experiment. It then extracts the files from the IQZIP and stores them on the device.

Now, various of your files have things like umlauts ("ä", "ö". "ü") or ß in their file names. Turns out, the unzip routine manages to mangle these characters when extracting the files. I.e. zierkürbis.png becomes zierk�rbis.png or something like that. When a script that needs the file zierkürbis.png is parsed, it can't find the file stored locally, so it fails (and since the device is offline, it can't fetch the file from the web either).

We'll get that fixed, obviously, though I'm not yet sure if there's something we can do server-side with respect to the IQZIP generation that might get the unzip library to properly recognize the characters.

The immediate, if somewhat tedious, workaroun would be to revise the scripts and file names to avoid umlauts and the like, i.e. replace "ä" with "ae", "ß" with "ss" and so forth. Then things should definitely work in offline mode as well.

That worked. For anyone who runs into this problem in future and needs to rename a bunch of files, try this in PowerShell:

Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ä','ae' }
Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ö','oe' }
Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ü','ue' }
Get-ChildItem *.* | Rename-Item -NewName { $_.Name -replace 'ß','ss' }


Combining this with a quick search + replace routine in Inquisit (Ctrl + H) for the corresponding stimulus names is a fast workaround while this issue persists.

Thanks for the confirmation. There should also be a server-side fix for the IQZIP generation available soon.
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search