Articles

Affichage des articles du 2024

LoRaWAN

Introduction LoRa est l’acronyme de Long Range (Grande portée). c’est une technologie radio (sans fil) dans laquelle un émetteur à très faible consommation envoie de petits paquets de données à faible vitesse (0.3kb/s à 5,5kb/s) à un récepteur situé à grande distance. LoRaWAN est un protocole de télécommunication permettant la communication à bas débit, par radio. Il est utilisé pour des objets à faible consommation électrique communiquant selon la technologie LoRa et connectés à l’Internet via des passerelles, participant ainsi à l’Internet des objets (IoT). ( source Wikipedia ) Ressources https://www.framboise314.fr/une-passerelle-lorawan-pour-le-raspberry-pi-chez-elecrow/ https://fr.wikipedia.org/wiki/LoRaWAN https://www.linuxembedded.fr/2017/12/introduction-a-lora/ https://www.elecrow.com/thinknode-g1-indoor-8-channels-lorawan-gateway-powered-by-sx1302-chip.html https://en.wikipedia.org/wiki/Calypso_%28electronic_ticketing_system https://github.com/ElDavoo/Mifare-Windows-Tool-Rebor...

Pratiques Nuget C#

Votre projet étant amené a grandir et à se complexifier autant mettre en place des mesures qui supportent la mise à l'échelle. Gestion unifiée des packages Gestion des packages au niveau de la solution Utilisez un fichier Directory.Build.props pour inclure des références à la majorité des packages dans les projets. Les analyseurs de code seront systématiquement présents. Pour les projets de test, ajoutez votre pack de packages par exemple : xUnit nSubstitute nSubstitute.Analyzers FluentAssertions FluentAssertions.Analyzers Ainsi les nouveaux projets référenceront automatiquement les packages requis. Chaque projet pourra bien sur référencer directement des packages spécifiques. <!--Add Test Packages in Test projects.--> <ItemGroup Condition="$(IsTestProject) == 'true'"> <PackageReference Include="FluentAssertions" /> <!--Microsoft--> <PackageReference Include="Microsoft.NET.Test.Sdk" /> <Packag...

Les Types en Solidity

  Types de données Documentation : https://docs.soliditylang.org/en/v0.8.3/types.html Solidity est un langage typé de manière statique, les types de données doivent être spécifiés. Types de Valeur Booléens De type bool ou les valeurs possibles sont des constantes, true ou false. Entiers Le mot-clé int :*désigne un entier signé et uint un entier non signé. La taille de l'entier peut être spécifiée par incrément de 8 (uint8, uint16...) jusqu'a 256. int et uint sont des alias qui font respectivement référence à int256 et uint256. Obtenir un nombre aléatoire : https://ethereum.stackexchange.com/questions/191/how-can-i-securely-generate-a-random-number-in-my-smart-contract Normalement, il n'y a pas d’intérêt à utiliser ces sous-types car Solidity réserve 256 bits de stockage indépendamment de la taille du uint. Par exemple, utiliser un uint8 à la place d'un uint (uint256) ne vous fera pas gagner de gas. Mais il y a une exception : dans les struct. Si vous avez plusieurs uint...

C# Version 10

  C# 10 C# 10 ajoute les fonctionnalités et améliorations suivantes au langage C# : Structures d’enregistrement Améliorations des types de structure Gestionnaires de chaînes interpolées Déclaration d’espace de noms de portée de fichier Modèles de propriété étendus Améliorations des expressions lambda Autoriser  les chaînes interpolées Les types d’enregistrements peuvent sceller Assignation définie améliorée Autoriser l’assignation et la déclaration dans la même déconstruction Autoriser  l’attribut sur les méthodes Attribut CallerArgumentExpression Pragma amélioré C# 10 est pris en charge sur  .net 6 . Pour plus d’informations, consultez contrôle de  version du langage C# .

