Skip to content

collab-uniba/ExperienceSampling

Repository files navigation

ExperienceSampling

The goal of this project is to collect reports of affective experience with SAM (Self Assessment Manikin) methodology, in reaction to programming activities.

This application shows a notification every 60 minutes (by default). If the useres clicks on the notification, a form is displayed. The user can fill out the form by describing the emotions he experienced during the work day.

When the form is not displayed, the applications sits in the system tray waiting for the user or the next notification.

The data collected by the appplication is stored in a local database and can be exported at any time as a CSV file.

The application allows the user to see a retrospective diagram based on Circumplex Model by James Russell.

Fair use policy

Please, cite the following paper if you intend to use our tool for your own research:

D. Girardi, N.Novielli, D. Fucci, F. Lanubile. "Recognizing Developers’ Emotions while Programming". In Proceedings of the 42th International Conference on Software Engineering (ICSE 2020) – DOI: https://doi.org/10.1145/3377811.3380374

Technology Used

  • Python 3 (version not specified)
  • Qt 5 (with pyqt package)

The application is multi-platform and it has been tested on Windows, Linux and Mac OS. The icons come from this repository: https://github.com/collab-uniba/PersonalAnalytics/tree/field_study_merge

CSV file example:

1560297165,,,,,,POPUP_OPENED,
1560297173,Coding,3,4,5,Average,POPUP_CLOSED,
1560297178,,,,,,POPUP_OPENED,
1560297190,Taking a break,2,3,4,Under average,POPUP_CLOSED,I'm going to lunch.
1560297194,,,,,,POPUP_OPENED,
1560297219,Debugging,3,4,1,Average,POPUP_CLOSED,I can't fix a bug!

Screenshot

User manual

Run the executable to open the application. ExperienceSampling is a portable app and requires no installation.

Every 60 minutes (default timer) a notification will appear.

The default timer can be defined by placing a file named timer.txt in the executable folder. timer.txt should only contain a single line representing the number of minutes.

Once the notification appears, you have tree options:

  • Dismiss: the timer is disabled. You have to re-enable it from the tray menu
  • Postpone: the notification will appear later again. Use the slider to decide when.
  • Open the popup: click anywhere on the notification to open the following popup window

Note: all fields except "Notes" aren't optional. After filling in the form, press the "Done" button to submit. Your data is stored in a local database and can be exported at any time from the tray menu.

After you close the popup window by pressing done, the timer (if not disabled) will again and the notification will appear again after the set amount of time.

Select "Show retrospective" from the tray menu to show a visual representation of your data as a bubble chart, according to the Russel Circumplex Model.

Check "View single day" and move the slider to filter your emotions by day.

How to build a standalone executable

Requirements setup

To build a standalone version of this app, first install Qt5 on your system. For instance, on MacOS, you can do so with Homebrew by running brew install qt5 (see https://stackoverflow.com/a/71669996/4178082).

Then, install the Python dependencies listed in requirements.txt by running the make develop command.

Notes for MacOS users

If you use Pyenv to manage your Python versions, you need to build the desired Python version with the --enable-shared flag (see Pyenv's docs). E.g.:

env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.12

Moreover, if you own a Mac with an Apple Silicon processor (e.g., M1), you will probably need to install pyqt5 separately with the command:

pip3 install pyqt5 --config-settings --confirm-license= --verbose

Only then, you can run make develop to install the other dependencies.

This is due to the fact that, as of today, there is no wheel available for Apple Silicon. Therefore, pip will attempt to compile the package from source. However, the compilation process prompts the user to confirm the license agreement, which is not possible in a non-interactive environment. Luckily, pyqt has an argument to automatically accept the license (i.e., --confirm-license) and we can pass this argument using pip's --config-settings (see https://stackoverflow.com/a/74071222/4178082).

Build

To build a standalone executable for Linux, exec make build in a Linux environment to build an executable file called run. To build a standalone executable for Windows exec make build in a Windows environment to build an .exe file . To build a standalone executable for Mac OS esec make build in a Mac OS environment to build an .app file.

The executables will be located in the dist folder.

Before every new build, make sure to exec make clean to remove the build folder from previous builds.