Mais

Como restringir o número de símbolos no nome do recurso no CartoCSS?

Como restringir o número de símbolos no nome do recurso no CartoCSS?


Eu faço um mapa turístico com CartoCSS em TileMill. Existem vários zooms e gostaria de mostrar os marcadores dos objetos no zoom 15 e seus rótulos (nomes) no zoom 16 ou 17. Se o número de símbolos no nome for muito (por exemplo, mais de 10) quero rotulá-los no zoom 17, se houver menos de 10 símbolos, quero rotulá-los no zoom 16.

Alguém poderia ajudar a definir a restrição do número de símbolos no CartoCSS ou sql?


Você não pode calcular o comprimento da string com CartoCSS diretamente, mas você pode pré-processar os dados. Se você estiver lendo de um banco de dados PostGIS, adicione um novo campo para o comprimento do rótulo usando ochar_length ()função no Postgres (docs).

Se seus dados estiverem em outro formato (por exemplo, arquivo de forma), você terá que fazer o cálculo em outro programa (por exemplo, qGIS).

Em seguida, use um filtro CartoCSS (por exemplo, nomeie seu campo calculadochar_count):

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

Tipografia (cartografia)

Tipografia, como um aspecto do design cartográfico, é a arte de projetar e colocar texto em um mapa para apoiar os símbolos do mapa, juntos representando características geográficas e suas propriedades. Também é freqüentemente chamado de mapa marcação ou letras, mas tipografia está mais de acordo com o uso geral da tipografia. Ao longo da história dos mapas até o presente, sua etiquetagem tem sido dependente das técnicas e tecnologias gerais da tipografia.


Um modelo de sinal de banda base usado é: $ x (t) = sum_^ N a_k p (t-kT) $, onde $ a_k $ são os símbolos (existem muitos tipos, PSK, QAM, PAM por exemplo), $ p (t) $ é o filtro de modelagem de pulso, $ T $ é o período do símbolo e $ N $ é o número de símbolos. O filtro de modelagem de pulso limita a largura de banda de $ x (t) $.

Ter várias amostras por símbolo é chamado de sobreamostragem. As amostras por símbolo, $ text$, geralmente não é escolhido explicitamente, mas é determinado a partir da taxa de símbolo do sinal, $ F $, e da taxa de amostragem, $ F_s $, em uma plataforma específica: $ text = frac$. Sua afirmação de que "amostras por símbolo é a taxa de amostragem" não está correta. Visualmente, ter mais amostras por símbolo "preenche" o símbolo e o torna mais suave. Existem muitas razões, além do filtro de modelagem de pulso, para sobreamostrar. Por exemplo, alguns algoritmos no receptor são projetados para operar no sinal recebido sobreamostrado, enquanto outros esperam trabalhar nos símbolos recebidos.


Maneira adequada de restringir os valores de entrada de texto (por exemplo, apenas números)

É possível implementar uma entrada que permite digitar apenas números dentro, sem manipulação manual de event.target.value?

No React é possível definir a propriedade do valor e posteriormente a alteração da entrada estará basicamente vinculada ao valor (não é possível modificá-lo sem alteração do valor). Consultar exemplo. E funciona muito bem sem nenhum esforço.

Em Angular 2 é possível definir [valor], mas irá apenas definir o valor inicialmente, e depois a entrada não será impedida de modificações.

Eu estava brincando com ngModel e [value] / (input), veja o exemplo.

Mas em ambas as implementações há um problema essencial:

  1. quando você digita 10 (o valor do modelo é 10, o valor de entrada é 10) - correto
  2. quando você digita 10d depois (o valor do modelo é 10 - não modificado, todos os não dígitos foram removidos, o valor de entrada é 10d) - incorreto, porque o valor do modelo é o mesmo de antes
  3. quando você digita 10d3 - (o valor do modelo é 103, o valor de entrada é 103) - correto

Como fazer esse componente simples (à primeira vista), sem manipular manualmente event.target.value.

