2024-06-09 13:02:05 +02:00
|
|
|
#+title: dev.metalisp.survey
|
|
|
|
#+author: Marcus Kammer
|
2025-01-24 15:08:44 +01:00
|
|
|
#+email: marcus.kammer@mailbox.org
|
2024-06-09 13:02:05 +02:00
|
|
|
|
2024-06-09 14:13:23 +02:00
|
|
|
* dev.metalisp.survey
|
2024-06-24 19:08:19 +02:00
|
|
|
|
|
|
|
Made with Love ❤️ and Common Lisp
|
|
|
|
|
2024-07-03 17:37:20 +02:00
|
|
|
** Disclaimer
|
|
|
|
|
2024-07-04 08:31:42 +02:00
|
|
|
Libre software (LS) is often misunderstood as entirely free, including support
|
|
|
|
and maintenance. While LS is freely available to use, modify, and distribute,
|
|
|
|
users bear the responsibility for its integration, upkeep, and
|
2024-07-03 17:37:20 +02:00
|
|
|
troubleshooting. Unlike commercial software, which typically includes support
|
2024-07-04 08:31:42 +02:00
|
|
|
services, LS relies on community or paid third-party support, if
|
2024-07-03 17:37:20 +02:00
|
|
|
available. This model empowers users with flexibility and control but requires
|
2024-07-04 08:31:42 +02:00
|
|
|
a commitment to managing the software effectively. Therefore, adopting LS
|
2024-07-03 17:37:20 +02:00
|
|
|
demands a proactive approach to handling any issues and ensuring the software
|
|
|
|
meets organizational needs.
|
|
|
|
|
2024-06-09 14:13:23 +02:00
|
|
|
** Introduction
|
2024-06-17 22:25:59 +02:00
|
|
|
|
2025-02-16 11:58:33 +01:00
|
|
|
*** Purpose
|
|
|
|
Efficiently administer and analyze the System Usability Scale (SUS) and Visual Aesthetics of Websites Inventory (VisAWI) questionnaires.
|
|
|
|
|
|
|
|
*** Core Features
|
|
|
|
- Presents questions and collects responses
|
|
|
|
- Streamlines usability feedback gathering and analysis
|
|
|
|
- Offers flexible templates for high reusability and adaptability
|
|
|
|
- Synthesizes data from multiple questionnaires into a single study
|
|
|
|
|
|
|
|
*** Key Benefits
|
|
|
|
- Self-hosted solution for enhanced data protection
|
|
|
|
- Users have full control over their data
|
|
|
|
- Valuable for research projects and market research
|
|
|
|
|
|
|
|
*** Integration
|
|
|
|
- Easily integrates with existing websites or software systems
|
|
|
|
|
|
|
|
*** Target Sectors
|
|
|
|
- Research projects
|
|
|
|
- Market research
|
|
|
|
- Any field requiring precise data collection and analysis
|
|
|
|
|
|
|
|
*** Target Users
|
2025-02-16 13:16:17 +01:00
|
|
|
1. Disabled (User / UX) Researches (Primary)
|
|
|
|
2. UX Freelancers (Secondary)
|
|
|
|
3. Small UX Agencies
|
2024-06-17 22:25:59 +02:00
|
|
|
|
|
|
|
** Design Goals
|
|
|
|
|
|
|
|
1. *Integration*: The app integrates seamlessly into existing digital
|
|
|
|
platforms, enhancing user experience and simplifying data capture.
|
|
|
|
|
|
|
|
2. *Reusability and Adaptability*: Customizable templates allow for the
|
|
|
|
creation of consistent and repeatable survey formats suitable for various
|
|
|
|
applications.
|
|
|
|
|
|
|
|
3. *Data Synthesis*: It supports combining data from multiple questionnaires
|
|
|
|
into a single study, providing broader and more comprehensive analytical
|
|
|
|
insights.
|
|
|
|
|
|
|
|
4. *Privacy and Control*: With self-hosting, the software ensures complete data
|
|
|
|
sovereignty and enhances privacy, avoiding the need to transfer sensitive
|
|
|
|
data to external servers.
|
2024-06-17 18:56:47 +02:00
|
|
|
|
2024-12-10 14:05:57 +01:00
|
|
|
5. *Accessibility*: The application is designed following the Web Content
|
|
|
|
Accessibility Guidelines (WCAG) provided by WebAIM, ensuring that the survey
|
|
|
|
is accessible to all users, including those with disabilities. This includes
|
|
|
|
features such as keyboard navigation, screen reader compatibility, and high
|
|
|
|
contrast modes to accommodate users with varying needs and abilities.
|
2024-06-22 13:12:05 +02:00
|
|
|
|
2024-06-24 19:05:09 +02:00
|
|
|
** Features
|
|
|
|
|
|
|
|
1. *Questionnaires*: Questionnaires can be defined using a Domain-Specific
|
|
|
|
Language (DSL) developed for dev.metalisp.sbt. The benefit of defining forms
|
|
|
|
in files is that they can be versioned using GIT, providing better control
|
|
|
|
over changes and updates.
|
|
|
|
|
|
|
|
2. *Simplicity*: All data is saved to files, eliminating the need for a
|
|
|
|
database. This reduces costs for self-hosting and simplifies the setup and
|
|
|
|
maintenance of the application.
|
|
|
|
|
2024-06-09 14:13:23 +02:00
|
|
|
** Dependencies
|
2024-06-09 14:08:37 +02:00
|
|
|
- https://github.com/edicl/hunchentoot
|
2024-12-09 22:07:02 +01:00
|
|
|
- [[https://code.metalisp.dev/marcuskammer/dev.metalisp.sbt]]
|
2025-01-24 15:08:44 +01:00
|
|
|
- [[https://code.metalisp.dev/marcuskammer/dev.metalisp.qmetrics]]
|
2024-06-09 14:45:45 +02:00
|
|
|
** News Feed
|
2024-12-09 22:05:31 +01:00
|
|
|
- [[https://code.metalisp.dev/marcuskammer/dev.metalisp.survey.rss]]
|
2025-02-16 20:06:39 +01:00
|
|
|
- [[https://code.metalisp.dev/marcuskammer/dev.metalisp.survey.atom]]
|
2024-10-06 10:10:10 +02:00
|
|
|
** XMPP (Jabber) Chat
|
2025-01-24 15:08:44 +01:00
|
|
|
#+begin_example
|
|
|
|
metalisp@conference.mailbox.org
|
|
|
|
#+end_example
|
2024-06-09 14:58:56 +02:00
|
|
|
** Installation instructions
|
2024-06-23 13:44:33 +02:00
|
|
|
*** Without using Quicklisp :noexport:
|
2024-06-23 13:37:21 +02:00
|
|
|
**** 1. Install a Common Lisp implementation
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
- Ensure you have a Common Lisp implementation installed. Common options
|
|
|
|
include SBCL (Steel Bank Common Lisp) and CCL (Clozure Common Lisp). You
|
|
|
|
can download and install them from their respective websites:
|
|
|
|
|
|
|
|
- [[http://www.sbcl.org/][SBCL]]
|
|
|
|
- [[https://ccl.clozure.com/][CCL]]
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
**** 2. Set up ASDF
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
- ASDF is typically bundled with modern Lisp implementations. However, if
|
|
|
|
it's not present, you can download it from [[https://gitlab.common-lisp.net/asdf/asdf][ASDF's repository]].
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
**** 3. Organize the project directory
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
- Place the =dev.metalisp.survey= project in the =~/common-lisp=
|
|
|
|
directory. Ensure the directory structure looks like this:
|
|
|
|
|
|
|
|
#+BEGIN_EXAMPLE
|
|
|
|
~/common-lisp/
|
|
|
|
└── dev.metalisp.survey/
|
|
|
|
├── dev.metalisp.survey.asd
|
|
|
|
└── src/
|
2024-06-09 15:01:58 +02:00
|
|
|
└── app.lisp
|
2024-06-09 14:58:56 +02:00
|
|
|
#+END_EXAMPLE
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
**** 4. Configure ASDF to find the project
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
- Open your Common Lisp REPL and run the following commands to set up the
|
|
|
|
ASDF central registry:
|
|
|
|
|
|
|
|
#+BEGIN_SRC lisp
|
|
|
|
;; Ensure ASDF is loaded
|
|
|
|
(require :asdf)
|
|
|
|
|
|
|
|
;; Add ~/common-lisp to the ASDF central registry
|
|
|
|
(push #p"~/common-lisp/" asdf:*central-registry*)
|
|
|
|
#+END_SRC
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
**** 5. Load the project
|
2024-06-09 14:58:56 +02:00
|
|
|
|
2024-06-09 15:01:58 +02:00
|
|
|
- In your REPL, load the project by running:
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
#+BEGIN_SRC lisp
|
|
|
|
(asdf:load-system :dev.metalisp.survey)
|
|
|
|
#+END_SRC
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
**** 6. Run the project
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
- After loading the system, you can run the main function or entry point of
|
2024-06-09 15:01:58 +02:00
|
|
|
the project.
|
2024-06-09 18:40:24 +02:00
|
|
|
=ml-survey:start=, you would execute:
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
#+BEGIN_SRC lisp
|
2024-06-09 18:40:24 +02:00
|
|
|
(ml-survey:start)
|
2024-06-09 14:58:56 +02:00
|
|
|
#+END_SRC
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
**** Optional: Example Initialization in .sbclrc
|
2024-06-09 14:58:56 +02:00
|
|
|
|
|
|
|
To make the ASDF configuration persistent across REPL sessions, you can add the
|
|
|
|
setup to your =.sbclrc= file:
|
|
|
|
|
|
|
|
1. Edit =.sbclrc=
|
|
|
|
- Open (or create) the =.sbclrc= file in your home directory and add the
|
|
|
|
following lines:
|
|
|
|
|
|
|
|
#+BEGIN_SRC lisp
|
|
|
|
(require :asdf)
|
|
|
|
(push #p"~/common-lisp/" asdf:*central-registry*)
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
2. Reload SBCL
|
|
|
|
- The next time you start SBCL, it will automatically include the
|
|
|
|
=~/common-lisp= directory in the ASDF central registry.
|
|
|
|
|
2024-06-23 13:37:21 +02:00
|
|
|
*** With using Quicklisp
|
|
|
|
|
|
|
|
Quicklisp is a highly recommended library manager for Common Lisp capable of
|
|
|
|
streamlining the process of installing and maintaining libraries. It simplifies
|
|
|
|
downloading, building, and loading libraries with a minimal fuss and supports
|
|
|
|
command line interaction.
|
|
|
|
|
2024-06-23 13:44:33 +02:00
|
|
|
This guide will demonstrate how to install Quicklisp on both Linux and Windows
|
|
|
|
operating systems.
|
2024-06-23 13:37:21 +02:00
|
|
|
|
|
|
|
**** Why Use Quicklisp?
|
|
|
|
|
|
|
|
Quicklisp offers several advantages for Common Lisp development:
|
|
|
|
- *Ease of Use:* It simplifies the installation process of common Lisp
|
|
|
|
libraries, handling dependencies automatically.
|
|
|
|
- *Extensive Library Collection:* Quicklisp connects to a vast repository of
|
|
|
|
libraries, making it easy to find and install almost any library you need for
|
|
|
|
a project.
|
|
|
|
- *Regular Updates:* Quicklisp updates its library list monthly, so you always
|
|
|
|
have access to the latest versions.
|
|
|
|
- *Integration:* It integrates well with many Lisp environments and tools,
|
|
|
|
enhancing your development workflow.
|
|
|
|
|
|
|
|
**** On Linux
|
|
|
|
|
|
|
|
1. *Install a Common Lisp implementation:*
|
|
|
|
For example, to install SBCL:
|
|
|
|
#+begin_src bash
|
|
|
|
sudo apt-get install sbcl
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
2. *Download Quicklisp Installer:*
|
|
|
|
Open a terminal and run:
|
|
|
|
#+begin_src bash
|
|
|
|
curl -O https://beta.quicklisp.org/quicklisp.lisp
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
3. *Install Quicklisp:*
|
|
|
|
With Lisp implementation installed (e.g., SBCL), run:
|
|
|
|
#+begin_src bash
|
2024-12-09 22:15:32 +01:00
|
|
|
sbcl --noinform --load quicklisp.lisp --eval "(quicklisp-quickstart:install)" --eval "(ql-util:without-prompting (ql:add-to-init-file))" --non-interactive
|
2024-06-23 13:37:21 +02:00
|
|
|
#+end_src
|
|
|
|
|
2024-06-23 13:44:33 +02:00
|
|
|
**** Load dev.metalisp.survey
|
|
|
|
|
2025-01-24 20:44:47 +01:00
|
|
|
1. Clone this repository and dependecies
|
2024-06-23 13:44:33 +02:00
|
|
|
#+begin_src shell
|
2025-01-24 20:44:47 +01:00
|
|
|
git clone https://code.metalisp.dev/marcuskammer/dev.metalisp.sbt.git ~/quicklisp/local-projects/
|
|
|
|
git clone https://code.metalisp.dev/marcuskammer/dev.metalisp.qmetrics.git ~/quicklisp/local-projects/
|
|
|
|
git clone https://code.metalisp.dev/marcuskammer/dev.metalisp.survey.git ~/quicklisp/local-projects/
|
2024-06-23 13:44:33 +02:00
|
|
|
#+end_src
|
|
|
|
|
|
|
|
2. Start sbcl and load dev.metalisp.survey
|
2025-01-24 20:44:47 +01:00
|
|
|
#+begin_src lisp
|
2024-06-23 13:44:33 +02:00
|
|
|
(ql:quickload :dev.metalisp.survey)
|
|
|
|
#+end_src
|
2025-01-24 20:44:47 +01:00
|
|
|
|
|
|
|
3. Start the web server
|
|
|
|
#+begin_src lisp
|
|
|
|
(ml-survey/app:start)
|
|
|
|
#+end_src
|
|
|
|
|
2024-07-06 13:27:32 +02:00
|
|
|
** Screenshot
|
2024-07-06 13:30:08 +02:00
|
|
|
[[https://git.sr.ht/~marcuskammer/dev.metalisp.survey/blob/main/screenshot.png]]
|
2024-06-09 14:13:23 +02:00
|
|
|
** License
|
2024-07-06 13:46:23 +02:00
|
|
|
*** MIT
|
|
|
|
|
|
|
|
Copyright (c) 2024 Marcus Kammer
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
a copy of this software and associated documentation files (the
|
|
|
|
"Software"), to deal in the Software without restriction, including
|
|
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
|
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
|
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
|
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|