{catchpole} Redux e hash de arquivos e sites com {ssdeepr}

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon R – rud.is, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.

Über terça-feira chegou e quase desapareceu (alguns resultados do estado levarão um tempo para se unir) e fico aliviado em dizer que {catchpole} realmente funcionou, com o código de exemplo de antes de produzi-lo na primeira execução:

Se ajustarmos o espaço do buffer em torno dos quadrados, acho que o cartograma parece melhor:

mas você provavelmente deve usar uma paleta diferente (consulte este tópico do Twitter por exemplo).

Observei no post anterior que as fronteiras podem ser possíveis. Embora não tenha resolvido esse caso de uso para estados individuais, consegui criar um método para tornar uma versão leve do cartograma utilizável:

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
library(sf)
library(hrbrthemes) 
library(catchpole)
library(tidyverse)

delegates % 
  map(~{
    suppressWarnings(suppressMessages(st_buffer(
      x = st_union(m[m$state %in% .x, ]),
      dist = 0.0001,
      endCapStyle = "SQUARE"
    )))
  }) -> m_borders

gg 

{ssdeepr}

Os pesquisadores do Binary Edge adicionaram hash de página da web (raspagem pré e pós-javascript) à sua plataforma usando ssdeep. Essa abordagem está na categoria de hashes fragmentados acionados por contexto (CTPH) (ou hash de sensibilidade local) semelhantes à minha adaptação / embalagem R do tlsh da Trend Micro.

Como vou trabalhar com os dados da BE regularmente e o projeto ssdeep tem uma biblioteca bem criada (além de podermos adicionar suporte ssdeep a $ DAYJOB), fui adiante e empacotei isso também.

Eu recomendo usar o hash_con() funcionar se você precisar ler blobs grandes, pois não exige que você leia tudo primeiro na memória (embora hash_file() também não, mas é uma chamada direta de baixo nível para o leitor de arquivos da biblioteca ssdeep subjacente e não é tão flexível quanto as conexões R).

Leia Também  Archive Existing RDS Files | R-bloggers

Esses tipos de hashes são ótimos para ver se algo mudou em um site (ou ver como duas coisas são semelhantes entre si). Por exemplo, até que ponto o espelho CRAN corresponde à nave-mãe?

library(ssdeepr) # see the links above for installation

cran1 

Eu peguei cran.biotools.fr como eu vi, eles estavam bem atrás do CRAN – adequados na página de monitoramento.

Observei que o BE também estava fazendo hash pré e pós-javascript. Por que você pode perguntar? Bem, os sites se comportam de maneira diferente com o javascript em execução, além de poderem se comportar de maneira diferente quando diferentes agentes de usuário são definidos. Vamos pegar uma página da Wikipedia de algumas maneiras diferentes para mostrar como elas não são iguais, dependendo do contexto da recuperação. Primeiro, vamos pegar um conteúdo da web!

library(httr)
library(ssdeepr)
library(splashr)

# regular grab
h1 %
  splash_user_agent(ua_macos_chrome) %>%
  splash_go("https://en.wikipedia.org/wiki/Donald_Knuth") %>%
  splash_wait(2) %>%
  splash_html(raw_html = TRUE) -> js1

# js-enabled with another ua
sp %>%
  splash_user_agent(ua_ios_safari) %>%
  splash_go("https://en.wikipedia.org/wiki/Donald_Knuth") %>%
  splash_wait(2) %>%
  splash_html(raw_html = TRUE) -> js2

h2 

Agora, vamos compará-los:

hash_compare(h1, h4) # {ssdeepr} built-in vs httr::GET() => not surprising that they're equal
## [1] 100

# things look way different with js-enabled

hash_compare(h1, h2)
## [1] 0
hash_compare(h1, h3)
## [1] 0

# and with variations between user-agents

hash_compare(h2, h3)
## [1] 0

hash_compare(h2, h4)
## [1] 0

# only doing this for completeness

hash_compare(h3, h4)
## [1] 0

Neste exemplo, apenas o tamanho do conteúdo seria suficiente para dizer a diferença (principalmente, observe como os hashes são iguais, apesar de mais caracteres retornarem com o método {httr}):

length(js1)
## [1] 432914

length(js2)
## [1] 270538

nchar(
  paste0(
    readLines(url("https://en.wikipedia.org/wiki/Donald_Knuth")),
    collapse = "n"
  )
)
## [1] 373078

length(content(res, as = "raw"))
## [1] 374099

FIN

Se você estava em um estado dos EUA com uma escola primária ontem e foi elegível para votar (e tinha algo para votar, seja um candidato (D) ou um negócio estadual / local)), espero que sim!

Leia Também  Ordenando barras dentro de seus grupos em um gráfico de barras por @ ellis2013nz

A biblioteca ssdeep funciona no Windows, então vou descobrir como fazê-lo em breve (ssdeepr} em breve (principalmente para experimentar a cadeia de ferramentas Rtools 4.0 versus querer deliberadamente apoiar plataformas legadas).

Como de costume, descarte questões / PRs / solicitações de recursos onde você se sentir confortável para qualquer um desses ou outros pacotes.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha seu sabor: e-mail, Twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br