ATUALIZAR Não estou procurando o elemento [número] de entrada HTML5 nativo aqui. A entrada de números aqui é apenas um exemplo - pode haver muito mais tarefas quando eu preciso restringir o texto de entrada.

Além disso, a entrada [número] é 1) não me restringe de digitar 10ddd e 2) (menos importante) contém setas que eu não preciso.

E o problema aqui é evita usuário digite algo além dos valores restritos, em vez de permitir para inserir qualquer coisa e validar depois


Em vez de tentar restringir o acesso a uma pasta, pode ser mais fácil adicionar seus arquivos como recursos incorporados. Dessa forma, eles farão parte do seu executável e os usuários não poderão excluí-los.

Coloque o arquivo binário de perguntas em uma subpasta e torne-o lido apenas para qualquer usuário, exceto os administradores. Isso não é um problema de programação, é um problema de administração.

Após os comentários, você tem um conjunto interessante de restrições.

Para a web, isso é relativamente simples e você pode restringir o acesso do usuário aos arquivos de aplicativo / dados de várias maneiras - isso é (ou deveria ser) inerente aos servidores / aplicativos da web (certamente está incorporado ao asp.net).

Para um aplicativo de desktop, entretanto, é um pouco mais interessante e depende de como o aplicativo deve ser instalado / executado - se o usuário tiver direitos de administrador na máquina, então há muito pouco que você possa fazer para impedi-lo de manipular arquivos. Se não o fizerem, você precisará de um administrador para implantar o aplicativo e terá um conjunto diferente de problemas interessantes.

Como você está procurando uma solução para trabalhar em ambas as plataformas, eu faria como @Andy sugere que a melhor solução é provavelmente, portanto, fazer as perguntas sobre recursos incorporados - isso não impedirá necessariamente que um usuário exclua o arquivo, mas fará manipulando o conteúdo com muito mais dificuldade, você pode adicionar uma impressão digital (MD5, por exemplo) e criptografia à mistura também. Se você deseja ter diferentes conjuntos de perguntas, basta incorporá-los em um .dll separado e há várias opções para selecionar os .dlls no tempo de execução.


8 Respostas 8

Há algumas coisas que você pode fazer para ajudar a restringir o uso do aplicativo a um local de escritório específico e dispositivos específicos, embora, como outras respostas apontam, nenhuma delas é proteção absoluta

  • Configure um firewall na frente do aplicativo para restringir os endereços IP permitidos para acessar o aplicativo ao intervalo de endereços IP externos dos clientes. A maioria das empresas terá endereços IP estáticos em seus roteadores voltados para a Internet e se você definir o aplicativo para ser acessível apenas por esses endereços IP, será mais difícil para uma pessoa não autorizada obter acesso a ele, a menos que esteja em seu escritório. TBH, esta parece ser a abordagem que funcionará melhor para as necessidades de seus clientes
  • Você também pode usar certificados de cliente em dispositivos autorizados. Como @adnan aponta, pode ser possível movê-los para outra máquina, mas isso exigiria que o invasor seja um membro da equipe ou para ter acesso não autorizado a um de seus sistemas
  • talvez, como um controle de detetive, você possa combinar isso com a impressão digital do navegador (por exemplo, panopticlick). Crie uma lista de dispositivos e suas impressões digitais e, se o certificado do cliente for usado em um dispositivo que não corresponda à impressão digital, você poderá bloqueá-lo.

Como eu disse, esses não são absolutos, mas nada em segurança é. Se tudo o que seu cliente está procurando é impedir que pessoas de fora da empresa vejam seu site, eu escolheria a abordagem de filtro de endereço IP de origem.

Basta hospedar o aplicativo da web em um servidor da intranet que não esteja conectado à internet.

O roteamento adequado e a medida de firewall devem garantir que ninguém que não esteja conectado à rede local tenha acesso ao aplicativo da web.

Se pessoas fora da rede precisarem de acesso ao aplicativo da web, peça que configurem uma conexão VPN com sua rede local.


Tente isso pode funcionar para você

Se você quiser adicionar espaços, pode dar espaço após o último dígito.

