Author Archives: renaud

đŸŽČ DicelyVerse – Your Ultimate Dice Companion for RPGs!

Level up your tabletop RPG experience with Dice Roller 3D!
Whether you’re deep into D&D, Pathfinder, or your favorite homebrew system, DicelyVerse gives you all the power of physical dice and more—right in your pocket.

https://play.google.com/store/apps/details?id=org.rolisteam.dicelyverse


🚀 Core Features

🌀 3D Dice Rolling Engine
Feel the thrill of real dice physics with stunning 3D visuals. Roll multiple dice with satisfying animations.

💬 Roll Dice with Commands
Type d20+5 or any custom command to get your results instantly. Supports advanced syntax for complex rolls!
The command engine is DiceParser.
See the documentation here.

🔁 Reroll with Ease
Need a second chance? Reroll instantly without retyping your command or resetting your dice.

📩 Macros – One Tap Commands
Save your favorite or frequently used dice rolls as macros for quick access. Perfect for initiative rolls, attack rolls, and spell damage!

✍ Aliases – Shortcuts for Long Commands
Tired of long roll strings? Set up aliases to keep your gameplay fast and your input clean.

📖 Character Sheet Integration
Store your character’s stats, modifiers, and abilities directly in the app. Pull values into rolls on the fly.

đŸ‘„ Multiple Profiles
Play multiple campaigns or characters? No problem. Create separate profiles to keep everything organized.

🌘 Dark Mode
Change the UI to dark mode or light mode on the fly (no need to restart).

🌐 Translation
DicelyVerse
has translations available now: English, German, French, Italian, Spanish and Portuguese.


đŸŽ„ Watch it in Action!

đŸ“ș Check out our YouTube demo video showcasing the app’s features and real-time gameplay experience:

 

 


đŸ“± Download Now on Android!

Simplify your tabletop experience. Make every roll count—with flair.

https://play.google.com/store/apps/details?id=org.rolisteam.dicelyverse


Qt Creator plugin : Simple all-in-one QML editor

Hello all,

I would like to show you my first QtCreator plugin. It is an all-in-one window to test Qml Code.

How often do you run into issue about QML code; not doing exactly what you want ?

Demo:

 

 

Examples demo:

 

Here it a simple tool to test quickly some QML code. No need to create a new Test Project.
Open the plugin, type or copy/paste your code, do some changes until it does what you want.

It is mostly inspired from some Qml online site, but it is available directly into QtCreator.

 

Git repo: https://github.com/obiwankennedy/QmlSampleEditor

Download: https://github.com/obiwankennedy/QmlSampleEditor/actions/runs/

Horloge parlante Ă  la demande

Bonjour Ă  tous!

Dans la série des projets un peu fou, je voudrais vous parler de mon horloge parlante !?

D’abord, un peu de contexte. Depuis peu, je frĂ©quente un serveur discord (The language sloth) dĂ©diĂ© Ă  l’apprentissage des langues.
Je participe Ă  ma hauteur pour aider les dĂ©butants en français. Ce n’est pas mon mĂ©tier mais l’ambiance est assez cool.

De coup, je me suis dit un peu renseigner sur les connaissances Ă  avoir pour obtenir le niveau A1 (le minimum).
Il y a comprendre l’heure. Sur ce constat, j’ai dĂ©marrĂ© un petit projet pour proposer un systĂšme capable de sortir un fichier audio pour chaque heure de la journĂ©e.
Et de proposer l’ensemble des façons de dire l’heure.

Le code:
Pour mes petits scripts, j’aime bien utiliser du python. Ici, mon petit script python permet d’enregistrer facilement les samples nĂ©cessaires pour bĂątir l’ensemble de donnĂ©es.
Ce travail construit les donnĂ©es d’une voix.
Il y a 28 mots Ă  enregistrer:

unity=["un","une","deux","trois","quatre","cinq","six","sept","huit","neuf"]
tens=["dix","onze","douze","treize","quatorze","quinze","seize","vingt","trente","quarante","cinquante"]
words=["midi","minuit","et","quart","moins", "heure", "le"]
Les samples Ă  enregistrer

 

