Siberian CMS : place à la pratique !

Il y a quelques temps, je vous entretenais d’une autre façon de développer des applications mobiles : Siberian CMS.

Il s’agit d’une solution libre qui prend la forme d’un CMS, dans lequel il est possible de paramétrer son application mobile. Celle-ci est ensuite générée et il est alors possible de la distribuer sur les stores.

L’avantage de Siberian CMS, outre le fait que cela soit un logiciel libre, c’est qu’il est possible (et même conseillé) que le compte nécessaire à la distribution des apps soit au nom du client final. Cela change tout, notamment pour faciliter l’acceptation de ce type d’application sur l’App Store.

Du coup, j’ai récupéré en début d’année 2021 en gestion pour le compte d’un client 2 applications Siberian et franchement, ces apps sont plutôt sympas !

La première application est celle d’une cave à bières & growlers de Lyon. L’application permet entre autres de bénéficier de :

  • Un shop en ligne
  • Une carte de fidélité
  • Une carte cadeau
  • Des notifications
  • Une visite virtuelle

Elle est disponible pour Android sur le Play Store pour iOS sur l’App Store.

La seconde application à été développée pour une fromagerie, également située à Lyon : l’Art de Choix. Comme pour le Crafterie, l’application permet de :

  • Réaliser ses achats en ligne
  • Bénéficier d’une carte de fidélité
  • Profiter de promotions, de notifications…
  • Réaliser une visite 3D

Et vous pouvez également la retrouver sur le Play Store et sur l’App Store !

Bref vous l’aurez compris, Siberian CMS, ça marche et cela peut représenter une alternative crédible pour les projet d’applications « standards » et avec un budget relativement modeste !

Une application mobile Android / iOS en 1 journée ?

Application mobile Siberian

Depuis quelques années, on voit apparaitre sur le web des générateurs d’applications mobiles. La promesse est la même que pour les cms et les générateurs de sites web : pouvoir bénéficier d’un travail professionnel sans aligner une seule ligne de code…

Et comme pour les cms et autre générateurs de sites web, la réalité est quelque peu nuancée…

Suite à la demande d’un client, je me suis re-penchée sur SiberianCMS, que j’avais déjà testé il y a quelques années sans être convaincue plus que ça.

Le mois de juillet et ses chaleurs aidant, je me suis lancée comme défit de créer une application multiplateforme, avec SiberianCMS, en 1 journée… Voici donc un compte rendu de mes aventures 🙂

Lire la suite

L’enregistrement NSUserDefaults en Swift

L'enregistrement clé-valeur en swift _ nsuserdefaults

L’enregistrement de données sous forme de clé-valeur en développement mobile à déjà été abordé dans l’article sur les SharedPreferences.

Aujourd’hui, je vous propose de faire la même chose, mais en Swift. C’est beaucoup plus simple, mais nous nous limitons alors aux plateformes Apple (iOS, iPadOS, MacOS, WatchOS).

Comme pour les SharedPreferences, NSUsersDefaults est donc un système simple et rapide qui permet d’enregistrer des valeurs de type Float, Bool, Double, Int, mais aussi des objets (array, dictionary…. ), et des urls. C’est donc une façon de gérer la persistance des données à la fois simple et puissante 🙂 .

Pour cette démo, j’ai créé une petite application très simple dans laquelle l’utilisateur enregistre une phrase, et celle-ci est stockée comme une clé-valeur grâce à UserDefaults :

Afin de vérifier la persistance, n’hésitez pas à relancer l’application, et vous verrez que votre phrase reste mémorisée 🙂

Alors pour utiliser UserDefaults, il faut déjà créer une instance de UserDefaults, et définir ses clés de préférences :

Ensuite, l’enregistrement d’une valeur se fait avec l’instruction « préférences.set » :

Et la lecture d’une valeur avec :

Et c’est tout !

Ce qui fait que notre controller contient juste ce code :