C# Version 11

  C# 11 Littéraux de chaîne bruts Les  littéraux de chaîne brute  constituent un nouveau format pour les littéraux de chaîne. Ils peuvent contenir du texte arbitraire, y compris des espaces blancs, de nouvelles lignes, des guillemets incorporés et d’autres caractères spéciaux, sans nécessiter de séquences d’échappement. Un littéral de chaîne brute commence par au moins trois caractères guillemets doubles ("""). Il se termine par le même nombre de guillemets doubles. En règle générale, il utilise trois guillemets doubles sur une seule ligne pour démarrer la chaîne, et trois guillemets doubles sur une ligne distincte pour la terminer. Les nouvelles lignes qui suivent le guillemet d’ouverture et qui précèdent le guillemet de clôture ne sont pas incluses dans le contenu final : string longMessage = """ This is a long message. It has several lines. Some are indented more than others. Some should start at the first colum...

C# Version 12

 C# 12 C# 12 intègre les nouvelles fonctionnalités suivantes. Vous pouvez essayer ces fonctionnalités à l’aide de la dernière version de  Visual Studio 2022  ou du  Kit de développement logiciel (SDK) .NET 8 . Constructeurs principaux Vous pouvez désormais créer des constructeurs principaux dans n’importe quel class et struct. Les constructeurs principaux ne sont plus limités aux types record. Les paramètres de constructeur principal se trouvent dans l’étendue de l’ensemble du corps de la classe. Pour garantir l’affectation définitive de tous les paramètres de constructeur principal, tous les constructeurs explicitement déclarés doivent appeler le constructeur principal à l’aide de la syntaxe this(). L’ajout d’un constructeur principal à class empêche le compilateur de déclarer un constructeur sans paramètre implicite. Dans struct, le constructeur sans paramètre implicite initialise tous les champs, notamment les paramètres de constructeur principal selon le modèle 0...

Les Types en Python

Les Types en Python Listes https://docs.python.org/fr/3/tutorial/datastructures.html Dans Python, on utilise des crochets [ ] pour indiquer une liste En particulier dans Python, vous pouvez aussi accéder aux éléments en sens inverse, en utilisant des nombres négatifs. Pour accéder au dernier élément de la liste, utilisez l’indice -1. Accédez aux caractères d’une chaîne comme un élément d’une liste Les indices fonctionnent aussi avec les chaînes de caractères ! En fait, les chaînes de caractères sont juste des listes de caractères. Chaque caractère correspond à un indice qui va de zéro à la longueur de la chaîne. append() remove() sort() : Le tri se fait alphabétiquement pour les listes de chaînes et numériquement pour les listes de nombres. pop() : Supprimez le premier élément de la liste grâce à la méthode pop. P.S.: pour supprimer un élément à un index donné, on écrit liste.pop(index) len(liste) Tuples Les tuples sont une autre structure de Python qui sert à enregistrer des donné...

Machine Learning

Le Machine Learning est à bien des égards le croisement de deux disciplines : la science des données et le génie logiciel. L’objectif du Machine Learning est l’utilisation des données pour créer un modèle prédictif pouvant être incorporé dans une application logicielle ou un service. Pour atteindre cet objectif, il faut une collaboration entre les experts en science des données qui explorent et préparent les données, avant de les utiliser pour entraîner un modèle Machine Learning, et les développeurs de logiciels qui intègrent les modèles dans des applications où ils servent à prédire de nouvelles valeurs de données (processus connu sous le nom d’inférence).L’idée fondamentale du Machine Learning est d’utiliser les données des observations passées pour prédire des résultats ou des valeurs inconnus. Machine learning supervisé Le Machine Learning supervisé est un terme général pour des algorithmes de Machine Learning dans lesquels les données d’apprentissage comprennent à la fois des va...

Les Types en Javascript

Javascript Types JS has dynamic types. In JavaScript there are 5 different data types that can contain values:  string  number : All numbers in JavaScript are stored as 64-bits Floating point numbers (Floats).  boolean  object  function There are 3 types of objects:   * Object   * Date   * Array And 2 data types that cannot contain values:   * null   * undefined ====Objects==== <code> <!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var person = {     firstName : "John",     lastName  : "Doe",     age       : 50,     eyeColor  : "blue",     car : {color:'blue', weight: 1800} }; document.getElementById("demo").innerHTML = person.firstName + " is " + person.age + " years old, his car is " + person.car.color + " and weights " + person.car.weight; </script> </body> </html> </code>

