Java / .Net – SourceAFIS – Biblioteca de reconhecimento de impressões digitais – (Fingerprint recognition library)

fingerprint

SourceAFIS

for Java and .NET

SourceAFIS é um algoritmo que reconhece impressões digitais humanas. Ele pode comparar duas impressões digitais 1: 1 ou pesquisar um grande banco de dados 1: N para impressão digital correspondente. Ele pega imagens de impressões digitais na entrada e produz uma pontuação de similaridade na saída. A pontuação de similaridade é então comparada com o limite de correspondência personalizável.

O algoritmo SourceAFIS tem duas implementações de código aberto quase idênticas em Java puro e .NET puro. API SourceAFIS é projetado para máxima simplicidade e facilidade de uso por desenvolvedores de aplicativos. Precisão e velocidade de correspondência são suficientes para a maioria das aplicações..

Algorithm

O algoritmo SourceAFIS é o resultado do design de algoritmo independente. Não apenas copia algum algoritmo de livro didático. No entanto, ele empresta muito de outros correspondentes de impressões digitais de código aberto. Ele oferece precisão decente e velocidade de correspondência surpreendentemente alta.

O SourceAFIS, sendo o opensource, fornece um recurso muito raro de transparência de algoritmo que expõe estruturas de dados intermediárias computadas pelo algoritmo durante a correspondência de impressões digitais, o que abre a porta para aplicativos interessantes que antes eram impossíveis com os correspondentes comerciais.

A implementação open source do algoritmo combinado com a licença permissiva pode ser explorada para o desenvolvimento de modificações customizadas interessantes no algoritmo por qualquer um com algum tempo de sobra. Alterações no algoritmo também podem ser implementadas pelo autor do SourceAFIS como um projeto de desenvolvimento customizado e acessível.

https://sourceafis.machinezoo.com/

Java – Projeto Spring Security com JWT: Autenticação e Autorização por JDBC no MySQL (Spring Security Project with JWT: Authentication and Authorization by JDBC in MySQL)

spring_securityA ideia desse post não é realizar um passo a passo de como implementar o Spring Security, mas sim compartilhar um projeto bem simples e auto explicativo que desenvolvi. Esse projeto utiliza o Spring Security com autenticação JWT buscando seus usuários em um banco de dados em MySQL / MariaDB com senhas criptografadas em BCrypt.

https://github.com/helpdeveloper/spring-jwt-auth-jdbc

Python / Redis – O que é o caracter ‘b’ no retorno do redis (About char b prefix in Python client connect to redis)

redis_python

b’Hello Python’

Esse tipo de retorno indica que o valor é um byte de string – o redis irá codificar automaticamente a string unicode para você na gravação, mas é seu trabalho decodificá-lo ao pega-lo.

>>> redisClient = redis.Redis(host=’0.0.0.0′,port=6379)
>>> redisClient.set(‘test_redis’, ‘Hello Python’)
>>> redisClient.get(‘test_redis’)
b’Hello Python’

Podemos decodificar seu valor de duas maneiras:

A primeira seria logo ao abrir a conexão definir a propriedade decode_responses

>>> redisClient = redis.Redis(host=’0.0.0.0′,port=6379, decode_responses=True)
>>> redisClient.get(‘test_redis’)
‘Hello Python’

A outra maneira é chamar o método .decode no retorno do .get()

>>> redisClient = redis.Redis(host=’0.0.0.0′,port=6379)
>>> redisClient.get(‘test_redis’).decode()
‘Hello Python’

Uma observação importante:
Podemos configurar o charset na conexão, no decode ou até mesmo no encode:

>>> redisClient = redis.Redis(host=’0.0.0.0′,port=6379, charset=’utf-8′, decode_responses=True)

>>> redisClient.set(‘test_redis’, ‘Hello Python’.encode(‘utf-8′))

>>> redisClient.get(‘test_redis’).decode(‘utf-8)

Python – Criando um ambiente virtual (venv) – (Creation of virtual environments)

py

O módulo venv fornece suporte para a criação de “ambientes virtuais” leves com seus próprios diretórios isolados dos diretórios do sistema. Cada ambiente virtual tem seu próprio binário Python (que corresponde à versão do binário que foi usada para criar esse ambiente) e pode ter seu próprio conjunto independente de pacotes Python instalados em seus diretórios de sites.

Instale a dependência do python para criar a venv:

$sudo apt-get install python3-venv

Para criar o ambiente: ( o ‘./venve’ represente o diretório aonde vai ser criado o ambiente virtual )

$python3 -m venv ./venv

Para ativar a venv no terminal e começar a utilizar:

$source venv/bin/activate

Para desativar:

$deactivate

Documentação em: https://docs.python.org/3/library/venv.html

Docker – Como iniciar o container automaticamente com o sistema. (How do I make a Docker container start automatically on system boot?)

dockerUtilize ao criar o container o parametro ‘ - – restart = {valor} ‘ veja seus valores:

no Não reinicia o contêiner automaticamente. (o padrão)
on-failure Reinicie o contêiner se ele sair devido a um erro, que se manifesta como um código de saída diferente de zero.
unless-stopped Reinicie o contêiner, a menos que seja explicitamente interrompido ou o próprio Docker esteja parado ou reiniciado.
always Sempre reinicie o contêiner se ele parar.

Caso seu container já esteja criado realize o update da seguinte maneira:

docker update –restart=always 0576df221c0b

Fonte: https://docs.docker.com/config/containers/start-containers-automatically/#use-a-restart-policy
 

Java EE – Problemas com deploy de aplicações no Glassfish 5 (Web Service deployment into Glassfish error)

glassfish

Servlet [ParticipantPortTypePortImpl] and Servlet [CoordinatorPortTypePortImpl] have the same url pattern: [/WSAT10Service]. Related annotation information: annotation [@javax.jws.WebService(wsdlLocation=/wsdls/wsat10/wsat.wsdl, name=, portName=CoordinatorPortTypePort, endpointInterface=com.sun.xml.ws.tx.at.v10.types.CoordinatorPortType, serviceName=WSAT10Service, targetNamespace=http://schemas.xmlsoap.org/ws/2004/10/wsat)] on annotated element [class com.sun.xml.ws.tx.at.v10.endpoint.CoordinatorPortTypePortImpl] of type [TYPE]

Esse erro ocorre pois em suas dependências no projeto há algo em conflito com o Glassfish, normalmente bibliotecas do próprio glassfish, basta remove-las e utilizar somente bibliotecas referente ao WebService. Exemplo:

<dependencies>
<!--      
       Não utilizar essa dependência! 
        <dependency>
            <groupId>org.glassfish.metro</groupId>
            <artifactId>webservices-rt</artifactId>
            <version>2.3</version>
            <scope>compile</scope>
        </dependency>
-->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
   
</dependencies>