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>

Android – Como detectar se a aplicação está minimizada ou não (How to detect Android application in background or foreground events)

android-basic-lifecycleSe você estiver usando a biblioteca de componentes de arquitetura do Android, poderá usar o ProcessLifecycleOwner para configurar um ouvinte para todo o processo do aplicativo para eventos onStart e onStop. Para fazer isso, faça com que sua classe de aplicativo implemente a interface LifecycleObserver e inclua algumas anotações de onStop e onStart em seus métodos de primeiro e segundo plano:

  Continue reading