Docker

Introduction à la conteneurisation Architecture de Docker Une image conteneur est un package portable qui contient des logiciels. C’est cette image qui, quand elle est exécutée, devient notre conteneur. Le conteneur est l’instance en mémoire d’une image. Une image conteneur est un package non modifiable qui contient tout le code d’une application, les packages système, les fichiers binaires, les bibliothèques, les fichiers de configuration et le système d’exploitation qui s’exécute dans le conteneur. Les conteneurs Docker s’exécutant sur Linux partagent le noyau du système d’exploitation de l’hôte et ne nécessitent pas de système d’exploitation de conteneur dès lors que le fichier binaire peut accéder directement au noyau du système d’exploitation. Le système d’exploitation hôte est le système d’exploitation sur lequel le moteur Docker s’exécute. Les conteneurs Docker s’exécutant sur Linux partagent le noyau de l’OS hôte. Ils ne nécessitent pas d’OS de conteneur tant que le fichier bin...

Architecture de Docker

Architecture de Docker La plateforme Docker est constituée de plusieurs composants que nous utilisons pour générer, exécuter et gérer nos applications conteneurisées. Moteur Docker Le moteur Docker est constitué de plusieurs composants configurés selon une implémentation client-serveur, dans laquelle le client et le serveur s’exécutent simultanément sur le même hôte. Le client communique avec le serveur en utilisant une API REST, qui permet au client de communiquer également avec une instance de serveur distante. Le client Docker Il existe deux alternatives pour le client Docker : une application en ligne de commande nommée docker ou une application à interface graphique utilisateur (GUI) appelée Docker Desktop. L’interface CLI et Docker Desktop interagissent tous deux avec un serveur Docker. Les commandes docker de l’interface CLI ou Docker Desktop utilisent l’API REST de Docker pour envoyer des instructions à un serveur local ou distant, et nous les utilisons comme interface principa...

Introduction à la conteneurisation

Un conteneur est un environnement faiblement isolé qui nous permet de générer et d’exécuter des packages de logiciels. Ces packages de logiciels incluent le code et toutes les dépendances permettant d’exécuter des applications de façon rapide et fiable dans n’importe quel environnement informatique. Nous appelons ces packages des images conteneur. La conteneurisation de logiciels est une méthode de virtualisation de système d’exploitation utilisée pour déployer et exécuter des conteneurs sans utiliser de machine virtuelle. Les conteneurs peuvent s’exécuter sur du matériel physique, dans le cloud, sur des machines virtuelles et sur plusieurs systèmes d’exploitation. Docker est une plateforme de conteneurisation utilisée pour développer, livrer et exécuter des conteneurs. Docker n’utilise pas d’hyperviseur, et vous pouvez l’exécuter sur votre station de travail ou votre portable si vous développez et que vous testez des applications. https://www.docker.com/

Développer sur le cloud Azure

Rappel Le Cloud Azure Concevoir une architecture Azure Aperçu des App Service Plan SKU Azure Api Manager Azure Kubernetes Service

Stratégies de migration vers le Cloud

Option de rationalisation Il existe cinq options pour la rationalisation du cloud, que l’on appelle parfois les cinq R : Réhéberger Également appelé migration lift-and-shift, le réhébergement consiste à déplacer une ressource à son état actuel vers le fournisseur de cloud choisi, en apportant des modifications minimales à l’architecture globale. Réduire les dépenses d’investissement. Libérer de l’espace dans un centre de données. Rentabiliser rapidement l’investissement dans le cloud. Refactoriser La refactorisation s’applique également au processus de développement d’applications, dans lequel du code est refactorisé pour permettre à une application de répondre à de nouvelles opportunités commerciales. Accéder à des mises à jour plus rapides et plus courtes. Tirer parti de la portabilité du code. Améliorer l’efficacité du Cloud en termes de ressources, de rapidité et de coût. Créer une nouvelle architecture Lorsque des applications vieillissantes ne sont pas compatibles avec le cloud, ...