Suite

Quelle est la bonne façon d'écrire le code pour obtenir les couches du serveur ?

Quelle est la bonne façon d'écrire le code pour obtenir les couches du serveur ?


J'écris un script pour appeler raster depuis le serveur pour les charger dans mon fichier MXD. C'est comme lorsque vous ajoutez les données dans Arcmap.

Le problème est que le raster que j'ai est sur le serveur.

Est-ce que ce chemin est correct pour les récupérer ?

raster = r"S:Las Cruces SSOGIS_Master_DataNAIP_2009Dona Ana"

Vous pouvez aussi l'utiliser, c'est plus simple. La seule chose que vous devez définir est "YourDataBaseName".

Pour une raison quelconque, je ne vois pas la réponse simple ici.

Mettez ceci en haut de votre code :

et où vous souhaitez configurer la variable de connexion :

J'ai trouvé cela très difficile d'obtenir une réponse, mais j'ai finalement compris. Je vais donc écrire les étapes ci-dessous.

Avant de configurer votre chaîne de connexion dans le code, assurez-vous que vous pouvez réellement accéder à votre base de données. Commencez évidemment par vous connecter au serveur de base de données à l'aide de SSMS (Sql Server Management Studio ou son équivalent dans d'autres bases de données) localement pour vous assurer d'avoir accès en utilisant les détails que vous souhaitez utiliser.

Ensuite (si nécessaire), si vous essayez d'accéder à la base de données sur un serveur distinct, assurez-vous que vous pouvez faire de même dans SSMS. Configurez donc SSMS sur un ordinateur et assurez-vous de pouvoir accéder au serveur avec le nom d'utilisateur et le mot de passe de ce serveur de base de données.

Si vous n'obtenez pas les 2 ci-dessus correctement, vous perdez simplement votre temps car vous ne pouvez pas accéder à la base de données. Cela peut être dû au fait que l'utilisateur que vous configurez est incorrect, n'a pas d'accès à distance activé (si nécessaire) ou que les ports ne sont pas ouverts (si nécessaire), parmi de nombreuses autres raisons, mais celles-ci sont les plus courantes.

Une fois que vous avez vérifié que vous pouvez accéder à la base de données à l'aide de SSMS. La prochaine étape, juste pour automatiser le processus et éviter les erreurs, consiste à laisser le système faire le travail pour vous.

  1. Démarrez un projet vide, ajoutez votre choix de Linq à SQL ou Dataset (EF est bon mais la chaîne de connexion est intégrée à une chaîne de con EF, je veux une propre), et connectez-vous à votre base de données en utilisant les détails vérifiés ci-dessus dans l'assistant de chaîne con. Ajoutez n'importe quelle table et enregistrez le fichier.

Allez maintenant dans la configuration Web et, comme par magie, vous y verrez une belle chaîne de connexion propre et fonctionnelle avec tous les détails dont vous avez besoin.

Supposons que les étapes ci-dessus vous démarrent avec quelque chose comme ce qui suit comme chaîne de connexion dans le code derrière :

Cette étape est très importante. Assurez-vous que le format de chaîne de connexion ci-dessus fonctionne avant de suivre les étapes suivantes. Assurez-vous que vous pouvez réellement accéder à vos données à l'aide d'une forme de texte de commande SQL qui affiche certaines données d'une table dans des étiquettes ou des boses de texte ou autre, car c'est le moyen le plus simple de créer une chaîne de connexion.

Une fois que vous êtes sûr que le style ci-dessus fonctionne, il est maintenant temps de passer aux étapes suivantes :

