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.
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
- 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!
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.
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.
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).
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.