ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
A no-code builder for jsPsych experiments: author in the browser, export readable jsPsych you can host anywhere
翻译准备中
正在加载完整 README。
查看完整 README ↗A no-code builder for jsPsych experiments. Researchers assemble a study in a UI; the tool compiles it to readable, correct jsPsych source they can host anywhere.
Status: early. You can build a flanker task end to end in the browser — nested timeline, conditions table generated from a design, generated parameter forms (questionnaire items included), rich stimulus text, image and sound files, group assignment and branching on performance or on an answer, a psychophysics canvas step whose objects you drag into place, live preview of the whole experiment or a single step, a choice of where results go, a guided tour of the builder, and export to a single HTML file or a zipped project. Participants recruited on Prolific, SONA or CloudResearch Connect are identified by the platform's id and sent back to it when done. Tasks can run in a counterbalanced order. There is no hosting or consent flow yet. Every export names the version that built it.
Try it: https://www.capro.dev/tachisto/app/ — nothing to install, and the examples open a working experiment in one click. The website at https://www.capro.dev/tachisto/ explains what it does.
Tachisto is named after the tachistoscope, the lab instrument that showed a stimulus for an exact number of milliseconds. Its first release was called jsPsych Studio.
jsPsych requires JavaScript, which most psychologists do not write. The alternatives are pay-per-participant platforms or a Python toolchain with a lossy JavaScript export. More importantly, hand-written jsPsych fails silently: the published community flanker timeline renders one stimulus for every condition because it reads timeline variables the wrong way, with no console error. A compiler encodes those rules once.
The design rests on one observation: jsPsych plugins describe their own parameters at runtime, and the JSDoc for each parameter survives in the published type declarations — so the form UI for the whole plugin ecosystem can be generated instead of hand-written, which is what makes this maintainable by a small team.
| Package | What it does |
|---|---|
@tachisto/schemas | Turns every plugin's info.parameters plus the JSDoc in its shipped .d.ts into JSON Schema, so the builder's forms are generated rather than hand-written |
@tachisto/compiler | Compiles a declarative spec to jsPsych source and emits an HTML experiment |
@tachisto/cli | tachisto validate, compile and schema, for building a study from a spec without the builder — or without a person |
@tachisto/mcp | Validating, compiling and a link back to the builder, served over MCP, so an agent authoring a study checks it where it works |
@tachisto/brand | Colours, type, logos and the brand book (packages/brand/BRAND.md), shared by the builder and the website |
The builder lives in apps/builder, and the website that introduces it in apps/site.
Cutting a release is a tag; what that tag has to satisfy, and how to publish a package for the first time, is in RELEASING.md.
npm install
npm run dev # the builder at http://localhost:5180
npm run dev:site # the website at http://localhost:5181
npm run build:pages # the website, with the builder under app/, in dist-pages/ as Pages serves it
npm test # unit tests plus two real-browser end-to-end runs
npm run coverage # the same, reporting coverage of the compiler, schemas, cli and builder logic
npm run typecheck
npm run schemas # regenerate packages/schemas/plugin-schemas.json, print coverage
npm run build:packages # build the published packages, as packing them does
npm run spec-schema # regenerate packages/compiler/spec-schema.json
node packages/cli/src/main.ts compile examples/flanker.json
The acceptance test for the UI builds examples/flanker.json by clicking through the app and
asserts the authored spec matches the reference file, then checks the preview actually runs.
examples/flanker.json is the reference spec: instructions, then a practice block over a
four-row conditions table, randomised, twice through, scored against a correct-key column, repeating
while cumulative accuracy stays below 0.75.
examples/shapes.json is the image example: four PNGs (blue and orange squares and circles) carried
in the spec as data URLs, named from a conditions column, preloaded, and judged on shape while
colour is recorded but irrelevant.
examples/stroop.json is the checkpoint example: a colour-word Stroop with a fixation cross before
each word, congruency and ink colour recorded on every trial, and a checkpoint after the
instructions.
A counterbalance step runs every one of its tasks for every participant, in an order that
differs between participants, and records the order used on every row (as "stroop > flanker",
in the column order unless record_as names another). A task holds any steps, such as
instructions and a block over its own conditions table:
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