1. Exportez votre chaîne littérale (les éléments entre guillemets, comprenant les guillemets) à la section suivante du fichier web.config (pour plusieurs chaînes de connexion, faites simplement plusieurs lignes :

2. Ajoutez maintenant la ligne de code suivante au code C# derrière, de préférence juste sous la définition de classe (c'est-à-dire pas à l'intérieur d'une méthode). Cela pointe vers le dossier racine de votre projet. Il s'agit essentiellement du nom du projet. Il s'agit généralement de l'emplacement du fichier web.config (dans ce cas, mon projet s'appelle MyProject.

3. Ajoutez maintenant la ligne de code suivante au code C# derrière. Cela définit une constante de chaîne à laquelle vous pouvez vous référer à de nombreux endroits dans votre code si vous avez besoin d'une conString dans différentes méthodes.

4. Ensuite, ajoutez la ligne de code suivante au code C# derrière. Cela obtient la chaîne de connexion du fichier web.config avec le nom conString (de la constante ci-dessus)

5. Enfin, où vous auriez initialement eu quelque chose de similaire à cette ligne de code :

vous le remplacerez par cette ligne de code :

Après avoir effectué ces 5 étapes, votre code devrait fonctionner comme avant. C'est pourquoi vous testez d'abord la chaîne dans son format d'origine afin que vous sachiez s'il s'agit d'un problème avec la chaîne de connexion ou s'il s'agit d'un problème avec le code.


Les 7 couches du modèle OSI

Cette image illustre les sept couches du modèle OSI. Ci-dessous, nous décrivons brièvement chaque couche, de bas en haut.

1. Physique

La couche la plus basse du modèle OSI concerne la communication de données sous la forme de signaux électriques, optiques ou électromagnétiques transmettant physiquement des informations entre les périphériques réseau et l'infrastructure. La couche physique est responsable de la communication de flux de données brutes non structurés sur un support physique. Il définit une série d'aspects, notamment :

  • Systèmes électriques, mécaniques et physiques et dispositifs de mise en réseau qui incluent des spécifications telles que la taille du câble, la fréquence du signal, les tensions, etc. tels que Bus, Star, Ring et Mesh tels que Simplex, Half Duplex et Full Duplex
  • Performances de transmission de données, telles que le débit binaire et la synchronisation des bits
  • Modulation, commutation et interfaçage avec le support de transmission physique
  • Protocoles courants, notamment Wi-Fi, Ethernet et autres
  • Matériel comprenant les périphériques réseau, les antennes, les câbles, le modem et les périphériques intermédiaires tels que les répéteurs et les concentrateurs

2. Liaison de données

La deuxième couche du modèle OSI concerne la transmission de données entre les nœuds d'un réseau et gère les connexions entre les appareils physiquement connectés tels que les commutateurs. Les données brutes reçues de la couche physique sont synchronisées et conditionnées dans des trames de données qui contiennent les protocoles nécessaires pour acheminer les informations entre les nœuds appropriés. La couche liaison de données est en outre divisée en deux sous-couches :

  • La sous-couche de contrôle de liaison logique (LLC) est responsable des contrôles de flux et des contrôles d'erreur qui garantissent une transmission de données précise et sans erreur entre les nœuds du réseau.
  • La sous-couche de contrôle d'accès au support (MAC) est responsable de la gestion des accès et des autorisations pour transmettre des données entre les nœuds du réseau. Les données sont transmises séquentiellement et la couche attend un accusé de réception pour les données brutes encapsulées envoyées entre les nœuds.

3. Réseau

La troisième couche du modèle OSI organise et transmet les données entre plusieurs réseaux.

La couche réseau est chargée d'acheminer les données via le meilleur chemin physique en fonction d'une série de facteurs, notamment les caractéristiques du réseau, le meilleur chemin disponible, les contrôles de trafic, la congestion des paquets de données et la priorité de service, entre autres. La couche réseau implémente l'adressage logique des paquets de données pour faire la distinction entre les réseaux source et de destination.

D'autres fonctions incluent l'encapsulation et la fragmentation, les contrôles d'encombrement et la gestion des erreurs. Les données sortantes sont divisées en paquets et les données entrantes sont réassemblées en informations qui sont consommables à un niveau d'application supérieur. Le matériel de la couche réseau comprend les routes, les routeurs ponts, les commutateurs à 3 couches et les protocoles tels que le protocole Internet (IPv4) version 4 et le protocole Internet version 6 (IPv6).

4. Transports

La quatrième couche du modèle OSI assure une livraison complète et fiable des paquets de données.

  • La couche de transport fournit des mécanismes tels que le contrôle d'erreur, le contrôle de flux et le contrôle d'encombrement pour suivre les paquets de données, vérifier les erreurs et les doublons, et renvoyer les informations dont la livraison échoue. Il implique la fonction d'adressage du point de service pour s'assurer que le paquet est envoyé en réponse à un processus spécifique (via une adresse de port). et le réassemblage garantissent que les données sont divisées et envoyées séquentiellement à la destination où elles sont revérifiées pour l'intégrité et l'exactitude sur la base de la séquence de réception.

Les protocoles courants incluent le Transmission Control Protocol (TCP) pour la transmission de données orientée connexion et le User Datagram Protocol (UDP) pour la transmission de données sans connexion.

5. Séance

En tant que première des trois couches qui traitent du niveau logiciel, la couche session gère les sessions entre les serveurs pour coordonner la communication. La session fait référence à tout échange de données interactif entre deux entités au sein d'un réseau. Les exemples courants incluent les sessions HTTPS qui permettent aux internautes de visiter et de parcourir des sites Web pendant une période de temps spécifique. La couche de session est responsable d'une gamme de fonctions, notamment l'ouverture, la fermeture et le rétablissement des activités de session, l'authentification et l'autorisation de la communication entre des applications et des serveurs spécifiques, l'identification des opérations en duplex intégral ou semi-duplex et la synchronisation des flux de données.

Les protocoles courants de la couche session incluent :

  • Protocole d'appel de procédure à distance (RPC)
  • Protocole de tunneling point à point (PPTP)
  • Protocole de contrôle de session (SCP)
  • Protocole de description de session (SDP), comme décrit ici

6. Présentation

La sixième couche du modèle OSI convertit les formats de données entre les applications et les réseaux. Les responsabilités de la couche de présentation comprennent :

La couche de présentation, également appelée couche de syntaxe, mappe la sémantique et la syntaxe des données de telle sorte que les informations reçues soient consommables pour chaque entité de réseau distincte. Par exemple, les données que nous transférons depuis notre application de communication basée sur le cryptage sont formatées et cryptées à cette couche avant d'être envoyées sur le réseau.

Du côté de la réception, les données sont décryptées et formatées en texte ou en informations multimédias comme prévu à l'origine. La couche de présentation sérialise également les informations complexes dans des formats transportables. Les flux de données sont ensuite désérialisés et réassemblés dans le format objet d'origine à la destination.

7. Candidature

La couche applicative concerne les processus de mise en réseau au niveau applicatif. Cette couche interagit directement avec les utilisateurs finaux pour prendre en charge la messagerie électronique, le partage de données réseau, les transferts de fichiers et les services d'annuaire, entre autres services d'information distribués. La couche supérieure du modèle OSI identifie les entités de mise en réseau pour faciliter les demandes de mise en réseau par les demandes des utilisateurs finaux, détermine la disponibilité des ressources, synchronise la communication et gère les exigences de mise en réseau spécifiques à l'application. La couche application identifie également les contraintes au niveau de l'application telles que celles associées à l'authentification, à la confidentialité, à la qualité de service, aux dispositifs de mise en réseau et à la syntaxe des données.

  • Protocole de transfert de fichiers (FTP)
  • Protocole de transfert de courrier simple (SMTP)
  • Système de noms de domaine (DNS)

17 réponses 17

Cette méthode fonctionne bien lorsqu'il existe plusieurs interfaces réseau. Il renvoie toujours l'adresse IP sortante préférée. La destination 8.8.8.8 n'a pas besoin d'être accessible.

Se connecter sur un socket UDP a l'effet suivant : il définit la destination pour Send/Recv, supprime tous les paquets provenant d'autres adresses et - c'est ce que nous utilisons - transfère le socket dans l'état "connecté", définit ses champs appropriés. Cela comprend la vérification de l'existence de la route vers la destination selon la table de routage du système et la configuration du point de terminaison local en conséquence. La dernière partie semble être officiellement non documentée, mais elle ressemble à un trait intégral de l'API des sockets Berkeley (un effet secondaire de l'état "connecté" UDP) qui fonctionne de manière fiable à la fois sous Windows et Linux dans toutes les versions et distributions.

Ainsi, cette méthode donnera l'adresse locale qui serait utilisée pour se connecter à l'hôte distant spécifié. Il n'y a pas de connexion réelle établie, par conséquent, l'adresse IP distante spécifiée peut être inaccessible.

Comme le dit @macomgil, pour MacOS, vous pouvez faire ceci :

Cela pourrait être un peu délicat dans le cas le plus général.

À première vue, InetAddress.getLocalHost() devrait vous donner l'adresse IP de cet hôte. Le problème est qu'un hôte peut avoir de nombreuses interfaces réseau et qu'une interface peut être liée à plusieurs adresses IP. Et pour couronner le tout, toutes les adresses IP ne seront pas accessibles en dehors de votre machine ou de votre réseau local. Par exemple, il peut s'agir d'adresses IP pour des périphériques de réseau virtuel, d'adresses IP de réseau privé, etc.

Cela signifie que l'adresse IP renvoyée par InetAddress.getLocalHost() n'est peut-être pas la bonne à utiliser.

Comment pouvez-vous gérer cela?

  • Une approche consiste à utiliser NetworkInterface.getNetworkInterfaces() pour obtenir toutes les interfaces réseau connues sur l'hôte, puis itérer sur les adresses de chaque NI.
  • Une autre approche consiste (d'une manière ou d'une autre) à obtenir le nom de domaine complet annoncé en externe pour l'hôte et à utiliser InetAddress.getByName() pour rechercher l'adresse IP principale. (Mais comment l'obtenir et comment gérer un équilibreur de charge basé sur DNS ?)
  • Une variante du précédent consiste à obtenir le nom de domaine complet préféré à partir d'un fichier de configuration ou d'un paramètre de ligne de commande.
  • Une autre variante consiste à obtenir l'adresse IP préférée à partir d'un fichier de configuration ou d'un paramètre de ligne de commande.

En résumé, InetAddress.getLocalHost() fonctionnera généralement, mais vous devrez peut-être fournir une méthode alternative pour les cas où votre code est exécuté dans un environnement avec un réseau "compliqué".

Je peux obtenir toutes les adresses IP associées à toutes les interfaces réseau, mais comment les distinguer ?

  • Toute adresse dans la plage 127.xxx.xxx.xxx est une adresse de « bouclage ». Il n'est visible que par "cet" hôte.
  • Toute adresse dans la plage 192.168.xxx.xxx est une adresse IP privée (alias site local). Ceux-ci sont réservés à une utilisation au sein d'une organisation. La même chose s'applique aux adresses 10.xxx.xxx.xxx et 172.16.xxx.xxx à 172.31.xxx.xxx.
  • Les adresses comprises dans la plage 169.254.xxx.xxx sont des adresses IP locales de liaison. Ceux-ci sont réservés pour une utilisation sur un seul segment de réseau.
  • Les adresses comprises entre 224.xxx.xxx.xxx et 239.xxx.xxx.xxx sont des adresses de multidiffusion.
  • L'adresse 255.255.255.255 est l'adresse de diffusion.
  • Rien d'autre devrait être une adresse IPv4 publique point à point valide.

En fait, l'API InetAddress fournit des méthodes pour tester les adresses de bouclage, de lien local, de site local, de multidiffusion et de diffusion. Vous pouvez les utiliser pour déterminer laquelle des adresses IP que vous obtenez est la plus appropriée.


8 réponses 8

Je sais qu'il s'agit d'un article plus ancien, mais si vous envisagez de gérer toutes les exceptions de la même manière et/ou utilisez les informations pour les rapports d'erreurs ou quelque chose de similaire (au lieu d'informer l'utilisateur des détails), vous pouvez utiliser ce qui suit.

Vous devez savoir au moment du code à quelles exceptions s'attendre, afin de les intercepter en conséquence. Comme Dimitrov l'a déclaré, une exception SQL est levée lorsque la connexion à un serveur SQL échoue, donc l'attraper spécifiquement est une bonne tactique.

Vous voulez intercepter les différentes exceptions dans l'ordre, comme ceci :

Essayez de mettre les exceptions les plus inhabituelles en haut, en descendant la liste vers les plus courantes. La séquence catch est séquentielle - si vous placez catch(Exception) en haut, elle sera toujours interceptée sur cette ligne, quelles que soient les exceptions que vous codez en dessous.

vous pouvez utiliser la même méthode que vous utilisez pour vérifier si une classe parent est de type sous-classe, ce qui est fait en utilisant

où votre obj est de type Exception, la classe parente de toutes les exceptions.

ou si vous souhaitez utiliser l'objet exception plus tard, vous pouvez utiliser :

Cette logique est particulièrement utile lorsque vous avez une classe centralisée pour gérer les exceptions et que vous ne voulez pas ajouter plusieurs instructions catch

essayer/enfin et utiliser sont presque les mêmes. using essaiera de faire quelque chose avec l'objet, qu'il réussisse ou non, il éliminera l'objet pour arrêter les fuites de mémoire, mais n'ignorera pas l'erreur empêchant le code de continuer.

Try essaiera d'exécuter le code à l'intérieur des accolades, si une erreur se produit, il ignorera l'erreur et quittera la clause Try, puis continuera à lire le code, à moins que l'erreur ne soit critique et provoque le plantage du programme. Cependant, lors de l'utilisation de flux, cela ne garantit pas que le flux est fermé / éliminé, car lorsqu'une erreur se produit, il quitte la clause try avant d'atteindre le code que vous pourriez avoir ajouté en bas pour l'élimination (mauvaise pratique imo).

Le code d'essai nécessite une instruction Catch (s) et/ou Last. Catch vous donne la possibilité de gérer des exceptions, des exceptions générales ou spécifiques. un exemple d'utilisation pourrait être de générer un fichier texte de l'erreur et de l'enregistrer. l'utilisation ne vous laisserait pas gérer les exceptions.

un autre exemple d'utilisation pourrait être, vous avez une liste de lecture, une chanson est introuvable, la zone d'exception nullreferece peut supprimer l'élément de la liste.

Enfin est toujours exécuté, même si l'erreur est critique et que le programme plante, le code à l'intérieur de la clause finally sera exécuté, avec les objets stream, c'est là que vous devez placer votre code de disposition, de sorte que si l'objet échoue dans la clause try il est toujours éliminé.

J'espère avoir aidé à présenter des éclaircissements sur l'utilisation et try/catch/finally.


Quelques bons frameworks web ?

Passons maintenant à autre chose et discutons de quelques frameworks Web spécifiques côté serveur.

Les frameworks côté serveur ci-dessous représentent quelques des plus populaires disponibles au moment de la rédaction. Tous ont tout ce dont vous avez besoin pour être productif - ils sont open source, sont en cours de développement, ont des communautés enthousiastes créant de la documentation et aidant les utilisateurs sur les forums de discussion, et sont utilisés dans un grand nombre de sites Web de grande envergure. Il existe de nombreux autres excellents frameworks côté serveur que vous pouvez découvrir en utilisant une recherche Internet de base.

Noter: Les descriptions proviennent (en partie) des sites frameworks !

Django (Python)

Django est un framework Web Python de haut niveau qui encourage un développement rapide et une conception propre et pragmatique. Construit par des développeurs expérimentés, il prend en charge une grande partie des tracas du développement Web, vous pouvez donc vous concentrer sur l'écriture de votre application sans avoir à réinventer la roue. C'est gratuit et open source.

Django suit la philosophie « Piles incluses » et fournit presque tout ce que la plupart des développeurs peuvent vouloir faire « hors de la boîte ». Parce que tout est inclus, tout fonctionne ensemble, suit des principes de conception cohérents et dispose d'une documentation complète et à jour. Il est également rapide, sécurisé et très évolutif. Basé sur Python, le code Django est facile à lire et à maintenir.

Les sites populaires utilisant Django (depuis la page d'accueil de Django) incluent : Disqus, Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest, Open Stack.

Flacon (Python)

Flask est un microframework pour Python.

Bien que minimaliste, Flask peut créer des sites Web sérieux prêts à l'emploi. Il contient un serveur de développement et un débogueur, et inclut la prise en charge des modèles Jinja2, des cookies sécurisés, des tests unitaires et de l'envoi de requêtes RESTful. Il a une bonne documentation et une communauté active.

Flask est devenu extrêmement populaire, en particulier pour les développeurs qui doivent fournir des services Web sur de petits systèmes aux ressources limitées (par exemple, exécuter un serveur Web sur un Raspberry Pi, des contrôleurs de drone, etc.)

Express (Node.js/JavaScript)

Express est un framework Web rapide, sans opinion, flexible et minimaliste pour Node.js (le nœud est un environnement sans navigateur pour l'exécution de JavaScript). Il fournit un ensemble robuste de fonctionnalités pour les applications Web et mobiles et fournit des méthodes utilitaires HTTP et un middleware utiles.

Express est extrêmement populaire, en partie parce qu'il facilite la migration des programmeurs Web JavaScript côté client vers le développement côté serveur, et en partie parce qu'il est économe en ressources (l'environnement de nœud sous-jacent utilise un multitâche léger au sein d'un thread plutôt que de générer des processus séparés pour chaque nouvelle demande Web).

Étant donné qu'Express est un framework Web minimaliste, il n'intègre pas tous les composants que vous souhaitez utiliser (par exemple, l'accès à la base de données et la prise en charge des utilisateurs et des sessions sont fournis via des bibliothèques indépendantes). Il existe de nombreux excellents composants indépendants, mais il peut parfois être difficile de déterminer lequel est le meilleur pour un usage particulier !

De nombreux frameworks populaires côté serveur et full stack (comprenant à la fois des frameworks côté serveur et côté client) sont basés sur Express, notamment Feathers, ItemsAPI, KeystoneJS, Kraken, LoopBack, MEAN et Sails.

De nombreuses entreprises de premier plan utilisent Express, notamment : Uber, Accenture, IBM, etc. (une liste est fournie ici).

Deno (JavaScript)

Deno est un environnement d'exécution et un framework JavaScript/TypeScript simple, moderne et sécurisé construit sur Chrome V8 et Rust.

Deno est alimenté par Tokio - un runtime asynchrone basé sur Rust qui lui permet de servir les pages Web plus rapidement. Il prend également en charge en interne WebAssembly, qui permet la compilation de code binaire à utiliser côté client. Deno vise à combler certaines des lacunes de Node.js en fournissant un mécanisme qui maintient naturellement une meilleure sécurité.

  • Sécurité par défaut. Les modules Deno restreignent les autorisations à fichier, réseau, ou alors environnement accès sauf autorisation explicite.
  • Prise en charge de TypeScript hors de la boîte.
  • Mécanisme d'attente de première classe.
  • Installation de test intégrée et formateur de code ( deno fmt )
  • (JavaScript) Compatibilité du navigateur : les programmes Deno qui sont entièrement écrits en JavaScript à l'exclusion de l'espace de noms Deno (ou du test de fonctionnalités pour celui-ci), devraient fonctionner directement dans n'importe quel navigateur moderne.
  • Regroupement de scripts dans un seul fichier JavaScript.

Deno fournit un moyen simple mais puissant d'utiliser JavaScript pour la programmation côté client et côté serveur.

Rubis sur rails (rubis)

Rails (généralement appelé "Ruby on Rails") est un framework Web écrit pour le langage de programmation Ruby.

Rails suit une philosophie de conception très similaire à celle de Django. Comme Django, il fournit des mécanismes standard pour acheminer les URL, accéder aux données d'une base de données, générer du HTML à partir de modèles et formater les données au format JSON ou XML. Il encourage également l'utilisation de modèles de conception tels que DRY ("ne vous répétez pas" - écrivez le code une seule fois si possible), MVC (model-view-controller) et un certain nombre d'autres.

Il existe bien sûr de nombreuses différences dues à des décisions de conception spécifiques et à la nature des langages.

Laravel (PHP)

Laravel est un framework d'application Web avec une syntaxe expressive et élégante. Laravel tente de simplifier le développement en facilitant les tâches courantes utilisées dans la majorité des projets Web, telles que :

    . .
  • Plusieurs back-ends pour le stockage de session et de cache.
  • Base de données ORM expressive et intuitive.
  • Migrations de schémas agnostiques de base de données. . .

Laravel est accessible, mais puissant, fournissant les outils nécessaires pour les applications volumineuses et robustes.

ASP.NET

ASP.NET est un framework Web open source développé par Microsoft pour créer des applications et des services Web modernes. Avec ASP.NET, vous pouvez créer rapidement des sites Web basés sur HTML, CSS et JavaScript, les mettre à l'échelle pour une utilisation par des millions d'utilisateurs et ajouter facilement des fonctionnalités plus complexes telles que des API Web, des formulaires sur des données ou des communications en temps réel.

L'un des différenciateurs d'ASP.NET est qu'il repose sur le Common Language Runtime (CLR), permettant aux programmeurs d'écrire du code ASP.NET à l'aide de n'importe quel langage .NET pris en charge (C#, Visual Basic, etc.). Comme de nombreux produits Microsoft, il bénéficie d'excellents outils (souvent gratuits), d'une communauté de développeurs active et d'une documentation bien rédigée.

ASP.NET est utilisé par Microsoft, Xbox.com, Stack Overflow et bien d'autres.

Mojolicious (Perl)

Mojolicious est un framework Web de nouvelle génération pour le langage de programmation Perl.

Au tout début du Web, de nombreuses personnes ont appris Perl grâce à une merveilleuse bibliothèque Perl appelée CGI. C'était assez simple pour commencer sans trop connaître la langue et assez puissant pour vous permettre de continuer. Mojolicious met en œuvre cette idée en utilisant des technologies de pointe.

Certaines des fonctionnalités fournies par Mojolicious sont :

  • Un framework Web en temps réel, pour transformer facilement des prototypes à fichier unique en applications Web MVC bien structurées.
  • Routes RESTful, plugins, commandes, modèles Perl-ish, négociation de contenu, gestion de session, validation de formulaire, framework de test, serveur de fichiers statiques, détection CGI/PSGI et prise en charge Unicode de première classe.
  • Une implémentation client/serveur HTTP et WebSocket complète avec IPv6, TLS, SNI, IDNA, proxy HTTP/SOCKS5, socket de domaine UNIX, Comet (interrogation longue), keep-alive, pooling de connexions, timeout, cookie, multipart et gzip prise en charge des compressions.
  • Analyseurs et générateurs JSON et HTML/XML avec prise en charge du sélecteur CSS.
  • API pure Perl très propre, portable et orientée objet, sans magie cachée.
  • Nouveau code basé sur des années d'expérience, gratuit et open source.

Botte de printemps (Java)

Spring Boot est l'un des nombreux projets fournis par Spring. C'est un bon point de départ pour faire du développement Web côté serveur à l'aide de Java.

Bien qu'il ne soit certainement pas le seul framework basé sur Java, il est facile à utiliser pour créer des applications Spring autonomes de qualité production que vous pouvez "exécuter". Il s'agit d'une vue d'ensemble de la plate-forme Spring et des bibliothèques tierces, mais permet de commencer avec un minimum de tracas et de configuration.

Il peut être utilisé pour de petits problèmes, mais sa force réside dans la création d'applications à plus grande échelle utilisant une approche cloud. Généralement, plusieurs applications s'exécutent en parallèle et communiquent entre elles, certaines fournissant une interaction avec l'utilisateur et d'autres effectuant un travail de back-end (par exemple, accéder à des bases de données ou à d'autres services). Les équilibreurs de charge aident à assurer la redondance et la fiabilité ou permettent une gestion géolocalisée des demandes des utilisateurs pour assurer la réactivité.


Supposons que vous souhaitiez calculer les ratios hommes-femmes pour divers clubs scolaires, mais que vous découvriez que la requête suivante échoue et génère une erreur de division par zéro lorsqu'elle essaie de calculer le ratio pour le club du Seigneur des Anneaux, qui n'a pas de femmes :

Vous pouvez utiliser la fonction NULLIF pour éviter la division par zéro. NULLIF compare deux expressions et renvoie null si elles sont égales ou la première expression dans le cas contraire.

Tout nombre divisé par NULL donne NULL et aucune erreur n'est générée.

Vous pouvez également le faire au début de la requête :

Donc, si vous avez quelque chose comme 100/0, il renverra NULL. Je ne l'ai fait que pour des requêtes simples, donc je ne sais pas comment cela affectera les requêtes plus longues/complexes.

Vous pouvez au moins empêcher la requête de s'interrompre avec une erreur et renvoyer NULL s'il y a une division par zéro :

Cependant, je voudrais JAMAIS convertissez-le en zéro avec fusion comme indiqué dans cette autre réponse qui a obtenu de nombreux votes positifs. C'est complètement faux au sens mathématique, et c'est même dangereux car votre application renverra probablement des résultats erronés et trompeurs.

EDIT : Je reçois beaucoup de votes négatifs à ce sujet récemment. J'ai donc pensé ajouter simplement une note indiquant que cette réponse a été écrite avant que la question ne subisse sa modification la plus récente, où le retour de null a été mis en surbrillance en tant qu'option. ce qui semble très acceptable. Une partie de ma réponse a été adressée à des préoccupations comme celle d'Edwardo, dans les commentaires, qui semblait préconiser le retour d'un 0. C'est le cas contre lequel je m'insurgeais.

RÉPONSE : Je pense qu'il y a un problème sous-jacent ici, à savoir que la division par 0 n'est pas légale. C'est une indication que quelque chose ne va pas fondamentalement. Si vous divisez par zéro, vous essayez de faire quelque chose qui n'a pas de sens mathématiquement, donc aucune réponse numérique que vous pouvez obtenir ne sera valide. (L'utilisation de null dans ce cas est raisonnable, car ce n'est pas une valeur qui sera utilisée dans les calculs mathématiques ultérieurs).

Edwardo demande donc dans les commentaires « et si l'utilisateur met un 0 ? », et il préconise qu'il devrait être acceptable d'obtenir un 0 en retour. Si l'utilisateur met zéro dans le montant et que vous voulez que 0 soit renvoyé lorsqu'il le fait, vous devez alors saisir du code au niveau des règles métier pour capturer cette valeur et renvoyer 0. pas de cas particulier où la division par 0 = 0.

C'est une différence subtile, mais c'est important. parce que la prochaine fois que quelqu'un appelle votre fonction et s'attend à ce qu'elle fasse ce qu'il faut, et qu'elle fait quelque chose de génial qui n'est pas mathématiquement correct, mais gère simplement le cas particulier, il a de bonnes chances de mordre quelqu'un plus tard. Vous ne divisez pas vraiment par 0. vous renvoyez simplement une mauvaise réponse à une mauvaise question.

Imaginez que je code quelque chose et que je le foire. Je devrais lire une valeur d'échelle de mesure de rayonnement, mais dans un cas étrange que je n'avais pas prévu, j'ai lu 0. Je dépose ensuite ma valeur dans votre fonction. tu me retournes un 0 ! Hourra, pas de radiations ! Sauf que c'est bien là et c'est juste que je passais dans une mauvaise valeur. mais je n'en ai aucune idée. Je veux que la division lance l'erreur parce que c'est le signal que quelque chose ne va pas.


Gestion de la configuration par rapport à l'infrastructure en tant que code (IAC)

Vous connaissez peut-être certains des premiers produits de gestion de configuration qui ont été mis à jour pour inclure IAC. Ceux-ci incluent Puppet, Chef, SaltStack et CFengine. Tous vous permettent de gérer le provisionnement plus automatisé du code sur des plateformes de cloud computing partagées. Mais IAC est la prochaine étape.

Cela peut être un peu déroutant car différents fournisseurs ont des termes différents pour le même composant ou élément. Par exemple, Puppet appelle ses scripts IAC manifeste, tandis que Chef les appelle recetteset livres de cuisine. Les deux font la même chose malgré leurs noms différents : ils stockent les instructions du code.


Développez une compétence Alexa engageante

Bienvenue dans le module 2 de notre didacticiel d'introduction sur la création d'une compétence Alexa attrayante. Dans ce module, nous verrons comment concevoir une interface utilisateur vocale pour vos compétences.
Temps requis : 15 - 30 minutes
Ce que vous apprendrez :

  • Comment les utilisateurs interagissent avec Alexa
  • Concepts de conception vocale : énoncés, intentions, créneaux, modèle d'interaction et conception situationnelle
  • Caractéristiques d'une interface utilisateur vocale (VUI) bien conçue
  • Principaux défis de la conception vocale

Comment les utilisateurs interagissent avec Alexa

Pour créer une interface utilisateur vocale adaptée à vos compétences, vous devez comprendre les principaux concepts de conception vocale. Un utilisateur réveille un appareil compatible Alexa avec le mot de réveil ("Alexa") et pose une question ou fait une demande. Pour les appareils compatibles Alexa avec un écran, un utilisateur peut également toucher l'écran pour interagir avec Alexa.

Concepts de conception vocale : énoncés, intentions et emplacements

Pour créer une interface utilisateur vocale adaptée à vos compétences, vous devez comprendre les principaux concepts de conception vocale.

Mot de réveil : Le mot de réveil dit à Alexa de commencer à écouter vos commandes.

Mot de lancement : Un mot de lancement est un mot d'action de transition qui signale à Alexa qu'une invocation de compétence suivra probablement. Les exemples de mots de lancement incluent tell, ask, open, launch et use.

Nom d'appel : Pour commencer à interagir avec une compétence, un utilisateur prononce le nom d'appel de la compétence. Par exemple, pour utiliser la compétence Horoscope du jour, l'utilisateur peut dire "Alexa, lis mon horoscope du jour".

Énonciation: En termes simples, un énoncé est une requête vocale d'un utilisateur. Ces requêtes vocales peuvent invoquer une compétence, fournir des entrées pour une compétence, confirmer une action pour Alexa, etc. Considérez les nombreuses façons dont un utilisateur peut formuler sa demande.

Rapide: une chaîne de texte qui doit être adressée au client pour lui demander des informations. Vous incluez le texte d'invite dans votre réponse à la demande d'un client.

Intention: Une intention représente une action qui répond à la demande vocale d'un utilisateur. Les intents peuvent éventuellement avoir des arguments appelés slots.

Valeur de l'emplacement : Les créneaux sont des valeurs d'entrée fournies dans la demande vocale d'un utilisateur. Ces valeurs aident Alexa à comprendre l'intention de l'utilisateur.

Dans l'exemple ci-dessous, l'utilisateur donne une information d'entrée, la date de voyage du vendredi. Cette valeur est un créneau d'intention, qu'Alexa transmettra à Lambda pour le traitement du code de compétence.

Les slots peuvent être définis avec différents types. Le créneau de date de voyage dans l'exemple ci-dessus utilise le type AMAZON.DATE intégré d'Amazon pour convertir les mots qui indiquent des dates (tels que "today" et "next Friday") en un format de date, tandis que de City et de City utilisent le AMAZON intégré. Emplacement US_CITY.

If you extended this skill to ask the user what activities they plan to do on the trip, you might add a custom LIST_OF_ACTIVITIES slot type to reference a list of activities such as hiking, shopping, skiing, and so on.


Résultats

All the CVs used for model training were from the IT industry. We were delighted to see that our model also showed quite reasonable performance on the dataset of CVs belonging to other industries such as Design and Finance. Obviously processing CVs with entirely different structure and style would result in a lower model performance. We would also like to mention that our understanding of the “skills” concept could vary from someone elses’. One of the hard cases for our model would be telling skills from new companies names as skills are often equal to software frameworks and sometimes you cannot tell wether this is a startup name mentioned or a new JS framework or a Python library. Nevertheless in most cases our model could be a useful tool for automatic CV analysis and along with some statistical methods could solve wide range of data science tasks on an arbitrary CV corpus.