Je pense que c’est la méthode la plus simple en Swift pour sauvegarder des informations ! Mais elle est aussi très puissante, puisqu’il est non seulement possible d’enregistrer des valeurs « simples », comme des entiers, des nombres et de booléens, mais aussi des valeurs plus complexes, comme des tableaux et des dictionnaires. En « bidouillant » un peu, on peut même enregistrer des images !

Bref, pas de raisons de s’en priver !

Comme toujours, le code source est disponible sur mon dépôt Git : https://gitlab.com/camilleBar/swift-nsuserdefaults-ios-demo-project

Et si vous avez des questions / suggestions, n’hésitez pas, commentez !

Deep Learning avec TensorFlow

Ce qu’il y a de bien avec le confinement, c’est que les week-ends semblent durer plus longtemps ! Du coup, cela me laisse le temps de me cultiver !

Le dernier livre en date, « Deep Learning avec TensorFlow », est en fait la suite du livre « Le Machine Learning avec Python », dont je parle ici.

Pour celleux qui ne seraient pas encore trop au clair avec les notions de Machine Learning (ML), Deep Learning, Intelligence Artificielle (AI), voici un petit résumé des épisodes précédents 🙂

Les débuts de l’Intelligence Artificielle remontent assez loin, on cite souvent Alan Turing dans les années 1950. Elle désigne tous les traitements automatisés que l’on retrouve en Industrie (automates) et en informatique (logiciels). Là, je sens que j’ai cassé un mythe…

En fait, dans l’imaginaire collectif, AI désigne surtout une Intelligence Artificielle Forte (AGI), qui serait totalement autonome et auto-apprenante. Hélas (?), cela n’existe pas encore à l’heure où j’écris ces lignes – a priori – 😉

Le Machine Learning, c’est déjà plus glamour, car là, ce sont les machines qui « apprennent par elles-mêmes ». Attention cependant, tout cela est basé sur des mathématiques, des statistiques, il n’y a donc pas d’AGI ni de miracle derrière tout cela, seulement beaucoup d’intelligence humaine. On utilise des modèles de type régression, Naïve Bayes, clustering, arbres de décision, random Forest…

Le deep learning enfin fait partie du ML, mais fait appel à des réseaux de neurones. Elle fonctionne par bio-mimétisme : la machine essaye de reproduire le mécanisme de notre cerveau ! Il est apparu il y a 10 ans environ, notamment dans la reconnaissance d’images ou de langage naturel.

On en vient alors à TensorFlow !

TensorFlow est un outil d’apprentissage automatique développé par Google, il est open source et basé sur Google Brain.

Du coup, on parle de Deep Learning, donc de réseaux de neurones.

Après une courte (ré)-introduction aux concepts de base du ML, ce livre fait donc une introduction aux réseau de neurones artificiels et à leur entrainement.

Il aborde successivement les réseaux de neurones convolutifs, les réseaux de neurones récurrents, les autoencodeurs et enfin l’apprentissage par renforcement.

Perso, plus j’avance dans mon apprentissage du ML, plus j’ai l’impression que l’on se rapproche des méthodes d’apprentissages que l’on utilise avec nos animaux domestiques. L’apprentissage par renforcement, qui utilise les récompenses, en est un exemple. Même si bien sûr nous sommes encore loin, pour le moment, de la complexité d’un cerveau animal. Mais cela à toujours un coté « magique » 🙂 !

En tous cas, je suis de plus en plus captivée par le ML, et si vous aussi vous avez envie d’approfondir le sujet, ce livre est fait pour vous !

En attendant, n’hésitez pas à laisser des remarques / commentaires si vous en avez !

L’application Reiki Energy est sortie en version 4…

Il s’agit surtout d’une mise à jour technique, mais elle apporte quand même son lot d’amélioration :

  • Une meilleure compatibilité avec iOS 13 et IPadOS 13
  • Une meilleure gestion du mode sombre
  • La durée totale d’une séance complète est maintenant affichée au démarrage du soin
  • Quelques bugs (dont un dans la gestion des préférences) ont été corrigés 🙂

D’un point de vue technique, cette version intégralement en Swift 5 et contient (enfin..) des tests unitaires et des tests d’interfaces. Cela me permettra d’envisager plus sereinement les évolutions !

