Suite

Comment restreindre le nombre de symboles dans le nom de la fonctionnalité dans CartoCSS ?

Comment restreindre le nombre de symboles dans le nom de la fonctionnalité dans CartoCSS ?


Je fais une carte touristique avec CartoCSS dans TileMill. Il y a plusieurs zooms et je voudrais montrer les marqueurs des objets sur le zoom 15 et leurs étiquettes (noms) sur le zoom 16 ou 17. Si le nombre de symboles dans le nom est trop important (par exemple, plus de 10), je veux les étiqueter sur le zoom 17, s'il y a moins de 10 symboles, je veux les étiqueter sur le zoom 16.

Quelqu'un pourrait-il aider à définir la restriction sur le nombre de symboles dans CartoCSS ou sql?


Vous ne pouvez pas calculer directement la longueur de la chaîne avec CartoCSS, mais vous pouvez prétraiter les données. Si vous lisez à partir d'une base de données PostGIS, ajoutez un nouveau champ pour la longueur de l'étiquette à l'aide de lachar_length()fonction dans Postgres (docs).

Si vos données sont dans un autre format (par exemple, un fichier de formes), vous devrez effectuer le calcul dans un autre programme (par exemple, qGIS).

Ensuite, utilisez un filtre CartoCSS (par exemple, nommez votre champ calculéchar_count):

#label-layer[zoom=16][char_count < 10], #label-layer[zoom>=17]{… }

Typographie (cartographie)

Typographie, en tant qu'aspect de la conception cartographique, est l'art de concevoir et de placer du texte sur une carte à l'appui des symboles de la carte, représentant ensemble des caractéristiques géographiques et leurs propriétés. Elle est aussi souvent appelée carte étiquetage ou alors caractères, mais typographie est plus conforme à l'usage général de la typographie. Tout au long de l'histoire des cartes jusqu'à nos jours, leur étiquetage a été tributaire des techniques et technologies générales de la typographie.


Un modèle de signal en bande de base utilisé est : $x(t)=sum_^N a_k p(t-kT)$ , où $a_k$ sont les symboles (il en existe de nombreux types, PSK, QAM, PAM par exemple), $p(t)$ est le filtre de mise en forme d'impulsion, $T$ est le période de symbole et $N$ est le nombre de symboles. Le filtre de mise en forme d'impulsions limite la bande passante de $x(t)$ .

Avoir plusieurs échantillons par symbole est appelé suréchantillonnage. Les échantillons par symbole, $ ext$ , n'est généralement pas explicitement choisi mais est déterminé à partir du taux de symboles du signal, $F$ , et du taux d'échantillonnage, $F_s$ , sur une plate-forme particulière : $ ext = frac$ . Votre déclaration selon laquelle "les échantillons par symbole sont le taux d'échantillonnage" n'est pas correcte. Visuellement, avoir plus d'échantillons par symbole "remplit" le symbole et le rendra plus lisse. Outre le filtre de mise en forme d'impulsions, il existe de nombreuses raisons de suréchantillonner. Par exemple, certains algorithmes du récepteur sont conçus pour fonctionner sur le signal reçu suréchantillonné, tandis que d'autres s'attendent à travailler sur les symboles reçus.


Moyen approprié de restreindre les valeurs de saisie de texte (par exemple, uniquement des nombres)

Est-il possible d'implémenter une entrée qui permet de saisir uniquement des nombres à l'intérieur sans manipulation manuelle de event.target.value ?

Dans React, il est possible de définir la propriété de la valeur et ensuite le changement d'entrée sera essentiellement lié à la valeur (impossible de le modifier sans changement de valeur). Voir exemple. Et cela fonctionne très bien sans aucun effort.

Dans Angular 2, il est possible de définir [value] , mais cela définira simplement la valeur initialement, et ensuite la saisie n'est pas empêchée des modifications.

Je jouais avec ngModel et [value] / (input) , voir exemple.

