各位看官好,本期小编将系统介绍如何搭建一个在线心理学实验的后端(也就是数据收集的服务端),之前小编曾经简要介绍过各种在线心理学实验前端(也就是客户端)的编写工具(如Gorilla,jspsych等),并且也提到了在线实验后端的解决方案(如一些挂载在线实验的平台:如Gorilla、Pavlovia等等)。
这里首先简要科普一下什么是”前端”和”后端”。简单来说:
网页上给用户(被试)看的、操作的就是前端;
用户看不到的,而开发者(研究者)能看到的保存和处理数据的就是后端(服务端)。
关于在线实验前端的编写可以查看本公众号之前的推文:
然而,之前介绍的这些平台大多需要按照被试的数量来支付佣金。当然,如果你所在的高校同这些平台有合作,则可能省掉这部分费用。但Gorilla和Pavlovia的主要服务器节点都部署在英国,即使国内科研人员所在的高校跟这些平台有合作,使用体验可能依然不佳。那么如何规避这些平台的不足自建一个免费的在线实验的后端数据收集平台呢
本文将分别按照国内和国外两种网络环境,给出除了主流的Gorilla、Pavlovia等平台之外的在线实验后端详细解(sheng)决(qian)方案,并逐个分析这些解决方案的优缺点。
01
国外在线实验的解决方案
1.1使用谷歌firebase
简介:
谷歌旗下的firebase能帮助开发者快捷方便的部署Web应用和移动app应用的服务端(没错,开发安卓app也可以),而不需要系统学习后端开发的技能。小型应用(比如小型在线实验)使用免费套餐完全够用。它可以配合jspsych、labjs使用,也可以尝试使用psychopy导出的html文件进行挂载(未探索过,有兴趣的小伙伴可以探索一下,原则上应该走得通)。在线行为实验的运行主要使用了firebase的网页挂载和即时数据库功能。
具体攻略:
优缺点:
优点:
缺点:
1.由于访问数据库的密钥是以明文形式储存在网页代码中,如果不加处理,被试只需要按F12,找到网页代码的apikey部分,就可以通过curl访问、修改、删除你的数据库数据了(可以通过禁用F12解决)。就是红线所示的一串代码:
2.firebase使用的是Nosql(非关系型)数据库,导出的数据是JSON格式,对新手不大友好,不过R中有大量解析JSON格式数据的包可以解决这个问题。
3.需要编写额外代码进行被试参与实验的控制(比如识别一个被试是否多次参加了实验)
1.2JATOS的免费平台
简介:
JATOS是一个免费开源的专业在线行为实验的建立工具。近期他们提供了免费使用JATOS服务器的机会。后文我会详细介绍如何用JATOS搭建在线实验的后端。
优缺点:
优点:专业人员为你的实验挂载保驾护航,专业级别的服务器,而且免费。同时JATOS本身具有强大的被试实验控制能力。
缺点:要提交申请,可能要和其他同行竞争有限的机会。
02
国内在线实验的解决方案
2.1firebase在国内的替代品leancloud
虽然firebase用不了,但是国内依然有提供类似firebase的服务商:Leancould。他们也提供了免费套餐,只不过免费套餐有一些限制(如,每天强制6小时休眠挂载的网页)。我们同样可以免费使用leancloud的网页挂载和免费Nosql数据库。
具体攻略:
(与firebase如出一辙)
2.数据库如何使用:
优点:参见firebase
缺点:除了firebase的缺点,多了每天6小时的强制休眠。
2.2使用个人电脑搭建服务器后端
(这种方法其实也可以在国外的网络环境下使用)
这里主要使用了内网穿透技术。简单来说,内网穿透就是通过第三方服务器同时连接你的电脑内网和外部互联网,让外网能够连接到你的内网中来。这样你在本地建立的网页文件就可以被外网的用户浏览到。此外,我将演示如何使用JATOS搭建一个在线实验的后端,以及如何运作这个后端。
这里我们需要用到三个工具:
jspsych(用于编写在线实验客户端),
JATOS(用于部署在线实验服务端),
ngrok(用于联通外网和内网)。
首先你需要用jspsych写好一个在线实验的网页,然后在网页的html代码中中导入jatos.js文件
具体步骤:
然后对之前写好的在线实验代码做微调,具体步骤如下:
1.在jspsych.init之前嵌套jatos.onload。具体代码如下:
jatos.onLoad(function(){
jsPsych.init({
//...
});
2.加上一个回调函数以上传被试的数据文件(这里复制粘贴黄色部分即可)。
之后需要下载ngrok这个工具,下载地址:
然后在ngrok的官方网站上注册一个账号:
然后将文件解压,并打开文件夹中的loader.bat文件
打开之后可以看到下面有一个IP地址和端口号(9000),然后我们ctrl+c复制这个地址和端口号并粘贴到浏览器中(这个命令行界面不要关闭,最小化即可)。
JATOS的登陆界面就出现了,这里的初始账号密码都是admin,然后我们点击进入JATOS:
接着我们就进入了JATOS的主要操作界面,可以看到左边红框框是已经装载的实验(第一次安装这里应该是空的),而上方的红框则是需要用到的功能。
首先点击+NewStduy添加一个新实验,如下图,其中title和directoryname(在线实验html文件夹的文件名)必填:
最后点击Create即可.之后左边会出现刚刚建立的新实验,点击这个新实验,会弹出如下界面:
之后我们点击Components--+New,填写title和HTMLfilepath(也就是在线实验网页文件的文件名)
这样我们的实验就加载进了JATOS。
这样在线实验的前后端就基本部署完成了,接下来我们通过ngrok进行内网穿透。
打开命令行工具(cmd),使用cd“d(ngrok安装的盘):\ngrok所在的文件目录”修改工作目录。
修改工作目录后如下图:
接着我们可以将刚才的地址去掉/test再黏贴到浏览器地址栏,就可以登陆到JATOS了。
可以看到这时的JATOSlogo已经没有了local字样,说明外网能成功访问到这个页面了。
接下来我们点击刚才已经部署好的实验,再点击Woker&Batchmanager,你会看到如下界面:
点击下拉箭头:
优点:免费,方便,而且依托JATOS的被试控制
缺点:免费版的ngrok第三方服务器部署在美国,网速可能比较慢,只能支持较少被试同时进行实验
写在最后的需知:
虽然这篇推文提到了一些免费的建立在线实验的方法,但是免费搭建的在线实验限制较多,且稳定性可能不够(比如有较多被试同时参与你搭建的在线实验,由于带宽不够造成数据流失,没能上传到数据库)。故本人建议免费搭建平台可以用来做一些小项目或者预实验。但是如果你所在的研究团队有这方面专业的支持,还是应当寻求专业帮助。毕竟一分钱一分货嘛。就像某互联网大佬的曾经说过的: