Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
magpie-modules
Advanced tools
minimal architecture for the generation of portable interactive experiments (https://github.com/magpie-ea/magpie-modules)
minimal architecture for the generation of portable interactive experiments
Latest version: 0.2.3
Table of contents
You need to have npm installed in your machine. Install npm.
# create a folder for your experiment
mkdir my-experiment
# move to the experiment's folder
cd my-experiment
# initialise npm (create a package.json file)
npm init
# install the dependencies with npm
npm install magpie-modules --save
the npm installation process creates a folder (named node_modules
) in your experiment's directory where the npm dependencies are stored. After successfully installing _magpie, the node_modules
folder should contain magpie-modules
and its dependencies jquery
and csv-js
.
The magpie-modules
folder includes the following three files that you can add to your experiment:
magpie.full.js
- includes _magpie functions and its dependencies (jquery nad csv-js), no need to install and import jquery and csv-js.magpie.js
- includes only _magpie functions (jquery nad csv-js), jquery and csv-js have to be included separately.magpie.css
- includes magpie styles.Import _magpie with a script tag:
add magpie.full.js
<script src='path/to/node_modules/magpie-modules/magpie.full.js'></script>
or add magpie.js
, jquery
and csv.js
<script src='path/to/node_modules/jquery/dist/jquery.min.js'></script>
<script src='path/to/node_modules/csv-js/csv.js'></script>
<script src='path/to/node_modules/magpie-modules/magpie.js'></script>
You can get newer versions of _magpie with
npm update
Download the .zip from this repository
Unzip and move magpie.full.js
, magpie.js
and magpie.css
in the libraries/
folder of your experiment.
Your experiment's structure should look like this:
magpie.full.js
includes the dependencies that _magpie uses (jQuery, and csv-js). There is no need to install and import jQuery, and csv-js.
magpie.js
includes only the _magpie package, the dependencies should be installed separately for _magpie to work.
magpie.css
includes styles for _magpie experiments.
html
filethe full version or no-dependencies version:
<script src="libraries/magpie.full.js></script>
or <script src="libraries/magpie.js></script>
and _magpie-styles:
<link rel="stylesheet" type="text/css" href="libraries/magpie.css">
Once you have installed and included _magpie in your files, you can start using _magpie funcitons to create your experiment. You can use:
Use magpieInit({..})
to create a _magpie experiment.
magpieInit
takes an object as a parameter with the following properties:
views_seq
- an array of view objects in the sequence you want them to appear in your experiment. more infodeploy
- an object with information about the deploy methods of your experiment. more infoprogress_bar
- an object with information about the progress bars in the views of your experiment. more infoSample magpieInit
call:
$("document").ready(function() {
magpieInit({
views_seq: [
intro,
instructions,
practice,
main,
thanks
],
deploy: {
"experimentID": "4",
"serverAppURL": "https://magpie-demo.herokuapp.com/api/submit_experiment/",
"deployMethod": "debug",
"contact_email": "YOUREMAIL@wherelifeisgreat.you",
"prolificURL": "https://app.prolific.ac/submissions/complete?cc=ABCD1234"
},
progress_bar: {
in: [
"practice",
"main"
],
style: "default",
width: 150
}
});
});
_magpie views get inserted in a html element with id main
, you need to have an html tag (preferrably div
or main
)
with id="main"
Sample index.html
<!DOCTYPE html>
<html>
<head>
...
...
...
</head>
<body>
<-- ask the participants to enable JavaScript in their browser -->
<noscript>This task requires JavaScript. Please enable JavaScript in your browser and reload the page. For more information on how to do that, please refer to
<a href='https://enable-javascript.com' target='_blank'>enable-javascript.com</a>
</noscript>
<!-- views are inserted in here -->
<main id='main'>
Loading...
</main>
</body>
</html>
_magpie provides several ready-made views which you can access form the magpieViews
object. The views use js template strings
Trial Type Views (TTV):
magpieViews.forcedChoice
- binary forced-choice taskmagpieViews.sliderRating
- slider rating taskmagpieViews.textboxInput
- textbox input taskmagpieViews.dropdownMenu
- dropdown menu taskmagpieViews.ratingScale
- Likert-scale rating taskmagpieViews.sentenceChoice
- text selection taskmagpieViews.imageSelection
- click-on-a-picture taskmagpieViews.keyPress
- press a button taskmagpieViews.selfPacedReading
magpieViews.selfPacedReading_ratingScale
Other Type Views (OTV):
magpieViews.intro
- introduction viewmagpieViews.instructions
- instructions viewmagpieViews.begin
- begin experiment view; can be used between the practice and the main viewmagpieViews.postTest
- post-experiment questionnairemagpieViews.thanks
- the last view that handles the submission of the results of creates a table with the results in 'Debug Mode'Each _magpie view function takes an object as a parameter with obligatory and optional properties. Here you can find more information about how to use the _magpie views.
You can also create your own views.
The views are functions that return an object with the following properties:
name: string
- the name of the view (the progress bar uses the name)trials: number
- the number of trials this view appearsCT: 0
- current trial, always starts from 0render: function
- a function that renders the view
CT
and magpie
as parameters to render()Add the data gathered from your custom trial type views to magpie.trial_data
Sample custom trial type view:
The templates use js template strings
magpieViews.pressTheButton = function(config) {
const _pressTheButton = {
name: config.name,
title: config.title, //
buttonText: config.buttonText,
render(CT, magpie) {
let startTime = Date.now();
const viewTemplate =
`<div class='view'>
<h1 class="title">${title}</h1>
<button id="the-button">${button}</button>
</div>`;
$("#main").html(viewTemplate);
$('#the-button').on('click', function(e) {
_magpie.trial_data.push({
trial_type: config.trial_type,
trial_number: CT+1,
RT: Date.now() - startTime
});
_magpie.findNextView();
});
},
CT: 0,
trials: config.trials
};
return _pressTheButton;
};
const mainTrial = magpieViews.pressTheButton({
name: 'buttonPress',
title: 'How quickly can you press this button?',
buttonText: 'Press me!',
trial_type: 'main',
trials: 1
});
$("document").ready(function() {
magpieInit({
...
views_seq: [
...
mainTrial,
...
],
...
});
});
Sample custom info view:
magpieViews.sayHello = function(config) {
const _sayHello = {
name: config.name,
title: config.title,
render(CT, magpie) {
const viewTemplate =
`<div class='view'>
<h1 class="title">${title}</h1>
<button id="hello-button">Hello back!</button>
</div>`;
$("#main").html(viewTemplate);
$('#hello-button').on('click', function(e) {
_magpie.findNextView();
});
},
CT: 0,
trials: config.trials
};
return _sayHello;
};
const hello = magpieViews.sayHello({
name: 'buttonPress',
title: 'Hello!?',
trials: 1
});
$("document").ready(function() {
magpieInit({
...
views_seq: [
...
hello,
...
],
...
});
});
magpie also includes a small library to create simple shapes as a picture for your experiment.
Check the canvas api for more information.
The deploy config expects the following properties:
experimentID: string
- the experimentID is needed to recover data from the magpie server app. You receive the experimentID when you create the experiment using the magpie server appserverAppURL: string
- if you use the _magpie server app, specify its URL heredeployMethod: string
- use one of 'debug', 'localServer', 'MTurk', 'MTurkSandbox', 'Prolific', 'directLink'contact_email: string
- who to contact in case of troubleprolificURL: string
- the prolific completion URL if the deploy method is "Prolific"prolificURL is only needed if the experiment runs on Prolific.
_magpie provides the option to include progress bars in the views specified in the progress_bar.in
list passed to magpieInit
. Use the names of the views in progress_bar.in
.
You can use one of the following 3 styles (include pictues)
separate
- have separate progress bars in each type of views declared in progress_bar.in
default
- have one progress bar throughout the whole experimentchunks
- have a separate progress chunk for each type of view in progress_bar.in
Use progress_bar.width
to set the width (in pixels) of the progress bar or chunk
Sample progress bar
$("document").ready(function() {
magpieInit({
...
progress_bar: {
in: [
"practice",
"main"
], // only the practice and the main view will have progress bars in this experiment
style: "chunks", // there will be two chunks - one for the practice and one for the main view
width: 100 // each one of the two chunks will be 100 pixels long
}
});
});
Here you can find a minimal experiment created with _magpie, you can use this template as a starting point for your experiment. Showroom is an experiment which demonstrates most of _magpie's functionalities including most views, hooks and the canvas-api.
To get the development version of the _magpie package, clone this repository and install the dependencies by running npm install
in the terminal.
branches:
src/
magpie-canvas.js
magpie-errors.js
magpie-init.js
magpie-progress-bar.js
magpie-submit.js
magpie-utils.js
magpie-views.js
magpie.css
Use npm run watch
command from the magpie-modules
folder to start a process which watches for changes in the files in src
and builds (updates) magpie.js
and magpie.full.js
. This commands builds both magpie.js
and magpie.full.js
when a file in src
is saved.
Run npm run concat
from the magpie-modules
folder. This command builds both magpie.js
and magpie.full.js
.
package.json
Run npm publish
from the magpie-modules
folder to publish the new version of _magpie.
New site from Git
-Button, choose GitHub and authorize the netlify-app on GitHub, configure which repositories to give access to, (back on netlify) select the repository to deploy, enter the build command rm -rf dist && mkdir dist && rsync -rv * dist --exclude ./dist
and the publish directory dist
(this is a workaround for publishing node_modules
, see here, another way of bundling the files may be appropriate), click on Deploy site
Domain setting
, click on Edit site name
and change to the name of choice.FAQs
minimal architecture for the generation of portable interactive experiments (https://github.com/magpie-ea/magpie-modules)
The npm package magpie-modules receives a total of 11 weekly downloads. As such, magpie-modules popularity was classified as not popular.
We found that magpie-modules demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.