Le site:
Le reste de l’application est constituĂ© d’un site web qui permet de choisir une voix, et une heure.
Suite Ă  cela, le site affiche un ou deux lecteurs audios pour permettre la lecture des sons.
J’ai recyclĂ© l’architecture php de mes sites applicatifs. Je la trouve vraiment formidable. MĂȘme si, je trouve le PHP de plus en plus dĂ©gueulasse.

Pour la suite, j’aimerai bien «gamifier» la chose. Permettre d’entendre une heure et de choisir la bonne valeur parmi trois propositions. Jouer avec ce genre d’Ă©lĂ©ments.

Si vous testez le site, pensez Ă  mettre le son pas trop fort.

 

Conclusion:
J’avais cette idĂ©e de partir des samples pour construire les messages audios qui traĂźner dans ma tĂȘte depuis un moment. J’avais envie de tester ce que cela donnerait d’enregistrer 28 samples environ pour gĂ©nĂ©rer 1560 fichiers audios. J’ai dĂ©cidĂ© de l’Ă©crire et voilĂ  le rĂ©sultat. La curiositĂ© s’attardait sur la qualitĂ© qu’on pourrait obtenir avec cette mĂ©thode. C’est audible, il y a quelques sont qui mĂ©riterait d’ĂȘtre retravailler mais dans l’ensemble, cela remplit son rĂŽle.
Je serai ravi de recevoir de nouvelles voix. Vous pouvez m’envoyer vos 28 samples et je peux m’occuper du reste.

Les liens:
Le projets en ligne: http://heures.renaudguezennec.eu/
Le code source du projet: https://github.com/obiwankennedy/french_talking_clock_game

Gérer les préférences utilisateurs en C++

Aujourd’hui, nous allons voir comment sont gĂ©rĂ©es les prĂ©fĂ©rences dans Rolisteam (et plus gĂ©nĂ©ralement dans mes dĂ©veloppements).

Quels contenus sont gérés dans les Préférences ?

Les prĂ©fĂ©rences conservent l’ensemble des Ă©lĂ©ments qu’un utilisateur peut dĂ©finir pour changer le comportement de l’application.

Dans Rolisteam, il est possible de dĂ©finir le thĂšme de l’application, la couleur du brouillard de guerre pour les cartes, la valeur de son opacitĂ©, Activer/dĂ©sactiver la recherche de mise Ă  jour, le lancement en plein Ă©cran, des alias de dĂ©s etc.

La problématique

La principale difficultĂ© est de rendre accessible en lecture et en Ă©criture les prĂ©fĂ©rences pour l’ensemble de l’application.
En parallĂšle, la fenĂȘtre de prĂ©fĂ©rences doit permettre d’afficher et de modifier toutes les valeurs.
Il est important de ne conserver qu’une version de donnĂ©es afin d’Ă©viter des incohĂ©rences. L’autre objecti est de rĂ©ussir Ă  notifier les utilisateurs d’une donnĂ©e aprĂšs son changement.

La solution

Pour rĂ©pondre Ă  ces problĂ©matiques, j’ai Ă©crit la classe PreferencesManager. Elle est fondĂ©e sur le patron de conception: Singleton.
Le but de ce patron est de s’assurer de l’unicitĂ© d’une instance de classe. Cela permet de garantir que les valeurs sera bien la mĂȘme pour tout le monde: les composants de l’application et le panneau de prĂ©fĂ©rences.

Pour réaliser un singleton, il est nécessaire de mettre les éléments suivants:

class PreferencesManager
{
public:
    /**
    * @brief Must be called instead of the constructor.
    *
    * @return instance of PreferencesManager
    */
    static PreferencesManager* getInstance();
    /**
    * @brief  desturctor
    */
    ~PreferencesManager();
private:
    /**
    * @brief Private constructor to make sure there is only one instance of this.
    */
    PreferencesManager();
private:
    /**
    * Static reference, part of the singleton pattern
    */
    static PreferencesManager* m_singleton;
};
Code d'un Singleton

CÎté implémentation, cela donne ceci:

PreferencesManager* PreferencesManager::m_singleton = NULL;