Comme d’habitude, l’application est téléchargeable ici :

Et je suis à votre disposition pour toute suggestion / commentaire ici : https://vincent-barousse.blog/contact/

Développement Swift / iOS : Améliorer la qualité de son code grâce à SwiftLint

La qualité du code est actuellement LE sujet dans le monde du dev (et avec raison !). Si vous êtes développeur.se pro et passionné.e, vous n’êtes sans doute pas passé à coté !

Donc, si le TDD est votre religion, que vos tests unitaires sont nickels et couvrent 100% du code, qu’Xcode ne retourne plus un seul warning, et que Sonarqube est devenu votre meilleur ami… Et bien vous pouvez encore vous améliorer, grâce à SwiftLint !

Si Sonarqube fera l’objet d’un autre article de blog, je vais aujourd’hui vous parler de SwiftLint.

SwiftLint, c’est un outil créée et maintenu par Realm pour améliorer le respect des conventions d’écritures en Swift, disponible ici : https://github.com/realm/SwiftLint

Comme souvent, il y a plusieurs manières de l’intégrer dans un projet, personnellement, j’aime bien Cocoapods !

Comme code d’exemple, je vais reprendre la démo « InfoKayak », mise à jour pour Swift 5.

Sans SwiftLint, Xcode 11.3 ne trouve rien à redire au code (pas de warning, pas d’erreur) :

Editez maintenant le fichier Podfile en y ajoutant la ligne :  » pod ‘SwiftLint’  » :

Mettez à jour et installer les pods, puis rouvrez le projet avec Xcode. Pour le moment, il n’y a pas de changements 🙂

En fait, pour activer SwiftLint, il faut un petit script. Dans les « Build Phases » du projet, cliquez sur le « + » , ajoutez une « New run script phase », et mettez-y ce script :

On Build et Oh ! 286 warnings et 22 erreurs 😦 WTF ?

Allez, avant de faire un burn out, une bonne nouvelle, SwiftLint est capable de corriger automatiquement une grosse partie de ces problèmes 🙂 .

Pour cela, depuis un terminal, mettez vous dans le dossier de votre projet, et exécutez la commande « ./Pods/SwiftLint/swiftlint autocorrect« .

Ensuite, effacez le dossier de build d’Xcode, et au besoin, relancez l’IDE. Normalement, la situation devrait s’être grandement améliorée : il n’y a plus que 2 erreurs et 5 warnings à corriger manuellement, chose que je fais immédiatement… 😉

Dans certaines situations, on ne peux pas corriger (cas de librairie externes lesquelles nous n’avons pas la main…), il est donc possible de paramétrer SwiftLint plus finement.

Pour tout ce qui est règles globales, il faut créer un fichier .swiftlint à la racine de votre projet. Par exemple, le mien contient ceci :

Lorsqu’il s’agit d’un besoin temporaire, on peut désactiver une règle directement dans le code avec l’instruction // swiftlint:disable <rule> . La liste des règles se trouve ici : https://realm.github.io/SwiftLint/rule-directory.html

Voilà, j’espère que cette petite introduction vous aura donné envie de vous mettre à Swiftlint et à vous mettre à la qualité ! En tous cas moi, je suis accro !

Nouvelle mise à jour de l’application mobile Kayak Tracker !

Toujours ravie de satisfaire les demandes des utilisateurs.rices, j’ai rajouté quelques fonctions dans l’application Kayak Tracker.

Vous pouvez maintenant exporter vos tracks soit d’application à application (via un email), soit dans Google Earth !

Voici la vidéo explicative :

Parmi les autres nouveautés / améliorations, il y a également de nouveaux fonds de carte (vue satellite, vue mixte) et une amélioration des traductions !

Comme d’habitude, l’application est à télécharger sur l’app store :

Et bonnes balades !

Swift Map Filter Reduce mémo

