发布说明 4.0.0
OpenSesame 4.0 激情米尔格姆 是一个重要的新版本,带有许多新功能和改进。
重要:向后不兼容的更改
- 变量记录的方式略有改变。具体来说,用户界面中定义的变量,如
loop
表格中的列或在logger
中显式选择的变量,始终会被记录。在inline_script
或inline_javascript
中定义的变量仅在它们是数字(int
和float
)、字符串(str
和bytes
)以及None
值时才记录。这是为了避免由于记录长列表和其他大值而使日志文件变得不合理地大。 <script>
标签在inline_html
项目中的内容不会被评估。这不再是必要的,因为您可以在 JavaScript 中简单地引用实验变量(如下所示)。- 条件表达式仅在包含使用方括号表示法引用变量或带有 'always' 或 'never' 单词时解释为 OpenSesame 脚本。否则,它们会被解释为 Python 表达式,如下所述。
新的 OpenSesame Python 模块(无 GUI)
对于那些喜欢编码而不是使用 GUI 的人来说:您现在可以将 OpenSesame 用作 Python 模块。
from libopensesame.python_workspace_api import \
Experiment, Canvas, Keyboard, Text
# 使用传统后端初始化实验窗口
exp, win, clock, log = Experiment(canvas_backend='legacy')
# 准备一个刺激画布和一个键盘
cnv = Canvas()
cnv += Text('Hello world')
kb = Keyboard()
# 显示画布,等待按键,然后结束实验
cnv.show()
kb.get_key()
exp.end()
另请参阅:
改进了与 Python 和 JavaScript 的集成
OpenSesame 与 Python (桌面端)/ JavaScript(浏览器端)之间的集成现在更加直观。具体来说,部分 OpenSesame 特定的语法已被标准Python/ JavaScript 语法取代,Python/ JavaScript 中实验变量和全局变量之间的区别也不再存在。
用 {} 替代 []:支持格式化字符串文字(f-字符串)
在用户界面中引用变量的首选表示法现在是使用大括号({my_var}
),而不是方括号([my_var]
)。
您甚至可以在大括号内包含完整的 Python 表达式。例如,以下 sketchpad 上的文本会在准确率高于70%时包含 'Well done!',否则包含 'Try harder!'。
任务准确性{acc} %。{'Well done!' if acc > 70 else 'Try harder!'}
在浏览器中使用 OSWeb 运行实验时,大括号内的 Python 代码会自动转换为 JavaScript。这意味着您可以在桌面和浏览器上使用相同的 Python 表达式。
更多信息,请参见:
支持 Python 样式的条件表达式
首选的 run-if、break-if、show-if 和其他条件表达式语法是 Python,而不是 OpenSesame 脚本。这意味着以下 run-if 表达式会导致项仅在变量 correct
等于1时运行,也就是在正确响应之后。(实验变量现在是全局变量,参见下文。)
correct == 1
在浏览器中使用 OSWeb 运行实验时,Python 条件表达式会自动转换为 JavaScript。这意味着您可以在桌面和浏览器上使用相同的Python run-if、break-if、show-if 和其他条件表达式。
持久化 JavaScript 工作区
JavaScript 工作区现在是持久化的。这意味着您可以在一个 inline_javascript
中定义一个函数或变量,然后在另一个 inline_javascript
中引用它。
实验变量是全局的
实验变量,如response_time
以及在loop项目中定义的变量,现在成为了Python和JavaScript中的全局变量。这意味着你不再需要使用var
(Python)或vars
对象,而是可以直接通过名称引用实验变量。
Python:
# 通过名称访问现有的实验变量
print('response = ', response)
# 定义一个新的实验变量(也可以在GUI中使用)
new_experimental_variable = 'example'
JavaScript:
// 通过名称访问现有的实验变量
console.log('response = ' + response)
// 定义一个新的实验变量(也可以在GUI中使用)
// 注意:使用`let`定义的变量*并不*全局可用!
var new_experimental_variable = 'example'
改进的用户界面
进行了通过用户界面的可用性改进:
- 改进的图标:重新设计了打开和保存图标,因为一些用户觉得它们不清晰
- 附有注解以便清楚表达的 Run-if, break-if, show-if 及其它条件表达式('始终运行')
- OSWeb 现在作为一个后端展现
- 与实验设置不兼容的项目已被禁用
- 实验中的项目可以被禁用。这主要适用于开发目的,例如,暂时禁用指令。
- 错误信息现在更具信息量。
- 新的更新器扩展自动检查选定包的更新。这提供了一种不必重新下载和重新安装软件就能保持 OpenSesame 最新的简单方式。
交错的 Quest 阶梯
现在quest_staircase_init
和quest_staircase_next
项目支持一个名称,这能让你并行运行多个 Quest 程序。如果你想对不同的实验条件运行独立,交错的 Quest 程序,这将非常有用。
在OSWeb中支持鼠标响应中的关联画板(mouse_response)
现在mouse_response在OSWeb中支持链接的sketchpad项目,使得在基于浏览器的实验中处理感兴趣的区域和在基于实验室的实验中一样容易!
对开发者:改进了插件和扩展 API
插件和扩展 API 已经简化并修订,以反映当前 Python 开发的最佳实践:
致谢
OpenSesame 直接和间接地建立在许多人的工作之上。特别感谢 Robbert van der Mijn 为 Mac OS 包做出的贡献,以及 Elio Sjak-Shie 提出一种实现 OSWeb 的持久性 JavaScript 工作区的方法。