Mais dans les deux mises en œuvre, il y a un problème essentiel :

  1. lorsque vous tapez 10 (la valeur du modèle est 10 la valeur d'entrée est 10) - correct
  2. lorsque vous tapez 10d par la suite (la valeur du modèle est 10 - non modifiée, tous les non-chiffres ont été supprimés la valeur d'entrée est 10d) - incorrect, car la valeur du modèle est la même qu'avant
  3. lorsque vous tapez 10d3 - (la valeur du modèle est 103 la valeur d'entrée est 103) - correct

Comment faire ce composant simple (dès le premier coup d'œil), sans gérer manuellement event.target.value .

METTRE À JOUR Je ne recherche pas ici l'élément input[number] natif HTML5. Les nombres entrés ici sont juste pour l'exemple - il pourrait y avoir beaucoup plus de tâches lorsque j'ai besoin de restreindre le texte d'entrée.

De plus, input[number] est 1) ne m'empêche pas de taper 10ddd et 2) (moins important) contient des flèches dont je n'ai pas besoin.

Et le problème ici est de empêcher l'utilisateur de taper quelque chose au-delà des valeurs restreintes, au lieu de Autoriser saisir quoi que ce soit et valider il après


Plutôt que d'essayer de restreindre l'accès à un dossier, il peut être plus facile d'ajouter vos fichiers en tant que ressources intégrées. De cette façon, ils feront partie de votre exécutable et les utilisateurs ne pourront pas les supprimer.

Placez le fichier binaire des questions dans un sous-dossier et rendez-le en lecture seule pour tout utilisateur à l'exception des administrateurs, ce n'est pas un problème de programmation, c'est un problème d'administration.

Suite aux commentaires, vous avez un ensemble intéressant de contraintes.

Pour le Web, c'est relativement simple et vous pouvez restreindre l'accès des utilisateurs aux fichiers d'application/de données de plusieurs manières - cela est (ou devrait être) inhérent aux serveurs/applications Web (c'est certainement intégré à asp.net).

Pour une application de bureau, cependant, c'est plutôt plus intéressant et cela dépend de la façon dont l'application doit être installée/exécutée - si l'utilisateur a des droits d'administrateur sur la machine, vous ne pouvez pas faire grand-chose pour l'empêcher de manipuler des fichiers. Si ce n'est pas le cas, vous avez besoin d'un administrateur pour déployer l'application et vous avez un autre ensemble de problèmes intéressants.

Comme vous cherchez une solution pour travailler sur les deux plates-formes, je ferais comme @Andy le suggère, la meilleure solution est donc probablement de faire des questions des ressources intégrées - cela n'empêchera pas nécessairement un utilisateur de supprimer le fichier mais cela fera en manipulant le contenu beaucoup plus difficilement, vous pouvez également ajouter une empreinte digitale (MD5 par exemple) et un cryptage dans le mélange. Si vous souhaitez pouvoir disposer de différents ensembles de questions, vous pouvez simplement les intégrer dans un fichier .dll distinct et il existe différentes options pour récupérer les fichiers .dll lors de l'exécution.


8 réponses 8

Il y a quelques choses que vous pouvez faire pour aider à restreindre l'utilisation de l'application à un emplacement de bureau spécifique et à des appareils spécifiques, bien que comme d'autres réponses le soulignent, aucune d'entre elles ne constitue une protection absolue

  • Configurez un pare-feu devant l'application pour restreindre les adresses IP autorisées à accéder à l'application à la plage d'adresses IP externes des clients. La plupart des entreprises auront des adresses IP statiques sur leurs routeurs Internet et si vous configurez l'application uniquement pour qu'elle soit accessible par ces adresses IP, il serait plus difficile pour une personne non autorisée d'y accéder à moins qu'elle ne soit dans leur bureau. TBH cela ressemble à l'approche qui fonctionnera le mieux pour les besoins de vos clients
  • Vous pouvez également utiliser des certificats clients sur des appareils autorisés. Comme @adnan le souligne, il peut être possible de les déplacer vers une autre machine, mais cela nécessiterait que l'attaquant soit un membre du personnel ou qu'il ait un accès non autorisé à l'un de leurs systèmes.
  • peut-être qu'en tant que contrôle de détective, vous pourriez combiner cela avec les empreintes digitales du navigateur (par exemple, panopticlick ). Créez une liste d'appareils et de leur empreinte digitale, puis si le certificat client est utilisé sur un appareil qui ne correspond pas à l'empreinte digitale, vous pouvez le bloquer.

Comme je l'ai dit, ce ne sont pas des absolus, mais rien dans la sécurité ne l'est. Si tout ce que votre client recherche est d'empêcher les gens de l'extérieur de l'entreprise de voir leur site, j'opterais pour l'approche du filtre d'adresse IP source.

Il vous suffit d'héberger l'application Web sur un serveur de l'intranet qui n'est pas connecté à Internet.

Un routage et une mesure de pare-feu appropriés doivent garantir que personne qui n'est pas connecté au réseau local n'a accès à l'application Web.

Si des personnes extérieures au réseau ont besoin d'accéder à l'application Web, demandez-leur de configurer une connexion VPN à votre réseau local.


Essayez cela peut fonctionner pour vous

Si vous souhaitez ajouter des espaces, vous pouvez donner un espace après le dernier chiffre.

Ou si vous préférez la facilité :

regarde ce lien qui montre Comment restreindre les caractères spéciaux d'un champ Android EditText ?

Essayez ce code android:digits="abcde. 012345789" je suppose que c'est le moyen le plus simple de le faire. J'espère que cela vous aidera.

Il est tard mais peut être utile à d'autres. Au lieu de programmer, vous pouvez utiliser l'attribut xml. Il se peut que dans la mise en page unique, vous ayez de nombreux editText, parmi lesquels vous souhaitez restreindre les caractères spéciaux à un seul EditText. Donc, définir en XML vous aidera. Voici le code pour restreindre les caractères spéciaux en leur permettant d'entrer uniquement des alphabets et des chiffres comme ci-dessous

Pour ceux qui pourraient rencontrer des problèmes lors de l'ajout d'espace, veuillez ajouter un espace vide avec tous les alphabets. Vous trouverez ci-dessous un exemple. Vous devez également savoir que l'utilisateur ne pourra pas ajouter de nouvelle ligne dans ce cas.

Vous devez d'abord ajouter DigitsKeyListener pour autoriser les caractères, puis définirRawInputType pour modifier le champ de texte


Comment rendre les ensembles de fonctionnalités plus efficaces pour Personalizer

Un bon ensemble de fonctionnalités aide Personalizer à apprendre à prédire l'action qui générera la plus haute récompense.

Envisagez d'envoyer des fonctionnalités à l'API Personalizer Rank qui suivent ces recommandations :

Utilisez des types catégoriels et de chaîne pour les entités qui ne sont pas une grandeur.

Il y a suffisamment de fonctionnalités pour favoriser la personnalisation. Plus le contenu doit être ciblé avec précision, plus il faut de fonctionnalités.

Il y a suffisamment de caractéristiques de diverses densités. Une caractéristique est dense si de nombreux articles sont regroupés dans quelques seaux. Par exemple, des milliers de vidéos peuvent être classées en "Long" (plus de 5 minutes) et "Courtes" (moins de 5 minutes). C'est un très dense fonctionnalité. D'autre part, les mêmes milliers d'articles peuvent avoir un attribut appelé "Title", qui n'aura presque jamais la même valeur d'un article à l'autre. Il s'agit d'une zone très peu dense ou clairsemé fonctionnalité.

Le fait d'avoir des fonctionnalités de haute densité aide le Personalizer à extrapoler l'apprentissage d'un élément à un autre. Mais s'il n'y a que quelques fonctionnalités et qu'elles sont trop denses, le Personalizer essaiera de cibler précisément le contenu avec seulement quelques buckets parmi lesquels choisir.

Améliorer les ensembles de fonctionnalités

Analysez le comportement de l'utilisateur en effectuant une évaluation hors ligne. Cela vous permet d'examiner les données passées pour voir quelles fonctionnalités contribuent fortement aux récompenses positives par rapport à celles qui contribuent moins. Vous pouvez voir quelles fonctionnalités vous aident, et ce sera à vous et à votre application de trouver de meilleures fonctionnalités à envoyer à Personalizer pour améliorer encore les résultats.

Les sections suivantes sont des pratiques courantes pour améliorer les fonctionnalités envoyées à Personalizer.

Rendre les fonctionnalités plus denses

Il est possible d'améliorer vos ensembles de fonctionnalités en les éditant pour les rendre plus grands et plus ou moins denses.

Par exemple, un horodatage à la seconde près est une fonctionnalité très rare. Il pourrait être rendu plus dense (efficace) en classant les horaires en "matin", "midi", "après-midi", etc.

Les informations de localisation bénéficient également généralement de la création de classifications plus larges. Par exemple, une coordonnée Latitude-Longitude telle que Lat : 47,67402° N, Long : 122,12154° W est trop précise et force le modèle à apprendre la latitude et la longitude en tant que dimensions distinctes. Lorsque vous essayez de personnaliser en fonction des informations de localisation, il est utile de regrouper les informations de localisation dans des secteurs plus vastes. Un moyen simple de le faire est de choisir une précision d'arrondi appropriée pour les nombres Lat-Long et de combiner la latitude et la longitude en "areas" en les transformant en une seule chaîne. Par exemple, un bon moyen de représenter 47,67402° N, Long : 122,12154° W dans des régions d'environ quelques kilomètres de large serait "location":"34.3 , 12.1".

Développez les ensembles de fonctionnalités avec des informations extrapolées

Vous pouvez également obtenir plus de fonctionnalités en pensant aux attributs inexplorés qui peuvent être dérivés des informations dont vous disposez déjà. Par exemple, dans une personnalisation de liste de films fictifs, est-il possible qu'un week-end par rapport à un jour de semaine suscite un comportement différent de la part des utilisateurs ? Le temps peut être étendu pour avoir un attribut "weekend" ou "weekday". Les fêtes culturelles nationales attirent-elles l'attention sur certains types de films ? Par exemple, un attribut "Halloween" est utile dans les endroits où il est pertinent. Est-il possible que le temps pluvieux ait un impact significatif sur le choix d'un film pour de nombreuses personnes ? Avec le temps et le lieu, un service météo pourrait fournir cette information et vous pouvez l'ajouter en tant que fonctionnalité supplémentaire.

Étendez les ensembles de fonctionnalités avec l'intelligence artificielle et les services cognitifs

L'intelligence artificielle et les services cognitifs prêts à l'emploi peuvent être un ajout très puissant au personnalisateur.

En prétraitant vos articles à l'aide de services d'intelligence artificielle, vous pouvez automatiquement extraire des informations susceptibles d'être pertinentes pour la personnalisation.

  • Vous pouvez exécuter un fichier vidéo via Video Indexer pour extraire des éléments de scène, du texte, des sentiments et de nombreux autres attributs. Ces attributs peuvent ensuite être rendus plus denses pour refléter les caractéristiques que les métadonnées de l'élément d'origine n'avaient pas.
  • Les images peuvent être exécutées via la détection d'objets, les visages via les sentiments, etc.
  • Les informations dans le texte peuvent être augmentées en extrayant des entités, des sentiments, en développant des entités avec le graphe de connaissances Bing, etc.

Vous pouvez utiliser plusieurs autres services cognitifs Azure, comme


java.util.Scanner peut déjà vérifier si le prochain jeton est d'un modèle/type donné avec les méthodes hasNextXXX.

Voici un exemple d'utilisation de boolean hasNext(String pattern) pour valider que le prochain jeton est composé uniquement de lettres, en utilisant l'expression régulière [A-Za-z]+ :

Veuillez saisir des lettres :
&#@#$
Non, ce n'est pas ça !
123
Non, ce n'est pas ça !
James Bond
Merci! J'ai James

Pour valider que le prochain jeton est un nombre que vous pouvez convertir en int , utilisez hasNextInt() puis nextInt() .

Questions connexes

Il est probablement plus facile de le faire avec une expression régulière. Voici un exemple de code :

Vous devriez probablement écrire des méthodes de "getAlphaInput" et "getNumericInput" qui effectuent la boucle appropriée de prompt/fetch/check jusqu'à ce que l'entrée soit correcte. Ou peut-être simplement getInput(Pattern) pour éviter d'écrire du code similaire pour différents modèles.

Vous devez également définir des exigences concernant ce qui compte comme une "lettre" - ce qui précède ne concerne que a-z et A-Z. si vous devez également gérer les accents, etc., vous devriez regarder de plus près les documents Pattern et vous adapter de manière appropriée.

Notez que vous pouvez également utiliser une expression régulière pour valider des éléments tels que la longueur de la chaîne. Ils sont très flexibles.


Glossaire

Solutions

Réponses aux questions d'autocontrôle

    1. Un brevet est une barrière à l'entrée imposée par le gouvernement.
    2. Ce n'est pas une barrière à l'entrée.
    3. Ce n'est pas une barrière à l'entrée.
    4. C'est une barrière à l'entrée, mais elle n'est pas imposée par le gouvernement.
    5. C'est une barrière à l'entrée, mais elle n'est pas directement imposée par le gouvernement.
    1. Il s'agit d'une barrière à l'entrée imposée par le gouvernement.
    2. Il s'agit d'un exemple de loi gouvernementale, mais ce n'est peut-être pas vraiment un obstacle à l'entrée si la plupart des gens peuvent réussir le test de sécurité et obtenir une assurance.
    3. Les marques de commerce sont appliquées par le gouvernement et constituent donc une barrière à l'entrée.
    4. Ce n'est probablement pas une barrière à l'entrée, car il existe un certain nombre de façons différentes d'obtenir de l'eau pure.
    5. C'est une barrière à l'entrée, mais elle n'est pas imposée par le gouvernement.