{"id":6633,"date":"2024-12-27T16:01:51","date_gmt":"2024-12-27T15:01:51","guid":{"rendered":"https:\/\/olivier.hoarau.site\/?p=6633"},"modified":"2024-12-29T19:34:59","modified_gmt":"2024-12-29T18:34:59","slug":"garmin-instinct-2-surf-edition-watch-face","status":"publish","type":"post","link":"https:\/\/olivier.hoarau.org\/?p=6633","title":{"rendered":"Garmin Instinct 2 Surf Edition watch face"},"content":{"rendered":"\n<p>Pour faire suite \u00e0 <a href=\"https:\/\/olivier.hoarau.org\/?p=6583\">mon post<\/a> sur le <a href=\"https:\/\/developer.garmin.com\/connect-iq\/overview\/\">SDK<\/a> pour pouvoir personnaliser une montre Garmin, j&rsquo;ai travaill\u00e9 quelque peu le sujet pour aboutir \u00e0 cette nouvelle version du design.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"328\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?resize=474%2C328&#038;ssl=1\" alt=\"\" class=\"wp-image-6634\" srcset=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?resize=1024%2C709&amp;ssl=1 1024w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?resize=300%2C208&amp;ssl=1 300w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?resize=768%2C532&amp;ssl=1 768w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?w=1500&amp;ssl=1 1500w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?w=948&amp;ssl=1 948w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/connectiq-funixv2.jpg?w=1422&amp;ssl=1 1422w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/a><\/figure>\n\n\n\n<p>Pour r\u00e9sumer j&rsquo;ai rajout\u00e9 deux jauges en forme d&rsquo;arc, celle sur la gauche pour la charge batterie et l&rsquo;autre sur la droite pour le ratio entre le nombre de pas  et l&rsquo;objectif quotidien. J&rsquo;ai laiss\u00e9 tomber la jauge classique en forme de rectangle pour la batterie. J&rsquo;ai \u00e9galement rajout\u00e9 des fonts personnalis\u00e9s, notamment une font d\u00e9tour\u00e9e pour les minutes comme pour l&rsquo;affichage d&rsquo;origine de cette montre. J&rsquo;ai encore pas mal gal\u00e9r\u00e9 pour le rafra\u00eechissement des secondes avec la fonction <strong>onPartialUpdate<\/strong>, en fait c&rsquo;est tout simplement le chargement toutes les secondes de la font personnalis\u00e9e qui devait le perturber, j&rsquo;ai renvoy\u00e9 ce chargement \u00e0 l&rsquo;initialisation du programme. Il reste encore un artefact \u00e0 l&rsquo;affichage des secondes qui est pas vraiment g\u00eanant mais un brin inesth\u00e9tique, je ne suis \u00e9galement pas encore tr\u00e8s satisfait des fonts, j&rsquo;ai du mal \u00e0 trouver des fonts \u00e9troites pour l&rsquo;affichage des nombres, ces am\u00e9liorations feront l&rsquo;objet d&rsquo;une troisi\u00e8me version plus tard.<\/p>\n\n\n\n<p>Pour publier l&rsquo;application cr\u00e9\u00e9e dans le <a href=\"https:\/\/apps.garmin.com\/\">store Garmin<\/a>, il faut exporter le projet via la combinaison de touches <strong>CTRL+SHIFT+P<\/strong> et la commande <strong>Monkey C: Export Project <\/strong>dans la liste d\u00e9roulante. Cela va g\u00e9n\u00e9rer un fichier <strong>.iq<\/strong> qu&rsquo;on pourra t\u00e9l\u00e9charger ensuite sur le store pour mettre \u00e0 disposition l&rsquo;application. Concernant mon projet on le trouvera <a href=\"https:\/\/apps.garmin.com\/fr-FR\/apps\/1a508609-28d8-42a5-8f77-ce76c3e6c6fa\">ici<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Tant qu&rsquo;\u00e0 faire comme j&rsquo;ai cr\u00e9\u00e9 un <a href=\"https:\/\/github.com\/funix83\/Funix-Watch\">environnement github<\/a> pour partager le code, j&rsquo;ai cr\u00e9\u00e9 un d\u00e9p\u00f4t <strong>git<\/strong> local pour pouvoir le synchroniser avec le d\u00e9p\u00f4t distant. \u00c7a \u00e9tait plut\u00f4t laborieux et j&rsquo;ai fait sans doute plein de manips inutiles pour la bonne raison que mon d\u00e9p\u00f4t distant est <strong>main<\/strong> et il m&rsquo;a cr\u00e9\u00e9 un d\u00e9p\u00f4t local <strong>master<\/strong> et j&rsquo;ai d\u00fb tout remettre en place pour ne pas multiplier les branches.<\/p>\n\n\n\n<p>Difficile donc de d\u00e9crire toutes les \u00e9tapes pour la cr\u00e9ation de ce d\u00e9p\u00f4t local. Mais grosso modo apr\u00e8s avoir install\u00e9 <strong>git<\/strong>, il m&rsquo;a fallu cr\u00e9er un nom associ\u00e9 \u00e0 un mail :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git config --global user.name \"Funix\"\ngit config --global user.mail olivier.hoarau@funix.org<\/code><\/pre>\n\n\n\n<p>Ensuite on initialise le d\u00e9p\u00f4t avec<strong> git init<\/strong> et c&rsquo;est l\u00e0 que les choses se sont g\u00e2t\u00e9es pour moi car il a utilis\u00e9 <strong>master<\/strong> au lieu de <strong>main<\/strong>. En fait j&rsquo;aurais d\u00fb taper avant pour qu&rsquo;il prenne par d\u00e9faut la branche <strong>main<\/strong>  :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git config --global init.defaultBranch main<\/code><\/pre>\n\n\n\n<p>Maintenant on rajoute le d\u00e9p\u00f4t distant d\u00e9nomm\u00e9 <strong>origin<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git remote add origin https:\/\/github.com\/funix83\/Funix-Watch.git<\/code><\/pre>\n\n\n\n<p>Avant d&rsquo;aller plus loin on configure la connexion <strong>SSH<\/strong> pour pouvoir \u00e9changer le serveur distant en cr\u00e9ant une cl\u00e9 via la commande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -C \"olivier.hoarau@funix.org\"<\/code><\/pre>\n\n\n\n<p>On le rajoute dans l&rsquo;agent <strong>SSH<\/strong> pour ne pas avoir \u00e0 saisir le mot de passe \u00e0 chaque fois en tapant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-add ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p>Commande qu&rsquo;il faudra taper \u00e0 chaque reboot. Maintenant sous l&rsquo;interface sous <strong>github<\/strong> on rajoutera la cl\u00e9 publique dans <strong>Settings -&gt; SSH and PGP Keys<\/strong>. Pour v\u00e9rifier que la connexion est bien \u00e9tablie en <strong>SSH<\/strong>, on peut taper<strong> git remote -v <\/strong>qui va nous donner :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>origin  git@github.com:funix83\/Funix-Watch.git (fetch)\norigin  git@github.com:funix83\/Funix-Watch.git (push)<\/code><\/pre>\n\n\n\n<p>Il m&rsquo;a fallu d&rsquo;abord me connecter en <strong>SSH<\/strong> \u00e0 <strong>github<\/strong> pour initialiser la connexion et que les \u00e9changes soient possibles ensuite en tapant <strong>ssh -T git@github.com<\/strong>.<\/p>\n\n\n\n<p>Ensuite on se place dans le r\u00e9pertoire local du projet et on cr\u00e9e \u00e0 la racine du projet un fichier <strong>.gitignore<\/strong> qui contiendra la liste de tous les fichiers \u00e0 ne pas suivre (typiquement les binaires). On rajoute ensuite tous les fichiers du projet \u00e0 suivre avec un <strong>commit<\/strong> initial :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git add --all *\ngit commit -m \"initial commit\"<\/code><\/pre>\n\n\n\n<p>Et on synchronise avec un <strong>git push<\/strong>. Maintenant quand on travaille sur le projet en local en cr\u00e9ant et modifiant des fichiers, la commande<strong> git status <\/strong>me renvoie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Sur la branche main\nVotre branche est \u00e0 jour avec 'origin\/main'.\n\nModifications qui seront valid\u00e9es :\n  (utilisez \"git restore --staged &lt;fichier&gt;...\" pour d\u00e9sindexer)\n\tnouveau fichier&nbsp;: .gitignore\n\tnouveau fichier&nbsp;: resources\/fonts\/DejaVu25.fnt\n\tnouveau fichier&nbsp;: resources\/fonts\/DejaVu25_0.png\n\tnouveau fichier&nbsp;: resources\/fonts\/IndigoOutline44.fnt\n\tnouveau fichier&nbsp;: resources\/fonts\/IndigoOutline44_0.png\n\tnouveau fichier&nbsp;: resources\/fonts\/Samdan50.fnt\n\tnouveau fichier&nbsp;: resources\/fonts\/Samdan50_0.png\n\nModifications qui ne seront pas valid\u00e9es :\n  (utilisez \"git add &lt;fichier&gt;...\" pour mettre \u00e0 jour ce qui sera valid\u00e9)\n  (utilisez \"git restore &lt;fichier&gt;...\" pour annuler les modifications dans le r\u00e9pertoire de travail)\n\tmodifi\u00e9&nbsp;:         bin\/Funixwatch.prg\n\tmodifi\u00e9&nbsp;:         bin\/Funixwatch.prg.debug.xml\n\tmodifi\u00e9&nbsp;:         bin\/gen\/006-B3888-00\/source\/Rez.mcgen\n\tmodifi\u00e9&nbsp;:         bin\/internal-mir\/Rez.mir\n\tmodifi\u00e9&nbsp;:         bin\/mir\/source\/FunixWatch-wordApp.mir\n\tmodifi\u00e9&nbsp;:         bin\/mir\/source\/FunixWatch-wordView.mir\n\tmodifi\u00e9&nbsp;:         manifest.xml\n\tmodifi\u00e9&nbsp;:         resources\/fonts\/fonts.xml\n\tmodifi\u00e9&nbsp;:         resources\/layouts\/layout.xml\n\tmodifi\u00e9&nbsp;:         source\/FunixWatch-wordApp.mc\n\tmodifi\u00e9&nbsp;:         source\/FunixWatch-wordView.mc\n\nFichiers non suivis:\n  (utilisez \"git add &lt;fichier&gt;...\" pour inclure dans ce qui sera valid\u00e9)\n\tFunixwatch.prg\n\tFunixwatch.prg.debug.xml\n\tdeveloper_key\n\tgen\/\n\tinternal-mir\/\n\tmir<\/code><\/pre>\n\n\n\n<p>Je laisse les fichiers non suivis (binaires, etc.), il m&rsquo;a rajout\u00e9 en suivi automatiquement les nouveaux fichiers et je dois rajouter manuellement les fichiers modifi\u00e9s en tapant \u00e0 la racine du projet :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git add manifest.xml\ngit add resources\/fonts\/fonts.xml\ngit add resources\/layouts\/layout.xml\ngit add source\/FunixWatch-wordApp.mc\ngit add source\/FunixWatch-wordViewtati.mc<\/code><\/pre>\n\n\n\n<p>Je tape un <strong>commit<\/strong> pour valider les modifications :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git commit -m \"Rajout de jauge en forme d'arc pour batterie et les pas et nouvelles polices\"<\/code><\/pre>\n\n\n\n<p>et je fais un <strong>git push<\/strong> pour pousser vers le d\u00e9p\u00f4t distant. Si on modifie un fichier sur le d\u00e9p\u00f4t distant (le fichier <strong>README.md<\/strong>) par exemple, on tapera au contraire <strong>git pull<\/strong> pour mettre \u00e0 jour \u00e0 le d\u00e9p\u00f4t local.<\/p>\n\n\n\n<p>Autre commande utile pour savoir quels sont les fichiers qui sont suivis <strong>git ls-files<\/strong>, pour stopper le suivi on tapera <strong>git rm nom-du fichier<\/strong>.<\/p>\n\n\n\n<p>Pour plus d&rsquo;infos sur l&rsquo;utilisation de <strong>git<\/strong>, voil\u00e0 quelques sites int\u00e9ressants en fran\u00e7ais :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La <a href=\"https:\/\/docs.github.com\/fr\/get-started\/using-git\/about-git\">documentation<\/a><a href=\"https:\/\/docs.github.com\/en\/get-started\/using-git\/about-git\"> officielle<\/a> ;<\/li>\n\n\n\n<li>Le cours <a href=\"https:\/\/openclassrooms.com\/fr\/courses\/7162856-gerez-du-code-avec-git-et-github\">openclassrooms<\/a> ;<\/li>\n\n\n\n<li>Une<a href=\"https:\/\/laconsole.dev\/formations\/git-github\"> autre formation<\/a>.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour faire suite \u00e0 mon post sur le SDK pour pouvoir personnaliser une montre Garmin, j&rsquo;ai travaill\u00e9 quelque peu le sujet pour aboutir \u00e0 cette nouvelle version du design. Pour r\u00e9sumer j&rsquo;ai rajout\u00e9 deux jauges en forme d&rsquo;arc, celle sur la gauche pour la charge batterie et l&rsquo;autre sur la droite pour le ratio entre &hellip; <a href=\"https:\/\/olivier.hoarau.org\/?p=6633\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Garmin Instinct 2 Surf Edition watch face<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_share_on_mastodon":"0"},"categories":[5],"tags":[],"class_list":["post-6633","post","type-post","status-publish","format-standard","hentry","category-logiciels-libres"],"share_on_mastodon":{"url":"https:\/\/mastodon.social\/@funix\/113725388452012507","error":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peOjJ-1IZ","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6633"}],"version-history":[{"count":9,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6633\/revisions"}],"predecessor-version":[{"id":6648,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6633\/revisions\/6648"}],"wp:attachment":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}