PreferencesManager* PreferencesManager::getInstance()
{
    if(m_singleton == NULL)
    {
        m_singleton = new PreferencesManager;
    }
    
    return m_singleton;
}
Implémentation Singleton

La classe PreferencesManager conserve l’ensemble des donnĂ©es dans une map.

QMap<QString,QVariant>* m_optionDictionary;
structure de données

 

 

QML – Tutoriel 4 – Bindings et les mĂ©thodes de travail

Bindings + Méthode de travail:
Notions abordées:
-Les syntaxes pour le Binding

Le code de la présentation: https://github.com/obiwankennedy/Learn-Qt
Le code de l’exercice: 04_exercice_binding
La correction sera dans le prochain épisode.

 

Lien youtube: https://youtu.be/A-SMHKkH19U

Supporter le logiciel et la chaĂźne: https://liberapay.com/Rolisteam/donate
Rolisteam: http://www.rolisteam.org/

QML – Tutoriel 3 – Les attributs

Les attributs:
Notions abordées:
-id
-Propriétés
-Signaux
-Gestionnaire de Signaux
-Gestionnaires et propriétés groupés.
-méthodes
-Enumération

Fichier à télécharger: 03_attributs

Le code de la présentation: https://github.com/obiwankennedy/Learn-Qt

 

Lien youtube: https://youtu.be/tDSVlrsQJU0

QML – Tutoriel 2 – Le positionnement

Le positionnement:
-Apprenez à positionner vos éléments.
Notions abordées:
-Positionnement absolue
-Ancres
-Les positionneurs
-Les layouts
Le code de la présentation: https://github.com/obiwankennedy/Learn-Qt

Ressources du tutoriel: 03_positionnement

 

Lien youtube: https://youtu.be/QDbn1CDjc14

Supporter le logiciel et la chaĂźne: https://liberapay.com/Rolisteam/donate
Rolisteam: http://www.rolisteam.org/

QML – Tutoriel 1 – Introduction

Introduction:
-Apprenez Ă  installer les outils pour programmer en QML.
-CrĂ©ation d’un projet QML.
-Découverte du premier programme.
-Introduction des types de base du QML (Item, Rectangle, Image, Text, TextInput, TextArea, MouseArea, Timer, Flickable)

 

 

TĂ©lĂ©chargez les ressources de l’épisode

Liens Utiles:
Qt: https://www.qt.io/download
RCSE: http://www.rolisteam.org/download.html (Lire attentivement en fonction de vos plate formes)
Le code de la présentation: https://github.com/obiwankennedy/Learn-Qt

Exemple QML:
https://www.youtube.com/results?search_query=qml+example

Lien youtube: https://youtu.be/8moq00ofQPY

Supporter le logiciel et la chaĂźne: https://liberapay.com/Rolisteam/donate
Rolisteam: http://www.rolisteam.org/

Atelier QML à Pas Sage En Seine 2017

Bonjour,

J’ai organisĂ© un atelier Ă  Pas Sage En Seine en juin 2017.
J’ai enfin le temps de m’occuper de mettre en ligne les Ă©lĂ©ments de formation.
Je mets Ă  disposition les supports de cet atelier.
Il y a une présentation PDF et un projet regroupant les exercices et les solutions.

La présentation est en réalité une application QML. Son code est disponible ici: https://github.com/obiwankennedy/Learn-Qt
Cela constitue en soit un bon exercice que d’arriver à la lancer sur votre ordinateur.

N’hĂ©sitez pas Ă  me contacter pour poser des questions.
Je ferais peut-ĂȘtre une vidĂ©o de la formation.

Liens:

Mettre Ă  jour Postgresql sur debian Stretch

Stretch

Nous allons voir comment mettre Ă  jour votre base de donnĂ©es postgresql aprĂšs l’update de Jessie Ă  Stretch.
La version de jessie était 9.4. La version pour Stretch est 9.6.

Les commandes suivantes sont exécutées en root. Vous pouvez bien sûr utiliser sudo.

Lister les clusters postgresql installés sur votre machine:

# pg_lsclusters