Ou se você preferir o jeito mais fácil:

verifique este link que mostra Como restringir caracteres especiais de um campo Android EditText?

Experimente este código android: digits = "abcde. 012345789" Acho que esta é a maneira mais fácil de fazer.Espero que isso ajude você.

É tarde, mas pode ser útil para outros. Em vez de programaticamente, você pode usar o atributo xml. Pode ser que no layout Único você tenha muitos editText, dos quais você deseja restringir caracteres especiais apenas em um EditText. Portanto, definir em xml o ajudará. Aqui está o código para restringir os caracteres especiais, permitindo-lhes inserir apenas letras e números como abaixo

Para aqueles que podem estar enfrentando problemas ao adicionar espaço, adicione um espaço em branco com todos os alfabetos. Abaixo está um exemplo. Você também deve saber que o usuário não será capaz de adicionar uma nova linha neste caso.

Primeiro, precisa adicionar DigitsKeyListener para permitir caracteres e, em seguida, setRawInputType para editar o campo de texto


Como tornar os conjuntos de recursos mais eficazes para o Personalizer

Um bom conjunto de recursos ajuda o Personalizer a aprender a prever a ação que gerará a maior recompensa.

Considere o envio de recursos para a API Personalizer Rank que seguem estas recomendações:

Use tipos categóricos e de string para recursos que não são uma magnitude.

Existem recursos suficientes para impulsionar a personalização. Quanto mais precisamente direcionado for o conteúdo, mais recursos serão necessários.

Existem recursos suficientes de diversos densidades. Um recurso é denso se muitos itens estiverem agrupados em alguns baldes. Por exemplo, milhares de vídeos podem ser classificados como & quotLongo & quot (mais de 5 min de duração) e & quotShort & quot (menos de 5 min de duração). Isto é um muito denso característica. Por outro lado, os mesmos milhares de itens podem ter um atributo denominado & quotTitle & quot, que quase nunca terá o mesmo valor de um item para outro. Este é um muito pouco denso ou escasso característica.

Ter recursos de alta densidade ajuda o Personalizer a extrapolar o aprendizado de um item para outro. Mas se houver apenas alguns recursos e eles forem muito densos, o Personalizer tentará direcionar o conteúdo com precisão com apenas alguns baldes para escolher.

Melhorar os conjuntos de recursos

Analise o comportamento do usuário fazendo uma avaliação offline. Isso permite que você observe os dados anteriores para ver quais recursos estão contribuindo fortemente para recompensas positivas em comparação com aqueles que estão contribuindo menos. Você pode ver quais recursos estão ajudando e caberá a você e ao seu aplicativo encontrar os melhores recursos para enviar ao Personalizer para melhorar ainda mais os resultados.

As seções a seguir são práticas comuns para melhorar os recursos enviados ao Personalizer.

Tornar os recursos mais densos

É possível melhorar seus conjuntos de recursos editando-os para torná-los maiores e mais ou menos densos.

Por exemplo, um carimbo de data / hora até o segundo é um recurso muito esparso. Ele poderia ser mais denso (eficaz) classificando os horários em & quotmanhã & quot, & quotmidday & quot, & quotafternoon & quot, etc.

As informações de localização normalmente também se beneficiam da criação de classificações mais amplas. Por exemplo, uma coordenada Latitude-Longitude como Lat: 47,67402 ° N, Longo: 122,12154 ° W é muito precisa e força o modelo a aprender latitude e longitude como dimensões distintas. Quando você está tentando personalizar com base nas informações de localização, ajuda a agrupar as informações de localização em setores maiores. Uma maneira fácil de fazer isso é escolher uma precisão de arredondamento apropriada para os números Lat-Long e combinar latitude e longitude em & quotareas & quot, transformando-as em uma única string. Por exemplo, uma boa maneira de representar 47,67402 ° N, Long: 122,12154 ° W em regiões de aproximadamente alguns quilômetros de largura seria & quotlocation & quot: & quot34.3, 12.1 & quot.

