DMDX Help.


Networked and Read Only file systems Overview.


    A number of people over the years have tried to use DMDX in a networked environment with one machine serving up the item file and all the resources to a number of lab machines that then all run the experiment from that network share (usually simultaneously).  The problem these people all hit is that DMDX creates temporary files as well as output files in the network directory that the item file is found in so only the first machine could run the experiment and all others would throw errors as they tried to create the same files.  The only easy way around it was to have the files copied to each user's machine with a batch file. 

    Some time ago a tweak to a remote testing paradigm involved running DMDX from a DVD where similar issues are encountered because the directory that contains the item file is read only.  The solution was to make DMDX version 4.2.1.0 try to use the system or user's temporary directory for all the files DMDX might try and create, however I just discovered that if the item file used scrambling it would fail as scramble's code didn't try to use the temporary directory so that was fixed in 6.3.0.1 and in 6.3.0.2 I made DMDX's diagnostic spew include the temporary path name if it was used to facilitate getting something like this going -- although some people these days use the remote testing options instead of a local network share. 

    If you do choose to go with the network share route with a bit of scriptfu the run can be setup to look in the %temp% directory for the resulting output files as long as the networked directory is set to be read only (in Microsoft parlance you have deny writes to the directory).  If this is not done, one user's files will be on the network but other's data will be left in their local machine's %temp% directory.  UnloadAZK can accept parameters on the command line with the -automatic command so the batch file can fire UnloadAZK up after the DMDX run with the network path to the output data file on the server and the data file in the temporary directory with %temp%\datafile.azk for instance.  UnloadAZK as of version 3.0 goes to much greater lengths to automatically serialize it's requests so if it can't write to the destination it retries the operation 10 times at varying time intervals (0.5 to 1.5 seconds) and only after those are tried does it toss an error and even then it's a retry or abort the operation error.  If you're not going to go that route then the instructor will have to be visiting each machine and unloading the data manually -- which is what I suspect people have been doing in the past when not using the remote testing features.

    If I were going to set up a large networked lab testing environment for running a single study (as opposed to a lab that ran lots of different studies throughout the year) then I'd have a network share with a batch file in it and with two subfolders, one called run and one called data.  The run subfolder would be read only and it would contain DMDX.EXE and the item file and any resources it needed to run as well as a version of UnloadAZK.exe that's 3.0 or later.  The data subfolder would have normal file permissions and not be read only and would receive the subjects' data.  The batch file would live in the root of the share (so above run and data) and would execute DMDX the way the remote testing scripts do with start /wait and then it would run UnloadAZK passing it the paths to the data files.  The batch file would look something like this:

start /wait "DMDX" \\networkshare\run\dmdx.exe -auto -unicode -ignoreunknownrtf -run \\networkshare\run\itemfile.rtf
\\networkshare\run\UnloadAZK.exe -automatic \\networkshare\data\itemfile.azk %temp%\itemfile.azk

    This works as long as (a) you've made the run directory read only, (b) you're using DMDX 6.3.0.1 or later and (c) you're using UnloadAZK 3.0 or later (available in DMDXUTILS.ZIP). 

   Conversely if you didn't want to muck around with directory and share permissions and had simply copied all of the files needed to each machine in the lab (so the batch file, dmdx.exe and UnloadAZK.exe and your item file) but still wanted the data gathered automatically to a network share at the end of a run your batch file will look something like this:

start /wait "DMDX" dmdx.exe -auto -unicode -ignoreunknownrtf -run itemfile.rtf
UnloadAZK.exe -automatic \\networkshare\itemfile.azk itemfile.azk


 


DMDX Index.