GithubHelp home page GithubHelp logo

forzaz / mobile-experience-sampling-master Goto Github PK

View Code? Open in Web Editor NEW
5.0 3.0 1.0 72.29 MB

SampleU - An Open Source Experience Sampling and Ecological Momentary Intervention App for Android and iOS

JavaScript 47.76% CSS 47.76% HTML 0.56% PHP 3.76% R 0.15%
experiencesampling mobile-app psychology-experiments survey-app questionnaire-survey intervention-study cordova framework7 mysql-database

mobile-experience-sampling-master's Introduction

SampleU – An Open Source Experience Sampling and Ecological Momentary Intervention App for Android and iOS

This mobile application and backend interface allows researchers to conduct experience sampling or ecological momentary intervention studies. The app works on both Android and iOS platforms.

This project is led by Chao Zhang, Daniël Lakens, and Karin Smolders from Human-Technology Interaction group at Eindhoven University of Technology (https://www.tue.nl/en/university/departments/industrial-engineering-innovation-sciences/research/research-groups/human-technology-interaction/).

The development of the app, including the design and coding of the front and back-end, was greatly helped by BOSONIC.design http://www.bosonic.design/

Features of the current version (1.0.2)

  • Cordova-based; developing for Android and iOS by using only HTML, JavaScript, and CSS
  • Data are stored in MySQL database on your own server; privacy is fully protected as you control all your data; avoid violations with General Data Protection Regulation (GDPR) (EU)
  • Questionnaire design can be done through manipulation of the database (with GUI, e.g., phpMyAdmin or Adminer)
  • Support most common questionnaire types (e.g., Likert scale, slider, time-picker, text, etc.), but also taking photos, recording voices, and sharing geolocations
  • Flexible scheduling of notifications (time or signal contingent) can be done by coding in JavaScript
  • Messaging system using Firebase; ability to send reminders or other intervention contents to participants
  • One script to transform tables from your database to csv format for analyses in R, Python, SPSS, or Stata

Documentation and tutorial

For now, you can refer to the documentation.pdf for instructions about how to customize and setup the app. We are working on a more researcher-friendly tutorial.

If you have any questions, please contact [email protected]

mobile-experience-sampling-master's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

hamdiahmedamin

mobile-experience-sampling-master's Issues

Swapping the side menu away?

Now when a user click on the top-left to show the side menu at the left, it feels natural to swap left to make the menu to hide again. Is it possible to make this interaction?

Photo size and resolution?

I checked the stored photos on the server, but they are of very poor quality and are very small. Why? Any way to define in the code, how much quality and how large the image size I want?

No default choices

For multiple choice and rating scale, there should be no defaut answer

Duplicate question bug

There was a bug that when users do the survey multiple times offline, questions in the SQLite are duplicated because no delete function was in the offline mode.

I have fixed it myself by moving the delete function from retrieveQuestionOnline to renderQuestion, so it applies to both online and offline.

Bug in Date question

Now when you click on the field for Date type, the Date selector does not pop up...

Message text "undefined"

Message text "undefined" when the app is not active at the moment of receiving a message (e.g., you click on the notification to go to the message list page). Not a problem when the app is active.

Back button for Android phone

Now when you press the back button of Android devices, the app is killed. Can you change the callback to be either going back (when e.g., consistent with the back button on the message page) or just doing nothing (when on homepage)? Or even better, press twice == kill the app (default of many apps).

Labels for scales

For the question type scale, you need to design the common situations, when labels are used for all the values, or at least for the two extreme values (e.g., 1 and 5).

Value checking mechanisms

I am pretty sure that you will add these functions: (1) to check whether there are values out of range; (2) give an error (pop-up or maybe jump to the question) when a user click "Submit" before finishing all the compulsory questions.

Cannot add a second voice recorder?

I messed up the database a bit to see if I can easily change one question type and another. That works, but when I have two questions in the type of voice recording, the seond one seems not to work? Anything in the code prevents it from working?

Stop button for voice recording

When a recorded voice is played and is is over, should the stop button automatically change back to play? Feels more intuitive....

Navigate through years?

With the calenda, now it's very difficult to navigate through years. This is really needed when one has to pick her birthday. Maybe also allow users to just type the numbers?

log out?

Users should have the possibility to log out, even though not likely to happen often in research?

Google map issue

After I selected a location using the map, the page is messed up somehow...

afbeelding

More intuitive feedback for recording on/off

Not quite intuitive how to use the recording buttons. Because so many apps use the pressing/holding interaction, I first thought this way as well. Clicking to turn on and off is also fine, but there should be a stronger feedback (change of color?) than just change of text below. Something needs to show visually that a process (voice recording in this case) is ONGOING.

Does not login in

I had to change the following code in autorizeUser in authorization.js in order to login in:

from:
RetrieveMessages(function(){
if(data[2] === "1")
{
this is a temporary password, let the user change it.
view.router.loadPage('resetpassword.html');
} else {
storage.setItem("login","true");
view.router.loadPage('menu.html');
}
});

to:
RetrieveMessages();
if (data[2] === "1") {
//this is a temporary password, let the user change it.
view.router.loadPage('resetpassword.html');
} else {
storage.setItem("login","true");
view.router.loadPage('menu.html');
}

I am not sure where went wrong and why in this case you used the page-turning part as input to RetrieveMessages function.

Likert scale presentation

When the scale labels are long, the display is still messed (see photo). I think it will be difficult to show if the labels are very long. But for more typical length, can you find a robust solution? It might be a good idea to show the text of labels in two rows.

afbeelding

Echo error in createUser.php

I had to comment out the first three lines of code (see below), otherwise the output will be as shown in the screenshot below (then it create problem for the registerUser function in authorization.js.

//ini_set('display_errors', 1);
//ini_set('display_startup_errors', 1);
//error_reporting(E_ALL);

afbeelding

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.