Expanda os conjuntos de recursos com informações extrapoladas

Você também pode obter mais recursos pensando em atributos inexplorados que podem ser derivados das informações que você já possui. Por exemplo, em uma personalização de lista de filmes fictícios, é possível que um fim de semana versus um dia da semana provoque um comportamento diferente dos usuários? O tempo pode ser expandido para ter um atributo & quotweekend & quot ou & quotweekday & quot. Os feriados culturais nacionais chamam a atenção para certos tipos de filmes? Por exemplo, um atributo & quotHalloween & quot é útil em lugares onde é relevante. É possível que o tempo chuvoso tenha um impacto significativo na escolha de um filme para muitas pessoas? Com a hora e o local, um serviço meteorológico pode fornecer essas informações e você pode adicioná-las como um recurso extra.

Expanda os conjuntos de recursos com inteligência artificial e serviços cognitivos

A Inteligência Artificial e os Serviços Cognitivos prontos para executar podem ser uma adição muito poderosa ao Personalizer.

Ao pré-processar seus itens usando serviços de inteligência artificial, você pode extrair automaticamente informações que provavelmente sejam relevantes para personalização.

  • Você pode executar um arquivo de filme por meio do Video Indexer para extrair elementos de cena, texto, sentimento e muitos outros atributos. Esses atributos podem ser tornados mais densos para refletir características que os metadados do item original não possuíam.
  • As imagens podem ser executadas por meio da detecção de objetos, rostos por meio de sentimentos, etc.
  • As informações em texto podem ser aumentadas extraindo entidades, sentimento, expandindo entidades com o gráfico de conhecimento do Bing, etc.

Você pode usar vários outros Serviços Cognitivos do Azure, como


java.util.Scanner já pode verificar se o próximo token é de um determinado padrão / tipo com os métodos hasNextXXX.

Aqui está um exemplo de uso de hasNext (padrão String) booleano para validar que o próximo token consiste em apenas letras, usando a expressão regular [A-Za-z] +:

Por favor, digite as letras:
& amp # @ # $
Não, não é isso!
123
Não, não é isso!
James Bond
Obrigada! Tenho James

Para validar que o próximo token é um número que você pode converter em int, use hasNextInt () e, em seguida, nextInt ().

Perguntas relacionadas

Provavelmente, é mais fácil fazer isso com uma expressão regular. Aqui está um exemplo de código:

Você provavelmente deve escrever métodos de "getAlphaInput" e "getNumericInput" que executam o loop apropriado de prompt / busca / verificação até que a entrada esteja correta. Ou possivelmente apenas getInput (Pattern) para evitar escrever código semelhante para padrões diferentes.

Você também deve trabalhar os requisitos em torno do que conta como uma "letra" - o acima só faz a-z e A-Z. se você também precisa lidar com acentos, etc., deve olhar mais de perto a documentação do padrão e adaptar-se apropriadamente.

Observe que você também pode usar uma regex para validar itens como o comprimento da string. Eles são muito flexíveis.


Glossário

Soluções

Respostas para perguntas de autoavaliação

    1. Uma patente é uma barreira imposta pelo governo à entrada.
    2. Esta não é uma barreira à entrada.
    3. Esta não é uma barreira à entrada.
    4. Esta é uma barreira à entrada, mas não é imposta pelo governo.
    5. Esta é uma barreira à entrada, mas não é aplicada diretamente pelo governo.
    1. Esta é uma barreira de entrada imposta pelo governo.
    2. Este é um exemplo de lei governamental, mas talvez não seja uma grande barreira à entrada se a maioria das pessoas conseguir passar no teste de segurança e obter seguro.
    3. As marcas registradas são impostas pelo governo e, portanto, são uma barreira à entrada.
    4. Provavelmente, isso não é uma barreira à entrada, uma vez que existem várias maneiras diferentes de se obter água pura.
    5. Esta é uma barreira à entrada, mas não é imposta pelo governo.

    Assista o vídeo: Permitir SOMENTE NÚMEROS em Textbox Excel VBA - Bloquear Letras