Lorsque l’on pense opérations sur des types Array ou Dictionary en Swift, on a souvent le réflexe for-in loop… Mais Swift propose d’autres méthodes comme map, filter, reduce… potentiellement plus efficaces. Voici donc un petit mémo à ce sujet 🙂

Map

Map sert à parcourir une collection er à appliquer la même opération à chaque élément de cette collection. La fonction map retourne un array contenant le résultat. Dans l’exemple suivant, la fonction map est utilisée pour retourner le carré de chaque item d’un tableau :

Le type de retour de la fonction map n’est pas limité au type des éléments d’origine :

Et enfin, la fonction map peut être utilisée sur tout type de collection :

Filter

La fonction filter parcourt un array ou une collection et retourne un array contenant les éléments correspondant à la condition demandée. Ex: recherche des entiers divisibles par 2:

Reduce

Reduce sert à combiner tous les éléments d’une collection pour créer une nouvelle valeur. Dis comme cela, ce n’est pas très parlant, mais voici quelques exemples :

  • Ajouter toutes les valeurs d’un array à une valeur initiale de 15 :
  • Fusionner des chaînes :

flatMap et compactMap

  • flatMap :
  • compactMap :

En résumé :

  • map permet de retourner un array contenant le résultat d’une transformation appliquée à chaque item.
  • filter retourne un array contenant seulement les éléments correspondant à une condition donnée.
  • reduce retourne une seule valeur calculée en combinant chaque item avec une valeur initiale.

Flutter development : les ressources utiles

Grâce à une super présentation d’Edouard Marquez lors d’un Meetup organisé par le CDG de Tours, j’ai le plaisir d’être en pleine découverte de Flutter.

Donc, Flutter est un projet Open Source porté par Google, et basé sur le langage Dart. C’est (entre autres…) LE nouveau framework de Google pour la création d’applications mobiles multiplateformes.

Encore un me direz vous… oui mais celui-là est différent (je sais, on nous l’a déjà faite celle-là 🙂 ). Plus sérieusement, le fait qu’il soit porté par Google, avec une communauté de développeur.ses en constante augmentation, donne de très bons augures pour l’avenir de ce framework.

Je ne rentrerai pas ici dans la discussion Flutter vs React Native vs Cordova vs Xamarin… cela n’est pas le propos. Par contre, à titre perso, je peux dire que le langage Dart me plaît bien, et venant de Swift (avec aussi un passé en Java et en C), la courbe d’apprentissage n’est pas trop ardue.

Bref, vous l’aurez compris, je kiffe Flutter 🙂

Et comme je sais à que point c’est parfois compliqué de débuter avec un nouveau framework, j’ai décidé ici de vous partager mes ressources ! (bien entendu, je ferai évoluer cette liste au fur et à mesure de mes avancées dans le domaine…)

Les bases :

https://flutter.dev : le site de base. Plein de tutoriels, d’infos et surtout toujours à jour !

https://dart.dev : le site de référence pour le langage Dart

La communauté :

https://www.edouard-marquez.me/blog/ : plein de news sur l’évolution de Flutter et de sa communauté

Les tutoriels :

http://www.iflutter.in : le site de tutoriels le plus complet que j’ai pu trouver à ce jour

https://kodestat.gitbook.io/flutter/ : de nombreux tutos également

https://hackr.io/tutorials/learn-flutter

https://www.didierboelens.com

http://tphangout.com

https://flutterbyexample.com

Programmation Swift : iOS Developer Notes For Professionals

ios Dev Pros

Voici mon nouveau livre de chevet : iOS Developer Notes for Professionals !

Je crois que tout le langage Swift est abordé dans ce livre ! Cela va de la création toute simple d’une UIView au parsing de JSON, tout en passant par l’usage de des frameworks les plus utilisés (Fastlane…) et des designs paterns (MVC, MVVM…).

Bref, le top du top pour le développeur Swift !

Bon, finalement, le lire avant de s’endormir n’est pas forcément la meilleure idée, mais c’est le genre de livre à garder impérativement sous la main toute la journée de développement !

En plus, il est gratuit !

A télécharger (sans modération) ici :

iosDeveloperBook