SKRID Platform is an interface to a graph database designed to explore musical patterns in music scores.
.
├── assets/
│ ├── acoustic_gra.../ Sounds for the piano keys
│ ├── data/ Data for the app
│ ├── public/ Contain images for the piano interface
│ ├── scripts/ Client-side javascript
│ └── styles/ CSS files
│
├── docs/ Contain the documentation (when generated)
├── config/ Neo4j configurations
├── views/ HTML pages
│
├── compilation_requete_fuzzy/ git submodule from https://github.com/aa196883/compilation_requete_fuzzy (python backend)
│
├── index.js Server-side main file
│
├── jsdoc.json Configuration for the documentation tool (jsdoc)
├── package.json npm configuration
│
├── loadAllDB.sh Load data to neo4j database
├── post_a_query.sh Send a query from a .cypher file using curl
│
├── TODO.md
└── README.md
Download the project and its submodule :
git clone https://github.com/lasercata/SKRIDPlatform.git
cd SKRIDPlatform/
# Need access to the repo https://github.com:aa196883/compilation_requete_fuzzy
git submodule update --init --recursive
Install node dependencies (it will create the node_modules
directory) :
npm install
To generate the documentation, run :
npm run generate-docs
Then open docs/index.html
with your browser.
Download neo4j-desktop (keep the activation code and paste it when launching the application).
In the application, create a new project, and add a database (add
button, then local DBMS
).
Choose a name (SKRID_db for example), and a password (at least 8 characters). Remember the password, it will be needed later (see Generate files).
Then select the version 4.2.1
.
When this is done, click on the name, then on the right click on Plugins
. Install APOC
.
Then click on ...
, then Settings
, and replace the configuration with the content of config/neo4j.conf
.
Finally you can launch the database with the Start
button.
To test queries, you can use the Open
button that will create a window with a query prompt.
Now that the database is ready, let's generate the data to fill it.
Dependencies :
cypher-shell
to populate the database (possible to avoid this by pasting the content ofassets/data/load_all_DB.cql
in the neo4j prompt) ;verovio
to convert the sources into mei and other file formats ;mscore
to do some conversions (try packagemusescore
in your Linux distribution) ;musicxml2ly
to convert musicXML to lilypond ;Musypher
to create the cypher dump from the MEI. It is not needed to download it, it is done automatically.
After getting cypher-shell
, make sure to add it to the PATH, or do the following :
sudo ln -s /bin/cypher-shell /absolute/path/to/bin/cypher-shell
Then you can run :
./loadAllDB.sh
This will ask for the neo4j password that you created in Create database.
The password will be stored in the file .database_password
in order for the application (index.js
) to communicate with the database.
Then the script will :
- generate the needed files from the sources (conversion from sources and creation of cypher dumps, see the data README for details) ;
- clear the database ;
- populate the database.
Note that this will take time - 20 to 30 minutes on my computer.
Now that the setup is finished, let's run the app !
-
If the database was stopped, start it (
Start
button in the neo4j desktop application). -
Then launch the
nodejs
server :
node index.js
To keep the logs :
node index.js >> skrid.log
It will print something like Server listening on port 3000
.
To test locally, open the following url in your browser : localhost:3000
(change the port accordingly to the previous result).
To read what has changed in this project, see the CHANGELOG
For known bugs and uncovered parts, see TODO.
To add a database, follow the instructions in the data README
If index.js
has been modified, it is needed to restart node index.js
. Otherwise it is just needed to refresh the web page.
Inside the submodule, it is the same as in a normal git repository.
From the main repository, the submodule folder is seen as a file. This "file" is seen as "modified" when there are new commits inside the submodule.
The submodule is fixed at a given commit.
To make changes to the submodule, it is preferable to have a distinct clone (i.e an other local copy of it).
To update the submodule (there are new commits from the remote) :
cd compilation_requete_fuzzy/ # go in the submodule
git checkout main # go the main branch
git pull # get the new commits on main
cd .. # go back to the main repository
git add compilation_requete_fuzzy # add the modifications of the "file" (the submodule)
git commit -m "Update fuzzy version"
git push