Mise en place d’un espace de formation virtuel basé sur OpenSim
27/03/2024Je viens de monter un Monde virtuel de simulation et formations en ligne.
Projet basé sur OpenSimulator fonctionnant dans un container Docker en mode R.O.B.U.S.T.
Archive of articles classified as' "Le Blog"
Back homeJe viens de monter un Monde virtuel de simulation et formations en ligne.
Projet basé sur OpenSimulator fonctionnant dans un container Docker en mode R.O.B.U.S.T.
Tous mes outils perso sont en Ruby, j’affectionne ce language élégant et souple.
La solution par défaut avec Ruby est Rails, le Framework Web. J’utilise Rails pour des projets lourds et compliqués. Dans le cas de cette petite appli perso, j’avais besoin d’un système plus léger : Sinatra !
Sinatra est un Langage dédié qui permet de faire tourner une appli Web basée sur du Ruby.
Le projet est basé sur la version 2.4.0 de Ruby.
Le contrôleur écrit en Ruby est ridicule, il me permet juste d’interroger une base de données et d’alimenter une vue.
La base de données (MySQL) contient une liste d’articles classés en catégories.
Le stockage local de la liste ainsi composée à partir d’une selection d’articles est au format Web SQL.
La couche Javascript basée sur jQuery est assez lourde car c’est elle qui s’occupe des mouvements des enregistrements dans la base locale du navigateur.
db.transaction(function (tx) {
tx.executeSql(‘INSERT INTO bdd (article_id, article, description, categorie_id) VALUES (?,?,?,?)’, [id,product,description,category]);
});
La couche CSS est écrite en Sass et pilote les swipe d’écran.
La version du gem pour l’accès à la base de données MySQL du serveur doit être spécifiée dans le gemfile pour que cela fonctionne. (Un bug de ruby 2.4.0 avec la dernière version du gem mysql2…
gem ‘mysql2’, ‘~> 0.3.18’
Pour obtenir une navigation fluide entre les écrans, j’ai du ‘tricher’ en repositionnant les écrans vers la gauche pour les masquer du body et ainsi éviter que le scroll ne les affiches.
@keyframes move-d {
0% { transform: translateX(0); }
99% { transform: translateX(100%); animation-duration: 500ms; }
100% { transform: translateX(-100%); animation-duration: 0s; }
}
Sur le serveur, dans un dossier prévu au stockage des projets
« chemin » -> chemin relatif ou absolu vers le dossier principal,
« projet » -> comme nom du projet.
« serveur » -> pour identifier le serveur (ip ou nom)
mkdir /chemin/projet
chmod -R 777 /chemin/projet
cd /chemin/projet
git –bare init –shared=true
(bare pour la création d’un archive, shared pour autoriser le partage)
touch /chemin/projet/.git/git-daemon-export-ok
(Le projet doit contenir le fichier git-daemon-export-ok pour autoriser l’export distant)
git daemon –reuseaddr –base-path=/chemin –export-all –enable=receive-pack
(–enable=receive-pack pour autoriser l’écriture)
-> On obtient alors l’url suivante l’accès au projet : git://serveur/projet
git init
git add ./
git status
git commit -m « Message »
(Cette première étape ne change pas, c’est un commit local normal)
git remote add « Nom identifiant le dépôt distant » git://serveur/projet
(On ajoute un dépôt distant)
git push « Nom identifiant le dépôt distant » master
(On pousse les changement sur le serveur)
En cadeau : mon script bash qui permet la création des projets et qui pilote le serveur :
#!/bin/bash create(){ if [ -z "$REP" ] then printf "[Création du dépôt] Nom du dépôt : " read REP fi mkdir $FOLDER/$REP chmod -R 777 $FOLDER/$REP cd $FOLDER/$REP git --bare init --shared=true touch $FOLDER/$REP/.git/git-daemon-export-ok } start(){ git daemon --reuseaddr --base-path=$FOLDER --export-all --enable=receive-pack & echo $! > /tmp/git.pid } stop(){ PID=$(cat /tmp/git.pid) kill -15 $PID 2> /dev/null rm /tmp/git.pid 2> /dev/null } # DEMARRAGE #--------------------------------------- REP=$2 FOLDER="/chemin_archives/Git" case $1 in 'start') start 2> /dev/null;; 'stop') stop 2> /dev/null;; 'create') create 2> /dev/null;; *) echo "usage $0 start|stop" ;; esac