Si votre installation de postgresql date de Jessie vous aurez un truc comme cela.

Ver Cluster Port Status Owner Data directory Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.6 main    5433 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

 

Si vous n’avez pas fait la mise à jour de votre cluster aprùs la mise à jour de wheezy vers jessie. Vous devriez voir un truc dans ce style la.

Ver Cluster Port Status Owner Data directory Log file
9.1 main    5432 online postgres /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log
9.4 main    5433 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.6 main    5434 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Le port par défaut de postgresql est le 5432.  Le cluster ayant 5432 comme port est votre cluster courant.

Normalement Debian installe la nouvelle version de postgresql à la mise à jour de version et il crée un nouveau cluster dans la foulée.
Si ce n’est pas le cas, vous pouvez l’installer par cette ligne:

# apt-get install postgresql-9.6

Supprimer le cluster postgresql 9.6 créé

Installer une nouvelle version de postgresql sur debian crĂ©e un cluster principal (main) qui empĂȘche la commande pg_upgradecluster de fonctionner.

Il faut donc supprimer cette instance dans le but d’obtenir une base de donnĂ©es propre.
Faite trĂšs attention, ne vous tromper pas dans la commande.
Ne supprimer surtout pas votre vieille base de donnĂ©es. C’est elle qui contient toutes vos donnĂ©es. 🙂

Nous détruisons la nouvelle; la vide.

# pg_dropcluster --stop 9.6 main

Mettre Ă  jour la vieille base vers le nouveau format

La syntaxe est la suivante:

# pg_upgradecluster -v NouvelleVersion AncienneVersion main

La fonction va créer un nouvelle base main dans le format NouvelleVersion.
Pour ensuite, copier les données de AncienneVersion vers NouvelleVersion.
Cela prendra un peu de temps.

# pg_upgradecluster -v 9.6 9.4 main
Stopping old cluster...
Notice: extra pg_ctl/postgres options given, bypassing systemctl for stop operation
Disabling connections to the old cluster during upgrade...
Restarting old cluster with restricted connections...
Redirecting start request to systemctl
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5434
Disabling connections to the new cluster during upgrade...
Redirecting start request to systemctl
Roles, databases, schemas, ACLs...
Fixing hardcoded library paths for stored procedures...
Upgrading database pbf...
Analyzing database pbf...
Fixing hardcoded library paths for stored procedures...
Upgrading database template1...
Analyzing database template1...
Fixing hardcoded library paths for stored procedures...
Upgrading database livres...
Analyzing database livres...
Fixing hardcoded library paths for stored procedures...
Upgrading database cmdline...
Analyzing database cmdline...
Fixing hardcoded library paths for stored procedures...
Upgrading database systemtest...
Analyzing database systemtest...
Fixing hardcoded library paths for stored procedures...
Upgrading database creatures...
Analyzing database creatures...
Fixing hardcoded library paths for stored procedures...
Upgrading database articles...
Analyzing database articles...
Fixing hardcoded library paths for stored procedures...
Upgrading database postgres...
Analyzing database postgres...
Fixing hardcoded library paths for stored procedures...
Upgrading database campagnes...
Analyzing database campagnes...
Fixing hardcoded library paths for stored procedures...
Upgrading database animations...
Analyzing database animations...
Fixing hardcoded library paths for stored procedures...
Upgrading database asso_member...
Analyzing database asso_member...
Re-enabling connections to the old cluster...
Re-enabling connections to the new cluster...
Copying old configuration files...
Copying old start.conf...
Copying old pg_ctl.conf...
Copying old server.crt...
Copying old server.key...
Stopping target cluster...
Redirecting stop request to systemctl
Stopping old cluster...
Redirecting stop request to systemctl
Disabling automatic startup of old cluster...
Configuring old cluster to use a different port (5434)...
Starting target cluster on the original port...
Redirecting start request to systemctl
Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with

pg_dropcluster 9.4 main

Supprimer l’ancienne version

Si la copie s’est bien passĂ©e. Vous pouvez supprimer l’ancienne version. Elle est maintenant entiĂšrement copiĂ© dans le cluster main 9.6.

# pg_dropcluster 9.4 main