Conhecendo o MQTT

Por que o MQTT é um dos melhores protocolos de rede para a Internet das Coisas?

Para os dispositivos de Internet das Coisas (IoT), a conexão com a Internet é um requisito. A conexão com a Internet permite que os dispositivos trabalhem entre si e com serviços de backend. O protocolo de rede subjacente da Internet é o TCP/IP. Desenvolvido com base na pilha TCP/IP, o MQTT (Message Queue Telemetry Transport) tornou-se o padrão para comunicações de IoT.

O MQTT foi inventado e desenvolvido inicialmente pela IBM no final dos anos 90. Sua aplicação original era vincular sensores em pipelines de petróleo a satélites. Como seu nome sugere, ele é um protocolo de mensagem com suporte para a comunicação assíncrona entre as partes. Um protocolo de sistema de mensagens assíncrono desacopla o emissor e o receptor da mensagem tanto no espaço quanto no tempo e, portanto, é escalável em ambientes de rede que não são confiáveis. Apesar de seu nome, ele não tem nada a ver com filas de mensagens, na verdade, ele usa um modelo de publicação e assinatura. No final de 2014, ele se tornou oficialmente um padrão aberto OASIS, com suporte nas linguagens de programação populares, usando diversas implementações de software livre.

Por que o MQTT

O MQTT é um protocolo de rede leve e flexível que oferece o equilíbrio ideal para os desenvolvedores de IoT:

  • O protocolo leve permite a implementação em hardware de dispositivo altamente restringido e em redes de largura da banda limitada e de alta latência.
  • Sua flexibilidade possibilita o suporte a diversos cenários de aplicativo para dispositivos e serviços de IoT.

Para entender por que o MQTT é tão adequado para desenvolvedores de IoT, vamos analisar por que outros protocolos de rede populares falharam em IoT.

Por que não usar algum dos outros inúmeros protocolos de rede

A maioria dos desenvolvedores já se acostumou aos serviços da Web HTTP. Então, por que não conectar os dispositivos de IoT aos serviços da web? O dispositivo poderia enviar seus dados como uma solicitação de HTTP e receber atualizações do sistema como uma resposta de HTTP. Esse padrão de solicitação e resposta tem algumas limitações graves:

  • O HTTP é um protocolo síncrono. O cliente espera que o servidor responda. Os navegadores da web têm esse requisito, mas o custo é a baixa escalabilidade. No mundo da IoT, a comunicação síncrona tem sido um problema devido ao grande número de dispositivos e à rede, muitas vezes não confiável e de alta latência. Um protocolo de mensagem assíncrono é muito mais adequado para aplicativos de IoT. Os sensores podem enviar leituras e permitir que a rede descubra o caminho e a sincronização ideais para entregar aos dispositivos e serviços de destino.
  • HTTP é unidirecional. O cliente precisa iniciar a conexão. Em um aplicativo de IoT, os dispositivos e sensores geralmente são clientes, o que significa que eles não podem receber comandos da rede passivamente.
  • HTTP é um protocolo de um para um. O cliente faz uma solicitação e o servidor responde. É difícil e caro transmitir uma mensagem a todos os dispositivos na rede, o que é um caso de uso comum em aplicativos de IoT.
  • HTTP é um protocolo pesado com muitos cabeçalhos e regras. Ele não é adequado para redes restringidas.

Pelos motivos citados acima, a maioria dos sistemas escaláveis de alto desempenho usam um barramento do sistema de mensagens assíncrono, em vez de serviços da web, para trocas de dados internas. Na verdade, o protocolo de sistema de mensagens mais popular que é usado em sistemas de middleware corporativos é chamado AMQP (Advanced Message Queuing Protocol). No entanto, no ambiente de alto desempenho, a capacidade de computação e a latência da rede geralmente não são uma preocupação. O AMQP foi criado para assegurar a confiabilidade e a interoperabilidade em aplicativos corporativos. Ele possui um rico conjunto de recursos, mas não é adequado para aplicativos de IoT com restrição de recursos.

Além do AMQP, existem outros protocolos populares de sistema de mensagens. Por exemplo, o XMPP (Extensible Messaging and Presence Protocol) é um protocolo de mensagem instantânea (IM) ponto a ponto. Ele é pesado em recursos com suporte para casos de uso de IM, como presença e anexos de mídia. Em comparação com o MQTT, ele requer muito mais recursos no dispositivo e na rede.

Então, como o MQTT consegue ser tão leve e flexível? Um importante recurso do protocolo MQTT é o modelo de publicação e assinatura. Como em todos os protocolos de sistema de mensagens, ele desacopla o publicador e o consumidor de dados.

O modelo de publicação e assinatura

O protocolo MQTT define dois tipos de entidades na rede: um message broker e inúmeros clientes. O broker é um servidor que recebe todas as mensagens dos clientes e, em seguida, roteia essas mensagens para os clientes de destino relevantes. Um cliente é qualquer coisa que possa interagir com o broker e receber mensagens. Um cliente pode ser um sensor de IoT em campo ou um aplicativo em um data center que processa dados de IoT.

  1. O cliente conecta-se ao broker. Ele pode assinar qualquer “tópico” de mensagem no broker. Essa conexão pode ser uma conexão TCP/IP simples ou uma conexão TLS criptografada para mensagens sensíveis.
  2. O cliente publica as mensagens em um tópico, enviando a mensagem e o tópico ao broker.
  3. Em seguida, o broker encaminha a mensagem a todos os clientes que assinam esse tópico.

Como as mensagens do MQTT são organizadas por tópicos, o desenvolvedor de aplicativos tem a flexibilidade de especificar que determinados clientes somente podem interagir com determinadas mensagens. Por exemplo, os sensores publicarão suas leituras no tópico “sensor_data” e assinarão o tópico “config_change”. Os aplicativos de processamento de dados que salvam os dados do sensor em um banco de dados de backend assinarão o tópico “sensor_data”. Um aplicativo de console administrativo poderia receber comandos do administrador do sistema para ajustar as configurações dos sensores, como a sensibilidade e a frequência de amostragem, e publicar essas mudanças no tópico “config_change”. (Consulte Figura 1.)

Figura 1. O modelo de publicação e assinatura do MQTT para sensores de IoT

Ao mesmo tempo, o MQTT é leve. Ele tem um cabeçalho simples para especificar o tipo de mensagem, um tópico baseado em texto e, em seguida, uma carga útil binária arbitrária. O aplicativo pode usar qualquer formato de dados para a carga útil como JSON, XML, binário criptografado ou Base64, desde que os clientes de destino possam analisar a carga útil.

Introdução ao desenvolvimento com MQTT

A ferramenta mais fácil para começar o desenvolvimento com MQTT é o módulo Python mosquitto, que faz parte do projeto Eclipse Paho e fornece SDKs e bibliotecas do MQTT em várias linguagens de programação. Ele contém um broker do MQTT que pode ser executado no computador local e ferramentas de linha de comandos que podem interagir com o broker usando mensagens. É possível fazer download e instalar o módulo mosquitto no website do mosquitto.

O comando mosquitto executa o broker do MQTT no computador local. Opcionalmente, é possível usar a opção -d para executá-lo em segundo plano.

$ mosquitto -d

Em seguida, em outra janela do terminal, é possível usar o comando mosquitto_sub para conectar-se ao broker local e assinar um tópico. Após a execução do comando, ele vai esperar e imprimir todas as mensagens que receber da assinatura, à medida que elas forem chegando.

$ mosquitto_sub -t "dw/demo"

Em uma outra janela do terminal, é possível usar o comando mosquitto_pub para conectar-se ao broker local e, em seguida, publicar uma mensagem em um tópico.

$ mosquitto_pub -t "dw/demo" -m "hello world!"

Agora, o terminal que executa o mosquitto_sub deverá exibir “hello world!” na tela. Você acabou de enviar e receber uma mensagem usando um broker do MQTT!

É claro que em um sistema de produção, não é possível usar um computador local como o broker. Nesse caso, é possível usar o Serviço da plataforma Internet das Coisas do IBM Bluemix, que é um serviço sob demanda e confiável que funciona como um broker do MQTT. (Leia mais sobre como esse serviço do Bluemix se integra e usa o MQTT como seu protocolo para comunicar-se com dispositivos e aplicativos na documentação do serviço.)

O nó Serviço da plataforma Internet das Coisas do IBM Bluemix funciona da seguinte forma.

  • No console do Bluemix, é possível criar uma instância do serviço da plataforma Internet das Coisas sob demanda.
  • Em seguida, é possível incluir dispositivos que possam conectar a instância de serviço usando o MQTT. Cada dispositivo terá um ID e um nome. Somente os dispositivos listados podem acessar o serviço, e o painel da plataforma Watson IoT relatará informações sobre tráfego e uso desses serviços, nos respectivos dispositivos.
  • Para cada cliente do dispositivo, o Bluemix designará um nome do host, um nome de usuário e uma senha para a conexão com a instância de serviço (o broker do MQTT). (No Bluemix, o nome de usuário sempre é use-token-auth e a senha é o token que é mostrado na Figura 2 para cada dispositivo conectado.)
Figura 2. Criando uma instância de serviço da plataforma Internet das Coisas no IBM Bluemix

Ao usar um broker remoto do MQTT, será necessário passar pela aprovação das credenciais de autenticação e de nome do host do broker para os comandos mosquitto_sub e mosquitto_pub. Por exemplo, o comando a seguir assina o tópico de demonstração no nosso serviço da plataforma Internet das Coisas com o nome de usuário e senha fornecidos pelo Bluemix:

$ mosquitto_sub -t "demo" -h host.iotp.mqtt.bluemix.com -u username -P password

Para conhecer mais opções de como usar as ferramentas do mosquitto e também de como usar a API do mosquitto para criar seus próprios aplicativos clientes do MQTT, consulte a documentação no website do mosquitto.

Agora que você já tem as ferramentas necessárias, vamos nos aprofundar no protocolo MQTT.

Entendendo o protocolo MQTT

O MQTT é um protocolo de ligação que especifica como os bytes de dados são organizados e transmitidos pela rede TCP/IP. Mas por motivos práticos, os desenvolvedores não precisam entender o protocolo de ligação. Basta saber que cada mensagem tem uma carga útil de comando e dados. O comando define o tipo de mensagem (por exemplo, uma mensagem CONNECT ou uma mensagem SUBSCRIBE). Todas as bibliotecas e ferramentas do MQTT oferecem maneiras simples de manipular essas mensagens diretamente e podem preencher automaticamente alguns campos necessários, como os IDs da mensagem e do cliente.

Primeiro, o cliente conecta-se ao broker enviando uma mensagem CONNECT. A mensagem CONNECT pede para estabelecer uma conexão do cliente com o broker. A mensagem CONNECT tem os parâmetros de conteúdo a seguir.

Tablela 1. Parâmetros da mensagem CONNECT
Parâmetro Descrição
cleanSession Esta sinalização especifica se a conexão é persistente ou não. Uma sessão persistente armazena todas as assinaturas e as mensagens possivelmente perdidas (dependendo do QoS) no broker. (Consulte Tablela 3 para obter uma descrição do QoS).
username As credenciais de autenticação e autorização do broker.
password As credenciais de autenticação e autorização do broker.
lastWillTopic Quando a conexão for encerrada inesperadamente, o broker publicará automaticamente uma mensagem de “último desejo” em um tópico.
lastWillQos O QoS da mensagem de “último desejo”. (Consulte Tablela 3 para obter uma descrição do QoS).
lastWillMessage A própria mensagem de “último desejo”.
keepAlive Este é o intervalo de tempo em que o cliente precisa efetuar ping no broker para manter a conexão ativa.

O cliente receberá uma mensagem CONNACK do broker. A mensagem CONNACK tem os parâmetros de conteúdo a seguir.

Tablela 2. Parâmetros da mensagem CONNACK
Parâmetro Descrição
sessionPresent Indica se a conexão já tem uma sessão persistente. Ou seja, a conexão já tem tópicos assinados e receberá a entrega de mensagens ausentes.
returnCode 0 indica sucesso. Outros valores identificam a causa da falha.

Depois que uma conexão for estabelecida, o cliente poderá enviar uma ou mais mensagens SUBSCRIBE ao broker para indicar que ele receberá mensagens do broker de determinados tópicos. A mensagem pode ter uma ou várias repetições dos parâmetros a seguir.

Tablela 3. Parâmetros da mensagem SUBSCRIBE
Parâmetro Descrição
qos A sinalização qos (qualidade de serviço ou QoS) indica com que consistência as mensagens neste tópico precisam ser entregues aos clientes.

  • Valor 0: não confiável, a mensagem é entregue no máximo uma única vez, se o cliente estiver indisponível no momento, ele perderá a mensagem.
  • Valor 1: a mensagem deve ser entregue pelo menos uma vez.
  • Valor 2: a mensagem deve ser entregue exatamente uma vez.
tópico Um tópico para assinar. Um tópico pode ter vários níveis separados pelo caractere barra. Por exemplo, “dw/demo” e “ibm/bluemix/mqtt” são tópicos válidos.

Depois que o cliente tiver assinado um tópico com sucesso, o broker retornará uma mensagem SUBACK com um ou mais parâmetros returnCode.

Tablela 4. Parâmetros da mensagem SUBACK
Parâmetro Descrição
returnCode Existe um código de retorno para cada um dos tópicos no comando SUBSCRIBE. Os valores de retorno são os seguintes.

  • Valores 0 a 2: sucesso como nível de QoS correspondente. (Consulte Tablela 3 para saber mais sobre QoS.)
  • Valor 128: falha.

Correspondendo à mensagem SUBSCRIBE, o cliente também poderá UNSUBSCRIBE (cancelar a assinatura) de um tópico ou de vários tópicos.

Tablela 5. Parâmetros da mensagem UNSUBSCRIBE
Parâmetro Descrição
tópico Este parâmetro pode se repetir para vários tópicos.

O cliente pode enviar mensagens PUBLISH ao broker. A mensagem contém um tópico e uma carga útil de dados. Em seguida, o broker encaminha a mensagem a todos os clientes que assinam esse tópico.

Tablela 6. Parâmetros da mensagem PUBLISH
Parâmetro Descrição
topicName O tópico no qual a mensagem é publicada.
qos O nível de qualidade de serviço da entrega da mensagem. (Consulte Tablela 3 para obter uma descrição do QoS).
retainFlag Esta sinalização indica se o broker reterá a mensagem como a última mensagem conhecida deste tópica.
carga útil Os dados reais na mensagem. Pode ser uma sequência de texto ou um blob binário de dados.

Dicas e soluções alternativas

O poder do MQTT é a simplicidade. Não há restrições quanto ao tipo de tópico ou de carga útil de mensagem que se pode usar. Isso permite alguns casos de uso interessantes. Por exemplo, considere estas questões:

Como executar mensagens de um para um com o MQTT? Ambas as partes podem concordar em usar um tópico que seja exclusivo para elas. Por exemplo, o nome do tópico pode conter os IDs dos dois clientes para garantir sua exclusividade.

Como um cliente transmite seu status de presença? O sistema pode concordar com uma convenção de nomenclatura para tópicos de “presença”. Por exemplo, o tópico “presence/client-id” pode conter as informações de presença do cliente. O cliente define a mensagem como true quando se conecta e false quando se desconecta. O cliente também pode configurar uma mensagem de last will como false para ser definida quando a conexão for encerrada. A mensagem pode ser retida pelo broker para que novos clientes possam ler o tópico e descobrir o status de presença.

Como proteger as comunicações? A conexão do cliente com o broker pode ser uma conexão TLS criptografada para proteger os dados em trânsito. Além disso, como o protocolo MQTT não impõe restrições quanto ao formato de dados da carga útil, o sistema pode concordar com um método de criptografia e um mecanismo de atualização de chave. Depois disso, todo o conteúdo na carga útil pode ser dados binários criptografados das mensagens JSON ou XML reais.

Conclusão

Neste artigo eu ofereci uma introdução técnica ao protocolo MQTT. Você aprendeu o que é o MQTT, por que ele é adequado para aplicativos de IoT e como começar a desenvolver aplicativos que usam o MQTT.

Em um de meus próximos artigos, vou mostrar como desenvolver uma solução de sensor de IoT completa com serviços de MQTT de backend e usando uma placa NodeMCU.

Recursos

Recursos para download

Temas relacionados

Fonte:  https://www.ibm.com/developerworks/br/library/iot-mqtt-why-good-for-iot/index.html

Anúncios

Mosquitto Eclipse – Um Broker MQTT de Software Livre

O Eclipse Mosquitto é um intermediário de mensagens de código-fonte aberto (licenciado por EPL / EDL) que implementa as versões 3.1 e 3.1.1 do protocolo MQTT. O Mosquitto é leve e adequado para uso em todos os dispositivos, desde computadores de mesa única de baixa potência até servidores completos.

O protocolo MQTT fornece um método leve de executar mensagens usando um modelo de publicação / assinatura. Isso o torna adequado para mensagens da Internet das Coisas, como sensores de baixa potência ou dispositivos móveis, como telefones, computadores embutidos ou microcontroladores.

O projeto Mosquitto também fornece uma biblioteca C para implementar clientes MQTT, e os populares clientes MQTT da linha de comando mosquitto_pub e mosquitto_sub.

O Mosquitto faz parte da Eclipse Foundation e é um projeto do iot.eclipse.org

Baixar

O Mosquitto é altamente portátil e está disponível para uma ampla gama de plataformas. Vá para a página de download dedicada para encontrar a origem ou os binários para sua plataforma.

Leia o log de alterações para saber mais sobre os lançamentos recentes.

Teste

Você pode ter sua própria instância do Mosquitto em execução em minutos, mas para tornar o teste ainda mais fácil, o Projeto Mosquitto executa um servidor de teste em test.mosquitto.org onde você pode testar seus clientes de várias maneiras: MQTT simples, MQTT sobre TLS , MQTT sobre TLS (com certificado de cliente , MQTT sobre WebSockets e MQTT sobre WebSockets com TLS.

plataformas.

Comunidade

Segurança

Use a página de segurança para descobrir como denunciar vulnerabilidades ou respostas a problemas de segurança anteriores.

Fonte

Downloads mais antigos estão disponíveis em http://mosquitto.org/files/

Instalação Binária

janelas

Veja o arquivo readme-windows.txt depois de instalar os detalhes e dependências específicos do Windows.

Mac

Mosquitto pode ser instalado a partir do projeto homebrew. Veja brew.sh e depois usebrew install mosquitto

Arch Linux

  • Mosquitto pode ser encontrado no repositório da comunidade.

CentOS

Baixe o arquivo de configuração do repositório para sua versão do CentOS a partir de baixo e copie-o para /etc/yum.repos.d/ Agora você poderá instalar e manter o mosquito atualizado usando as ferramentas normais de gerenciamento de pacotes.

Os pacotes disponíveis são: mosquito, mosquito-cliente, libmosquitto1, libmosquitto-devel, libmosquittopp1, libmosquittopp-devel, python-mosquitto. CentOS 7CentOS 6

Debian

  • O Mosquitto agora está no Debian. Haverá um pequeno atraso entre uma nova versão e ela aparecerá no Debian como parte dos procedimentos normais da Debian.
  • Existem também repositórios Debian fornecidos pelo projeto do mosquito, como descrito em http://mosquitto.org/2013/01/mosquitto-debian-repository>

Fedora

O Mosquitto está agora disponível diretamente no Fedora. Use yum install mosquittoou pesquise “mosquito” para encontrar os pacotes relacionados.

FreeBSD

Mosquitto está disponível para o FreeBSD: http://www.freshports.org/net/mosquitto/

Gentoo

Usar emerge mosquitto

openSUSE

Faça o download do arquivo de configuração do repositório para a sua versão do openSUSE abaixo e copie-o para /etc/zypp/repos.d/ Agora você poderá instalar e manter o mosquito atualizado usando as ferramentas normais de gerenciamento de pacotes.

As embalagens disponíveis são: mosquitto, mosquito-cliente, libmosquitto1, libmosquitto-devel, libmosquittopp1, libmosquittopp-devel, python-mosquitto.

OpenWrt

Se você estiver usando um instantâneo de tronco, use opkg update; opkg install mosquitto

Karl Palsson mantém um conjunto de feeds que podem ser mais atualizados do que a versão atual do OpenWrt:

Raspberry Pi

Mosquitto está disponível através do repositório principal.

Existem também repositórios Debian fornecidos pelo projeto do mosquito, como descrito em http://mosquitto.org/2013/01/mosquitto-debian-repository/

Redhat Enterprise Linux

Faça o download do arquivo de configuração do repositório para sua versão do RHEL a partir de baixo e copie-o para /etc/yum.repos.d/ Agora você poderá instalar e manter o mosquitto atualizado usando as ferramentas normais de gerenciamento de pacotes.

Os pacotes disponíveis são: mosquito, mosquito-cliente, libmosquitto1, libmosquitto-devel, libmosquittopp1, libmosquittopp-devel, python-mosquitto. RHEL 7RHEL 6

SUSE Linux Enterprise Server

Adicione o repositório apropriado à sua configuração de pacote na lista abaixo e instale o mosquitto a partir de suas ferramentas normais de gerenciamento de pacotes.

Ubuntu

O Mosquitto está disponível nos repositórios do Ubuntu para que você possa instalar como em qualquer outro pacote. Se você estiver em uma versão anterior do Ubuntu ou quiser uma versão mais recente do mosquitto, adicione o PPA mosquitto-dev à sua lista de repositórios – veja o link para detalhes. O mosquito pode então ser instalado a partir do gerenciador de pacotes.

  • sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
  • sudo apt-get update

Se o comando apt-add-repositorynão for reconhecido, ele poderá ser instalado com:

  • sudo apt-get install python-software-properties

Iphone

Você pode usar o libmosquitto (incluído no download da fonte) no iPhone para criar aplicativos MQTT. Ele compila como objective-c, ou você pode usar o projeto marquette que é um wrapper object-c e aplicativo de exemplo.

Fonte: https://mosquitto.org/download/

 .

Mosquitto e paho-mqtt-python

Mosquitto e paho-mqtt-python

Melhore a segurança do mosquito no Ubuntu 16.04 LTS

Instalar mosquito
> sudo apt-adicionar-repositório ppa: mosquitto-dev / mosquitto-ppa
> sudo apt-get atualizar
> sudo apt-get instalar mosquitto mosquitto-clients

Instalar o paho-mqtt-python
> pip install paho-mqtt

Configurar mosquito
> sudo vi /etc/mosquitto/mosquitto.conf
> wget https://github.com/eclipse/mosquitto/blob/master/mosquitto.conf

persistência true 
persistence_location / var / lib / mosquitto / 
allow_anonymous falso 
arquivo log_dest /var/log/mosquitto/mosquitto.log 
include_dir /etc/mosquitto/conf.d

Adicione a confoguração do mosquito
> sudo vi /etc/mosquitto/conf.d/default.conf

password_file / etc / mosquitto / passwd
ouvinte 1883 localhost
listener 8883 
certfile /etc/letsencrypt/live/[hostname]/fullchain.pem 
cafile /etc/letsencrypt/live/[hostname]/chain.pem 
keyfile /etc/letsencrypt/live/[hostname]/privkey.pem

Adicionar nome de usuário e senha do
mosquitto> mosquitto_passwd -c / etc / mosquitto / passwd [nome de usuário]
Senha: [senha]
Redigite a senha: [senha]

Teste com o assinante do mosquitto
> mosquitto_sub -h [hostname] -p 8883 –capath /etc/ssl/certs-t [topic] -q [qos] -c -i [clientid] -u [username] -P [senha]

Teste com o editor de mosquitos
> mosquitto_pub -h [hostname] -p 8883 –capath /etc/ssl/certs-t [topic] -m [message] -q [qos] -i [clientid] -u [username] -P [senha]

assinante paho-mqtt

 

import ssl
import sys

import paho.mqtt.client

def on_connect(client, userdata, flags, rc):
	print('connected (%s)' % client._client_id)
	client.subscribe(topic='[topic]', qos=2)

def on_message(client, userdata, message):
	print('------------------------------')
	print('topic: %s' % message.topic)
	print('payload: %s' % message.payload)
	print('qos: %d' % message.qos)

def main():
	client = paho.mqtt.client.Client(client_id='[clientid]', clean_session=False)
	client.username_pw_set('[username]', '[password]')
	client.on_connect = on_connect
	client.on_message = on_message
	client.tls_set('/etc/ssl/certs/DST_Root_CA_X3.pem', tls_version=ssl.PROTOCOL_TLSv1_2)
	client.connect(host='[hostname]', port=8883)
	client.loop_forever()

if __name__ == '__main__':
	main()
	sys.exit(0)

 

Configurar mosquito

>sudo vi /etc/mosquitto/mosquitto.conf
> wget https://github.com/eclipse/mosquitto/blob/master/mosquitto.conf

persistence true
persistence_location /var/lib/mosquitto/
allow_anonymous false
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d

Adicione a configuração do mosquito

password_file /etc/mosquitto/passwd
listener 1883 localhost
listener 8883
certfile /etc/letsencrypt/live/[hostname]/fullchain.pem
cafile /etc/letsencrypt/live/[hostname]/chain.pem
keyfile /etc/letsencrypt/live/[hostname]/privkey.pem
include_dir /etc/mosquitto/conf.d

Adicionar nome de usuário e senha do

> mosquitto_passwd -c /etc/mosquitto/passwd [username]
Password: [password]
Reenter password: [password]

 

Teste com o assinante do mosquitto

> mosquitto_sub -h [hostname] -p 8883 –capath /etc/ssl/certs -t [topic] -q [qos] -c -i [clientid] -u [username] -P [password]

 

Teste com o editor de mosquitos

> mosquitto_pub -h [hostname] -p 8883 –capath /etc/ssl/certs -t [topic] -m [message] -q [qos] -i [clientid] -u [username] -P [password]

Assinante paho-mqtt

import ssl
import sys

import paho.mqtt.client

def on_connect(client, userdata, flags, rc):
	print('connected (%s)' % client._client_id)
	client.subscribe(topic='[topic]', qos=2)

def on_message(client, userdata, message):
	print('------------------------------')
	print('topic: %s' % message.topic)
	print('payload: %s' % message.payload)
	print('qos: %d' % message.qos)

def main():
	client = paho.mqtt.client.Client(client_id='[clientid]', clean_session=False)
	client.username_pw_set('[username]', '[password]')
	client.on_connect = on_connect
	client.on_message = on_message
	client.tls_set('/etc/ssl/certs/DST_Root_CA_X3.pem', tls_version=ssl.PROTOCOL_TLSv1_2)
	client.connect(host='[hostname]', port=8883)
	client.loop_forever()

if __name__ == '__main__':
	main()
	sys.exit(0)

Editor paho-mqtt

import ssl
import sys

import paho.mqtt.client
import paho.mqtt.publish

def on_connect(client, userdata, flags, rc):
	print('connected')

def main():
	paho.mqtt.publish.single(
		topic='[topic]',
		payload='[message]',
		qos=2,
		hostname='[hostname]',
		port=8883,
		client_id='[clientid]',
		auth={
			'username': '[username]',
			'password': '[password]'
		},
		tls={
			'ca_certs': '/etc/ssl/certs/DST_Root_CA_X3.pem',
			'tls_version': ssl.PROTOCOL_TLSv1_2
		}
	)

if __name__ == '__main__':
	main()
	sys.exit(0)

 

erinus diz:

Se o seu assinante quiser receber todas as mensagens não lidas em um tópico após o início, você deverá concluir estas etapas:

Use o mesmo ID de cliente quando você inicia o assinante.
Use clean_session = False quando você inicia o assinante.
Use qos> 0 quando você assina um tópico.
Use qos> 0 quando você publicar uma mensagem.

Para tornar suas comunicações mais seguras, você deve concluir estas etapas:

Usar TLS 1.2
Set allow_anonymous = False
Habilitar autenticação com nome de usuário e senha

Se você quer mais métodos de autenticação, tente este plugin mosquitto:

https://github.com/jpmens/mosquitto-auth-plug

 

Fonte:  https://medium.com/@erinus/mosquitto-paho-mqtt-python-29cadb6f8f5c

 

 

 

 

Princípios Básicos da API SOAP do PayPal

A API do PayPal SOAP é baseada em padrões abertos conhecidos coletivamente como serviços da Web, que incluem o SOAP (Simple Object Access Protocol), o WSDL (Web Services Definition Language) e o XSD (XML Schema Definition language). Uma ampla variedade de ferramentas de desenvolvimento em diversas plataformas oferece suporte a serviços da Web.

Como muitos serviços da Web, o PayPal SOAP é uma combinação de esquemas do lado do cliente e do lado do servidor, servidores de hardware e software e serviços principais.

Diagrama de alto nível do PayPal SOAP

Em um modelo de processamento orientado a objetos, a interface para solicitações / respostas SOAP é um objeto na linguagem de programação nativa do seu aplicativo. Seu cliente SOAP de terceiros gera interfaces de objeto de negócios e stubs de rede dos arquivos WSDL e XSD fornecidos pelo PayPal que especificam a estrutura de mensagens do PayPal SOAP, seu conteúdo e as ligações de serviço da API do PayPal. Um aplicativo de negócios trabalha com dados na forma de propriedades do objeto para enviar e receber dados chamando métodos de objeto. O cliente SOAP manipula os detalhes da criação da solicitação SOAP, enviando-a ao serviço do PayPal e convertendo a resposta de volta para um objeto.

Definições de esquema do PayPal WSDL / XSD

O esquema de Serviços da Web do PayPal e seus componentes básicos e base do eBay Business Language (eBL) são necessários para o desenvolvimento de aplicativos com a API de serviços da Web do PayPal. A seguir estão os locais dos arquivos WSDL e XSD.

Localização dos arquivos PayPal WSDL e XSD
Desenvolvimento e teste com a sandbox do PayPal
Esquema do PayPal https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl
Componentes básicos e componentes do eBL https://www.sandbox.paypal.com/wsdl/eBLBaseComponents.xsd 
https://www.sandbox.paypal.com/wsdl/CoreComponentTypes.xsd
Produção com a API do PayPal ao vivo
Esquema do PayPal https://www.paypal.com/wsdl/PayPalSvc.wsdl
Componentes básicos e componentes do eBL https://www.paypal.com/wsdl/eBLBaseComponents.xsd 
https://www.paypal.com/wsdl/CoreComponentTypes.xsd

Definições da API do SOAP do PayPal

A API do PayPal para SOAP inclui definições de API individuais para funções comerciais específicas. Como base, a API depende dos componentes básicos e básicos da eBay Business Language (eBL). As principais estruturas do eBL AbstractRequestTypeAbstractResponseTypesão a base da solicitação e resposta do SOAP de cada API do PayPal. AbstractResponseTypetambém é a estrutura para mensagens de erro comuns em todas as APIs do PayPal.

O PayPal tomou algumas decisões de design de esquema que podem afetar como os negócios projetam seus próprios aplicativos.

  • Enumerações – Enumerações são definidas diretamente no esquema da API do PayPal.
  • Informações de solução de problemas – A API do PayPal retorna informações sobre elementos que acionam erros.
  • Compatibilidade retroativa – A API do PayPal é versionada para que os aplicativos de negócios sejam compatíveis com versões anteriores quando novos elementos são introduzidos no esquema do lado do servidor.

Nota: O eBL define muitas estruturas específicas para leilões de processamento. O esquema SOAP do PayPal inclui essas definições para manter a compatibilidade com o SOAP do eBay. O material se concentra apenas nas definições de SOAP pertinentes ao uso da API do PayPal SOAP.

Segurança

O serviço da API SOAP do PayPal é protegido para garantir que apenas membros autorizados do PayPal o usem. Existem quatro níveis de segurança:

  1. Uma API Usernamee uma API obrigatórias Password.
  2. Um terceiro mecanismo de autenticação obrigatório, que é um dos seguintes:
    • Assinatura de solicitação do lado do cliente usando um certificado de API emitido pelo PayPal
    • Solicitar autenticação usando uma assinatura de API incluída na solicitação
  3. Se você estiver chamando a API em nome de um comerciante de terceiros, deverá especificar o endereço de e-mail registrado no PayPal do comerciante de terceiros ou o ID da conta do comerciante (às vezes chamado de ID do pagador) no Subjectcampo.

    Nota: Terceiros podem obter seu ID de comerciante entrando no paypal.com , clicando no ícone do perfil ( Menu Perfil) no canto superior direito da página e selecionando Perfil e configurações no menu Perfil de negócios . (Se o ícone do perfil na parte superior da página não estiver visível, clique em Perfil , que aparece no menu superior quando a guia Minha conta estiver selecionada.) Clique em Informações da minha empresa à esquerda e o ID da conta do comerciante é exibido no lista de itens de perfil à direita.

    Normalmente, um comerciante concede permissões de terceiros a um carrinho de compras, portanto, o carrinho de compras pode chamar a API em nome do comerciante. O comerciante deve ter concedido anteriormente permissão para executar a operação da API.

  4. Transporte de dados TLS (Transport Layer Security). Consulte as diretrizes de segurança das informações do desenvolvedor do PayPal para obter mais informações sobre o TLS.

Uma falha na segurança autenticada em qualquer um desses níveis nega acesso ao serviço da API do PayPal SOAP.

RequesterCredentials SOAP: nome de usuário, senha, assinatura e assunto

Para a segurança de seus negócios, o PayPal deve verificar se os comerciantes ou desenvolvedores de terceiros têm permissão para iniciar uma transação antes de fazer uma. O PayPal autentica cada solicitação. Se a solicitação não puder ser autenticada, uma falha de segurança SOAP será retornada.

No cabeçalho da solicitação SOAP, seu cliente SOAP deve definir os elementos UsernamePasswordpara passar uma combinação de nome de usuário / senha da API. Além disso, você pode definir o Signaturepara especificar sua string de assinatura de API. Se você estiver chamando a API em nome de um comerciante de terceiros, deverá definir o Subjectelemento para especificar o endereço de e-mail de terceiros ou o ID da conta do comerciante (às vezes chamado de ID do pagador).

Nota: Terceiros podem obter seu ID de comerciante entrando no paypal.com , clicando no ícone do perfil ( Menu Perfil) no canto superior direito da página e selecionando Perfil e configurações no menu Perfil de negócios . (Se o ícone do perfil na parte superior da página não estiver visível, clique em Perfil , que aparece no menu superior quando a guia Minha conta estiver selecionada.) Clique em Informações da minha empresa à esquerda e o ID da conta do comerciante é exibido no lista de itens de perfil à direita.

Normalmente, um comerciante concede permissões de terceiros a um carrinho de compras, portanto, o carrinho de compras pode chamar a API em nome do comerciante. O comerciante deve ter concedido anteriormente permissão para executar a operação da API.

O exemplo a seguir mostra parte dos RequesterCredentialselementos.

A maioria desses elementos é necessária para todas as solicitações SOAP.

<SOAP-ENV:Header>
  <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
  <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">
    <Username>API-Username</Username>
    <Password>API-Password</Password>
    <Signature>API-Signature</Signature>
    <Subject>Authorizing-Merchant-Email -or- Authorizing-Merchant-Account-ID</Subject>
  </Credentials>
  </RequesterCredentials>
</SOAP-ENV:Header>
Elementos de autenticação RequesterCredentials no cabeçalho SOAP
Elemento Valor Descrição
Username API-Username Seu nome de usuário da API, que é gerado automaticamente pelo PayPal quando vocêsolicita credenciais de API de certificado ou assinatura para usar a API do PayPal SOAP. Você pode ver esse valor em https://www.paypal.com/ em seu perfil em Acesso à API> Credenciais da API.
Password API-Password Sua senha da API, que você especifica quandosolicita credenciais de API de certificado ou assinatura para usar a API do PayPal SOAP.
Signature API-Signature Sua assinatura de API , se você usar uma em vez de um certificado de API.
Subject Authorizing-Merchant-Email

ou

Authorizing-Merchant-Account-ID

O endereço de e-mail ou ID da conta do comerciante (às vezes chamado de ID do pagador) de um terceiro para quem você está enviando solicitações para a API do PayPal para SOAP. Seu nome de usuário da API deve terrecebido permissão desse terceiro para fazer uma solicitação da API do PayPal em seu nome.

Pontos de extremidade do serviço SOAP

O terminal em serviço que processa suas solicitações SOAP depende do tipo de credenciais da API.

Pontos de extremidade do serviço SOAP
Tipo de credenciais da API Ponto de extremidade de produção ao vivo Ponto de extremidade de teste (sandbox)
Certificado de API https://api.paypal.com/2.0/ https://api.sandbox.paypal.com/2.0/
Assinatura API https://api-3t.paypal.com/2.0/ https://api-3t.sandbox.paypal.com/2.0/

Envelope de pedido SOAP

O diagrama a seguir ilustra o conteúdo de um envelope de solicitação do PayPal SOAP.

Todas as APIs do PayPal são baseadas em duas estruturas principais: AbstractRequestTypeAbstractResponseType.

Diagrama do envelope de solicitação SOAP

Solicitar estrutura

A descrição anotada a seguir da estrutura de solicitação SOAP mostra os elementos requeridos pela API do PayPal SOAP.

Estrutura geral da solicitação SOAP da API do PayPal

1.  <?xml version="1.0" encoding="UTF-8"?>
2.  <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
3.    <SOAP-ENV:Header>
4.      <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI">
5.        <Credentials xmlns="urn:ebay:apis:eBLBaseComponents">
6.          <Username>API-Username</Username>
7.          <Password>API-Password</Password>
8.          <Signature/>
9.          <Subject/>
10.       </Credentials>
11.     </RequesterCredentials>
12.   </SOAP-ENV:Header>
13.   <SOAP-ENV:Body>
14.     <Specific-API-Name-Req xmlns="urn:ebay:api:PayPalAPI">
15.       <Specific-API-Name-Request>
16.         <Version xmlns="urn:ebay:apis:eBLBaseComponents">API-Version</Version>
17.         <Required-Or-Optional-Fields xs:type="Type">Data</Required-Or-Optional-Fields>
18.       </Specific-API-Name-Request>
19.     </Specific-API-Name-Req>
20.   </SOAP-ENV:Body>
21. </SOAP-ENV:Envelope>
Anotação de solicitação SOAP genérica
Linhas Comente
6, 7 Os campos UsernamePasswordsão parte do RequesterCredentialsmecanismo de autenticação de segurança da API SOAP do PayPal que você deve construir para cada cabeçalho de solicitação SOAP. Veja RequesterCredentials para mais informações.
8 Signatureelemento deve incluir sua assinatura de API se esse for o tipo de credencial de API que você está usando.
9 Subjectelemento deve ser incluído ao usar permissões de terceiros (realizando transações em nome de outro comerciante que tenha autorizado você a fazer isso). Passe o ID da conta do comerciante de terceiros autorizador (às vezes chamado de ID do pagador) ou endereço de e-mail.
13 a 20 A solicitação SOAP para cada API do PayPal segue esse padrão de nomenclatura de elemento. O nome específico da API é anexado com Reqe, nesse elemento, o nomeSpecific-API-Name-Reqé aninhado. Cada Specific-API-Name-Requestum tem um correspondente Specific-API-Name-RequestType.
16 O número da versão da API do PayPal SOAP é necessário em cada solicitação SOAP. Este número de versão é o valor de ns:versionem https://www.paypal.com/wsdl/PayPalSvc.wsdl .
17 Para detalhes sobre elementos obrigatórios e opcionais e valores para solicitações específicas, consulte as referências da API .

Estilo da Mensagem SOAP: doc-literal

PayPal usa doc-literalmensagens SOAP, não rpc-encoding. Com doc-literal, uma única chamada de interface de serviço passa um documento XML na solicitação para o servidor da API do PayPal, que responde com uma instância do documento XML.

Estrutura de Resposta

A seguir, uma descrição anotada da estrutura de uma resposta SOAP bem-sucedida da API do PayPal, em que Ack=Success:

1.  <?xml version="1.0"?>
2.  <SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:cc="urn:ebay:apis:CoreComponentTypes"
    xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
    xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
    xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"
    xmlns:ebl="urn:ebay:apis:eBLBaseComponents"
    xmlns:ns="urn:ebay:api:PayPalAPI">
3.    <SOAP-ENV:Header>
4.      <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext"xsi:type="wsse:SecurityType"/>
5.      <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
6.        <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType"/>
7.      </RequesterCredentials>
8.    </SOAP-ENV:Header>
9.    <SOAP-ENV:Body id="_0">
10.     <Specific-API-Operation-Name>-Response xmlns="urn:ebay:api:PayPalAPI">
11.       <Timestamp xmlns="urn:ebay:api:PayPalAPI">DateTime-In-UTC/GMT-Format</TIMESTAMP>
12.       <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Success</Ack>
13.       <Version xmlns="urn:ebay:apis:eBLBaseComponents">API-Version</Version>
14.       <CorrelationId xmlns="urn:ebay:apis:eBLBaseComponents">Correlation-ID</CorrelationID>
15.       <Build xmlns="urn:ebay:apis:eBLBaseComponents">API-Build-Number</Build>
16.       <Elements-For-Specific-API-Response></Elements-For-Specific-API-Response>
17.     </Specific-API-Operation-Name-Response>
18.   </SOAP-ENV:Body>
19. </SOAP-ENV:Envelope>
Anotação de Resposta SOAP Genérica
Linhas Comente
10 a 17 Os elementos de início e fim. Um exemplo de uma operação da API é . Consulte a referência da API NVP / SOAP para obter uma lista completa.Specific-API-Operation-Name-ResponseSetExpressCheckout
11 Cada resposta da API contém uma Timestampdata e hora no formato UTC / GMT.
12 Ackelemento acknowledgement ( ) contém a string Successindicando que a solicitação correspondente foi processada com sucesso. Quando há um erro, ele Acké definido como um valor diferente de Successe o corpo da resposta contém um Errorselemento com informações para ajudá-lo a solucionar a causa do erro. Veja Respostas de erros para mais informações.
14 CorrelationIDelemento contém informações sobre o aplicativo do PayPal que processou a solicitação. Use o valor desse elemento se você precisar solucionar um problema com uma das suas solicitações.
16 As diferentes APIs do PayPal retornam elementos diferentes, dependendo de suas definições de resposta. Para informações detalhadas, consulte as descrições na referência da API .

Nota: Como um campo é definido na estrutura formal de uma resposta da API, isso não significa que o campo seja necessariamente retornado. Os dados são retornados em uma resposta somente se o PayPal registrou dados que correspondem ao campo.

Respostas de erro

Se o Ackvalor não for Success, o pagamento ou ação desejada pode não passar.

Os valores possíveis do Ackcampo de resposta são os seguintes:

  • Success – O pedido foi bem sucedido.
  • SuccessWithWarning – A solicitação foi bem-sucedida, mas um código de erro de aviso também foi retornado.
  • Failure– A solicitação da API falhou. Veja mensagens de erro para detalhes.
  • FailureWithWarning – A solicitação da API falhou e mensagens de aviso adicionais foram retornadas.

Se uma solicitação estiver mal formada ou contiver algum outro erro, o corpo da resposta SOAP conterá um Errorselemento com outros elementos que podem ajudá-lo a solucionar a causa do erro.

A estrutura das mensagens de erro é a seguinte:

O mais importante desses elementos adicionais é o seguinte:

  • ShortMessage
  • LongMessage
  • ErrorCode

Informações adicionais podem aparecer como parte de ErrorParametersType. Por exemplo, se a resposta retornada dentro do ParamIDelemento for ProcessorResponse, o Valueelemento conterá um erro específico do processador de placa de terceiros, como 0091. Os valores definidos no ErrorParametersTypenão são definidos pelo PayPal; em vez disso, eles são passados ​​da fonte.

Nota: o PayPal apenas transmite os valores selecionados em ErrorParametersType.

O exemplo a seguir mostra a resposta de erro se o nome de usuário e a senha da API não corresponderem a um nome de usuário e senha legítimos da API registrados no PayPal.

Exemplo da resposta de erro SOAP: Nome de usuário ou senha inválidos

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV: Envelope [DETAILS NOT SHOWN]>
  <SOAP-ENV:Header>[DETAILS NOT SHOWN]</SOAP-ENV:Header>
  <SOAP-ENV:Body id="_0">
    <GetTransactionDetailsResponse xmlns="urn:ebay:api:PayPalAPI">
    <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2005-02-09T21:51:26Z</Timestamp>
    <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Failure</Ack>
    <Errors xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:ErrorType">
      <ShortMessage xsi:type="xs:string">Authentication/Authorization Failed</ShortMessage>
      <LongMessage xsi:type="xs:string">Username/Password is incorrect</LongMessage>
      <ErrorCode xsi:type="xs:token">10002</ErrorCode>
      <SeverityCode xmlns="urn:ebay:apis:eBLBaseComponents">Error</SeverityCode>
    </Errors>
    <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">Debugging-Info</CorrelationID>
    <Version xmlns="urn:ebay:apis:eBLBaseComponents">124.00</Version>
    <Build xmlns="urn:ebay:apis:eBLBaseComponents">1.0006</Build>
    <...other elements="" in="" response...="">
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

CorrelationID para relatar problemas ao PayPal

O valor retornado CorrelationIDé importante para o PayPal determinar a causa precisa de qualquer erro que você possa encontrar. Se você tiver que solucionar um problema com suas solicitações, sugerimos que você capture o valor CorrelationIDpara que você possa denunciá-lo ao PayPal.

Codificação de caracteres UTF-8

A API do PayPal supõe que todos os dados nas solicitações estejam em Unicode, especificamente, o formato de codificação de 8 bits (UTF-8) Unicode (ou UCS) Transformation Format.

Nas respostas, a API sempre retorna dados em UTF-8.

Formatos de data / hora

O esquema da API do PayPal para o SOAP define valores de data / hora como Hora Universal Coordenada (UTC / GMT), usando o formato ISO 8601 e do tipo ns:dateTime.

Um exemplo de data / hora é 2006-08-24T05: 38: 48Z

Tipo de dados do valor da moeda central

O tipo de dados da quantia monetária principal é chamado BasicAmountTypee é derivado de string. Todos os campos de valor monetário têm a seguinte estrutura:

  1. currencyIDatributo é obrigatório.
  2. O valor deve ter duas casas decimais, exceto no caso de moedas que não suportam valores decimais .
  3. O separador decimal deve ser um período (“.”).
  4. Você não deve usar nenhum separador de milhares.
  5. BasicAmountTypetem um tipo de dados ebl:CurrencyCodeType, que define um grande número de diferentes códigos de moeda. No entanto, para que seu processamento seja bem-sucedido, você deve definir currencyCode como um código de moeda válido .

Exemplo

O nome do campo Amount, é um exemplo; os nomes dos campos reais podem variar dependendo da operação específica da API .

<Amount currencyCode="USD">3.00</Amount>


FONTE: https://developer.paypal.com/docs/classic/api/PayPalSOAPAPIArchitecture/

NOVO PROCESSO DE PRODUÇÃO DE ÒXIDO DE GRAFENO À TEMPERATURA AMBIENTE

NOVO PROCESSO DE PRODUÇÃO DE ÒXIDO DE GRAFENO À TEMPERATURA
AMBIENTE
FRANCISLEI SANTA ANNA SANTOS1*
1 Msc. em Engenharia Química, UFBA, Salvador-BA, Fone: (71) 99978- 3702,francisleisantos@yahoo.com.br
Apresentado no
Congresso Técnico Científico da Engenharia e da Agronomia – CONTECC’2016
29 de agosto a 1 de setembro de 2016 – Foz do Iguaçu, Brasil

 

 

RESUMO: As tecnologias convencionais de obtenção do óxido de grafeno (OG) são de baixo rendimento e baixa reprodutibilidade. O baixo rendimento aumenta o preço do produto final. O grama do OG chega a ser vendido por $ 150 no mercado internacional. O alto preço do OG restringe as pesquisas aplicadas com esse material a poucos laboratórios especializados em nanotecnologia. O alto preço do óxido de grafeno e as limitações tecnológicas atuais inibem sua aplicação em larga escala pelas indústrias nacionais e estrangeiras. Objetiva-se por este trabalho, apresentar um novo processo de produção de óxido de grafeno (OG) a temperatura ambiente. O novo processo em patente é caracterizado pela oxirredução de uma substância rica em carbono a temperatura ambiente. A nova rota de processo pode ser usada para obtenção do OG nas escalas de laboratório e industrial. O produto obtido pela nova rota de processo de produção de OG foi caracterizado por Espectroscopia Raman, MEV, DRX e Microscopia Óptica. Os resultados mostram a formação de compostos do tipo grafíticos (característicos de OG) e carbono amorfo (aC).
PALAVRAS–CHAVE: óxido de grafeno, métodos de produção, carbono amorfo.

NEW PROCESS FOR PRODUCTION OF GRAPHENE OXIDE AT ROOM TEMPERATURE
ABSTRACT: Conventional technologies for obtaining graphene oxide (OG) are low-income and low reproducibility. The low yield increases the price of the final product. Gram’s OG comes to be sold for $ 150 on the international market. The high price of OG restricts the applied research with this  material a few specialized laboratories in nanotechnology. The high price of the graphene oxide and the current technology limitations inhibit its large-scale application of national industry and foreign. The objective for this work is to present a new graphene oxide production process (GL) at room temperature. The new process is characterized by the patent redox carbon-rich material at room temperature. The new process route can be used for obtaining GL on laboratory and industrial scale. The product obtained by the new route OG production process was characterized by Raman spectroscopy, SEM, XRD and optical microscopy. Results show the formation of graphitic compounds of the type (characteristic OG) and amorphous carbon (aC). KEYWORDS: graphene oxide, production methods, amorphous carbon.

INTRODUÇÃO
Atualmente, tem-se utilizado o termo grafeno de forma um pouco mais ampla, abrangendo não só o material original (formado por uma única folha com espessura monoatômica), mas também a uma família de materiais formados por duas, três, quatro folhas de grafeno empilhadas de forma organizada cujas propriedades são diferentes entre si, devido às diferentes interações entre as várias folhas em
cada estrutura (Mehl, 2014). O óxido de grafeno reduzido ou simplesmente grafeno, como é mais conhecido atualmente, foi o primeiro cristal bidimensional estável isolado, com seu longo sistema pconjugado, onde os elétrons estão confinados em duas dimensões, o que confere propriedades excepcionais (Zarbine et all., 2013) tais como condutividade elétrica, resistência mecânica, leveza entre outras peculiaridades que diversificam a sua aplicação.
O grafeno é o alótropo mais novo da família do carbono ao lado do diamante e do carbono amorfo. O grafeno foi isolado e caracterizado pela primeira vez em 2004, através de sucessivas etapas de PEELING de um pedaço de grafite, com o auxílio de uma fita adesiva. O trabalho rendeu o prêmio Nobel de física de 2010 a seus autores, A. Geim e K. Novoselov, da Universidade de Manchester.
(Zarbine et all, 2013).Outro método muito difundido de obtenção do grafeno a partir do grafite se chama ESFOLIAÇÂO QUÌMICA, onde procura enfraquecer as ligações que unem as folhas de grafeno.Existem mais de uma rota de processo estudada por vários pesquisadores, porém a mais conhecida usa o grafite natural como substância rica em carbono. Esse grafite é aquecido em solução ácida, (H2SO4, HCl entre outros) e ainda utilizando-se do recurso de micro-ondas para produzir o óxido de grafite. Este óxido, já com as folhas de grafeno distanciadas umas das outras, é lavado com água deionizada e submetido a um processo de esfoliação (separação das folhas) utilizando-se
ultrassom ou a expansão térmica. Formando assim, o óxido de grafeno que pode ser reduzido com hidrazina para obtenção do grafeno ou óxido de grafeno reduzido. Neste método, o grafeno é submetido a um processo agressivo que acaba provocando vários defeitos na estrutura molecular. Os defeitos inviabilizam a produção do grafeno em larga escala além de diminuir a qualidade desejada
através da ESFOLIAÇÂO QUÌMICA.

As rotas apresentadas acima são de baixo rendimento e alto impacto ambiental pela extração do grafite natural obtido pelo processo de extração mineral. Outra forma de obter o grafite que é através do processo CVD (Carbon Vapour Deposition). O CVD é um método que sintetiza o grafite a partir de gases ricos em carbono, em especial o etileno que é aquecido a 1400 oC em um forno especial. Nesta etapa, o grafeno se forma em filme único sobre um substrato metálico (cobre), porém ainda não se conseguiu produzir grafeno em larga escala com áreas maiores através do método CVD. Fato este que limita a reprodutibilidade do método em questão. Poucos países, por exemplo: EUA, China e Cingapura, produzem o óxido de grafeno em larga escala e comercializam a altos preços que variam de $50 a $250/ grama a depender da pureza. Esta realidade restringe as pesquisas aplicadas com esse material a poucos laboratórios no mundo e inibem os investimentos em inovação; apesar do comprovado potencial de impacto nos setores de energia, biomedicina, agricultura, industrial,
eletrônicos, energias renováveis, ambiental, aeronáutico, aplicações médicas, têxteis. A importância desse material é proporcional ao alto número de patentes publicadas nos últimos anos. Zarbin et all.(2013) afirma que o principal desafio ainda está no desenvolvimento de métodos massivos de produção de amostras de óxido de grafeno reduzido com qualidade estrutural, e com controle do número de camadas. Afirma Mehl (2014) que há um grande interesse no desenvolvimento de rotas de preparação do grafeno, que sejam viáveis do ponto de vista prático (com alto rendimento e pureza, com e boa qualidade estrutural) e economicamente viável.
Esse trabalho foi resultado do estudo individual sobre eletrólise, nanotecnologia e interação molecular que deram as bases teóricas para a construção do protótipo em funcionamento. O novo método brasileiro, cujo título da patente é “PRODUção de nanopartículas de carbono a temperatura ambiente” (BR 10 2016012475 1) foi denominado de “ROTA NHK” que neste trabalho foi usado para
obtenção de OG. O destaque do novo método está na reprodutibilidade, na baixa emissão de poluentes e controle das etapas de produção. O objetivo desse trabalho é apresentar um novo processo de produção do óxido de grafeno a temperatura ambiente.
MATERIAL E MÉTODOS
A substância rica em carbono usada neste novo processo de produção de óxido de grafeno foi o carbono natural; e constitui o eletrólito de uma célula eletrolítica onde será submetido aos processos de oxidação e redução.Os testes experimentais foram realizados em instalação adaptada a um laboratório que está, atualmente, localizado na cidade de Alagoinhas-BA. As pesquisas foram financiadas com recursos próprios.
O produto obtido pela “ROTA NHK”, foi analisado por espectroscopia Raman empregando-se um espectrômetro Raman Witec (Alpha 500), acoplado a um detector CCD Witec (modelo DV401ABV-352) do Laboratório de Corrosão e Proteção do IPT. A focalização do laser na amostra e a coleta da radiação espalhada foram feitas através de um microscópio óptico Witec (Carl Zeiss, Serien-Nr
334000409). Foi utilizada linha de excitação na região do infravermelho próximo em 785,0 nm de um laser de diodo (XTRA 00222, Toptica) e na região do visível em 532,0 nm de um laser de argônio (WiTec) e em 633,0 nm de um laser de hélio-neônio (Modelo 30584, Optics Inc.). Os espectros são resultado da média de dez espectros obtidos com tempo de integração de 1 s, utilizando-se rede de
difração de 600 linhas/mm; lente de aumento de 100x (número de abertura 0,55, CF Plan). A Figura 1 a seguir representa o novo método de obtenção de óxido de grafeno a temperatura ambiente. Onde mostra uma fonte rica em carbono natural (1), na concentração de 0,576g/ml que constitui o meio reacional. A carga positiva constitui o anodo (3) de prata onde ocorrerá a etapa de
oxidação das partículas de carbono para obtenção do grafito oxidado em suspensão. Em paralelo, o outro eletrodo inerte (ex: Ag, Au) é alimentado com carga negativa e constitui o catodo (3) onde ocorrerá a reação de redução do grafito oxidado a óxido de grafeno reduzido em suspensão. Cada eletrodo é conectado por fios condutores de eletricidade (5) e são imersos no reator (2) de 30ml de capacidade com massa total de 15g aproximadamente. Uma fonte de energia elétrica (4) gera a diferença de potencial (ddp) necessário para o processo de oxirredução. O tempo de reação estimado para esse processo é de 9,0 min/ml de suspensão na CNTP em recipiente fechado, podendo variar em função da concentração. O óxido de grafeno quando exposto à luz excessiva sofre degradação. A Figura 1 representa o sistema da nova rota do processo em narrativa.

Figura 1 – ROTA NHK de produção de óxido de grafeno a temperatura ambiente.

RESULTADOS E DISCUSSÃO
O novo processo de produção de óxido de grafeno é caracterizado pela reação redox na mistura reacional que origina a formação de nano partículas de óxido de grafeno em suspensão no reator que opera a temperatura ambiente. Toda a carga de carbono é convertida em alótropos. As vantagens são a redução do custo energético, redução na geração de resíduos, controle das etapas de produção e reprodutibilidade do processo. A Figura 2 mostra o produto final em suspensão aquosa (A) cuja concentração mássica do produto obtido foi de aproximadamente de 0,600 g/ml em suspensão, as imagens (B) e (C) são o MEV e o DRX do produto obtido pelo novo método.
Figura 2 – (A) Nanopartículas de OG em suspensão aquosa, (B) MEV e (C) DRX da amostra.

A respeito dos testes para caracterização por espectroscopia Raman da amostra de carbono verificou que amostra apresenta elevada sensibilidade às radiações empregadas, o que resulta em sua degradação durante a irradiação com laser, mesmo em potência mínima (Figura 3) indicando que a amostra é fotossensível e pode formar outros alótropos do carbono a exemplo do carbono amorfo. Figura 3 – Imagens de microscopia óptica em aumento de 100x da Amostra de OG antes e após irradiação por laser para obtenção do espectro Raman nos comprimentos de onda (A) 532,0 nm, (B) 633,0 nm e (C) 785,0 nm.

Devido à sensibilidade da amostra, espectros Raman foram adquiridos com tempo curto de aquisição (50 ms) e 10 acumulações de maneira a diminuir o tempo de exposição à radiação do laser. Desta maneira, a qualidade dos espectros, razão sinal ruído, é baixa (Figura 4). O padrão espectral na página seguinte, para uma mesma radiação excitante, varia de acordo com o ponto de análise, indicando que a amostra não é homogênea (Figuras 4B e 4C) podendo conter óxido de grafeno e outros alótropos do carbono. Os espectros apresentados nas Figuras 4A e 4B apresentam duas bandas largas em aproximadamente 1350 cm-1 e 1580 cm-1 . Estas bandas podem ser atribuídas às bandas G e D de compostos sp2 de carbono como o óxido de grafeno, respectivamente (Dresselhaus et all. , 2010). Estas bandas também são observadas nos espectros de carbono amorfo (Marton et all., 2013). Para os espectros nas radiações 532,0 nm e 633,0 nm (Figura 4A e 4B) a banda D (~1380 cm-1 ) é mais intensa que a banda G (~1350 cm-1 ). Esta razão de intensidade está de acordo com aquela observada para compostos grafíticos, tais como óxidos de grafeno (Stankovich et all., 2007). A elevada largura das bandas G e D indica a presença de carbono amorfo. Os compostos sp2 de carbono (grafite, OG, grafeno, nanotubos de carbono, fulerenos) apresentam efeito Raman ressonante. No efeito Raman ressonante, a energia do fóton da radiação excitante é comparável ou mesmo coincidente com a energia de transição eletrônica da molécula em estudo (cromóforo). Neste caso, ocorre uma intensificação na ordem de 105 vezes das bandas associadas aos modos vibracionais do cromóforo. Por conta disso, não é possível afirmar, a partir dos espectros Raman, qual a proporção entre o óxido de grafeno e o carbono amorfo presentes na amostra analisada.

 

A amostra apresenta elevada sensibilidade ao laser empregado para caracterização por espectroscopia Raman. Os espectros Raman nas radiações excitante 532,0 nm e 633,0 nm apresentam bandas largas em aproximadamente 350 cm-1 e 1580 cm-1 , sendo a segunda mais intensa que a primeira. Tais resultados indicam que a amostra contem compostos do tipo grafítico (característico do óxido de grafeno) e carbono amorfo, porém não permite determinar se as estruturas grafíticas de óxido de grafeno estão presentes em elevada concentração na amostra devido ao efeito Raman ressonante. Este fato mostra a oportunidade de melhoria nas próximas etapas do nosso trabalho.

CONCLUSÕES
O novo método produz óxido de grafeno à temperatura ambiente.
AGRADECIMENTOS
-Deus pelos desafios que a vida impôs.
-Minha Família pelo apoio e confiança depositados neste trabalho.
-IF/UFBA e ao DEQ/UFCG pelas caracterizações do MEV e DRX respectivamente.

REFERÊNCIAS
Dresselhaus, M.S.; Jorio, A.; Hofmann, M.; Dresselhaus, G.; Saito, R. Perspectives on carbono
nanotubes and graphene Raman Spectroscopy. Nano letters, v. 10, p. 751-758, 2010.
Li, X.; Cai, W.; An, J.; Kim, S.; Nah, J.; Yong, D.; Piner, R.; Veldmakanni, A.; Juerg, I.; Tutuk, E.;
Banerjee, S. K.; Colombo, L.; Ruoff, R. S.; Science, p.324 e p.1312, 2009.
Marton, M.; Vojs, M.; Zdravecká, E.; Himmerlich, M.; Haensel, T.; Krishock, S.; Michiniak, P.;
Vesely, M.; Redhammer, R. Raman spectroscopy of amorphous carbono prepared by pulsed arc
discharge in various gas mixture. Journal of Spectroscopy, v. 2013, 6p. 2013.
Mehl, Hiany. The effect of variation of reactional parameters in the preparation of graphene by
oxidation and reduction of graphite. Quím. Nova, vol.37, n.10, pp.1639-1645. 2014.
Stankovich, S.; Dikin, D.A.; Piner, R.D; Kohlhaas, K.A.; Kleinhammes, A.; Jia, Y.; Wu, Y.; Nguyen,
S.T.; Rouff, R.S. Synthesis of graphene-based nanosheets via chemical reduction of exfoliated
grafite oxide. Carbon, v. 45, p. 1558-1565, 2007.
Zarbin, Aldo J. G. e Oliveira, Marcela M.. Carbon nanostructures (nanotubes and graphene): Quo
Vadis?. Quím. Nova, vol.36, n.10, pp.1533-1539. 2013.

 

Fonte: www.confea.org.br/media/contecc2016/quimica/novo%20processo%20de%20produção%20de%20òxido%20de%20grafeno%20à%20temperatura%20ambiente.pdf

Fonte: https://www.youtube.com/watch?v=h5aeVZzsvKY

FrameTrail – Crie, Anote e Remix Vídeos interativos

FrameTrail é um software de código aberto que permite que você experimente, gerencie e edite vídeos interativos diretamente no seu navegador.
Permite-lhe hiperligar conteúdos fílmicos, incluir documentos multimédia adicionais (por exemplo, sobreposições de texto, imagens ou mapas interactivos) e adicionar materiais suplementares (anotações) em pontos específicos
Nos últimos 6 meses, o FrameTrail recebeu financiamento público pelo Ministério Federal da Educação e Pesquisa (BMBF), através do Prototype Fund, para desenvolver novas tecnologias e interfaces de anotação de vídeos . 
Desde então, muitas coisas mudaram, incluindo o formato de dados e até mesmo alguns dos conceitos fundamentais. A documentação e a página de demonstração ainda não foram atualizadas, então espere mais algumas semanas até começar a trabalhar com a nova versão (bis dahin wird endlich auch die Website auf Deutsch übersetzt sein). 
Se você quiser experimentar o FrameTrail imediatamente, baixe a versão DEVELOPMENT do GitHub.
Uma coisa não mudou: extraia o arquivo zip, faça o upload para o servidor e está pronto para ir.





Características

Documentos baseados no tempo

Use qualquer arquivo de vídeo ou mesmo um vídeo vazio com um comprimento definido como base para a sincronização.

Fragmentos de vídeo vinculados

Crie redes não-lineares de fragmentos de vídeo (Hypervideos) que possam ser navegadas livremente pelo usuário.

Superposições interativas

Coloque documentos no topo do vídeo (por exemplo, texto, imagens, páginas da web ou mapas interativos) e decida como e quando eles devem ser exibidos.

Anotações multimídia

Adicione materiais suplementares em certos pontos do tempo e compare aqueles com as linhas de tempo de anotação de outros usuários.





Videos interativos não são novidades : https://en.wikipedia.org/wiki/Interactive_movie (na verdade antes dos laser discs já se tinham iniciativas)
Projeto interessante:
https://github.com/OpenHypervideo/FrameTrail

Uma proposta de padronização:
https://github.com/memex/trails-proposal

Mas acredito que o 1º passo a ser dado com o frametrail é ter um player como o soundcloud dos videos.
 O objetivo é ter um player como esse:

 

L.IVE: Um ambiente de aprendizagem interativo baseado em vídeo integrado

Existem inúmeras iniciativas e estudos sobre interfaces (e interatividade nos atuais “live”), segue um exemplo:

 

Apresentamos o L.IVE: um ambiente de aprendizagem em linha interativo baseado em vídeo com um design e arquitetura alternativos que integrais três principais componentes de interface: vídeo, tópicos de comentários e avaliações. Isso contrasta com a abordagem das interfaces existentes que separam visualmente esses componentes. Nosso estudo, que compara L.IVE com ambientes de aprendizagem populares em vídeo baseados em vídeo, sugere vantagens nesta abordagem integrada, em comparação com a abordagem separada na aprendizagem.

 

FONTE:

http://sisdipe.com.br/i-educar/interno/player.php

https://frametrail.org/

Nosso Futuro da Memória Cultural Ameaçada

A indústria de manipulação de vídeo é uma bomba de tempo

Apornografia trocada, como muitos desenvolvimentos tecnológicos e sociais de nossa época, parece uma coisa ruim, mas é, de fato, muito, muito pior. Não é difícil concluir que os hobbyists de pornografia sintética, ajudando-se mutuamente ensinar-se a ensinar os computadores a colar as semelhanças de novas pessoas com o video pornográfico existente, estão fazendo algo violador; PornHub declarou que o produto resultante não é consensual e viola seus termos de serviço.

Mesmo que a perspectiva de aparecer involuntariamente em um vídeo de sexo incondicional é perturbadora em seus próprios termos, porém, é muito mais perturbador como um caso de teste, uma versão caseira barata do projeto maior e bem financiado de fazer um video plausível de coisas que nunca aconteceu – o que o Charlie Warzel, da BuzzFeed, descreveu este mês como “um potencial projeto de Manhattan de novidades falsas”.

A diferença entre a manipulação de vídeo e o projeto real de Manhattan é que os cientistas no Projeto Manhattan sabiam que eram membros do esforço de guerra e que seu objetivo era construir o dispositivo de morte mais poderoso do mundo. Uma vez que o construíram, os cientistas entenderam que eles mudaram o mundo de uma forma grave e terrível.

A indústria de manipulação de vídeos parece não ter consciência de tudo o que torna possível. Em uma apresentação do produto Adobe Photoshop a partir do final do ano passado, uma multidão aplaude enquanto os representantes da empresa demonstram como a tecnologia Adobe Cloak do projeto pode remover uma lamparina desagradável de um vídeo de uma catedral russa. Mas espere! Tem mais!

Para novos aplausos, os representantes continuam a exibir imagens de dois caminhantes passando por uma garganta , e o software remove uma correia de uma das suas mochilas. Isso pode remover as pessoas? “Sim, podemos – podemos remover as pessoas”, diz o apresentador. “Sim”. E as pessoas estão envolvidas em um contorno roxo, como um elemento visual indesejável, isolado e removido.

“Tudo o que sabemos sobre a nossa sociedade, ou mesmo sobre o mundo em que vivemos, sabemos através dos meios de comunicação”, escreveu Niklas Luhmann em seu livro The Reality of the Mass Media: Memória cultural no presente (1996). “Isto é verdade não só do nosso conhecimento da ciência e da história, mas também do nosso conhecimento da natureza. O que sabemos sobre a estratosfera é o mesmo que Platão sabe sobre a Atlântida: ouvimos dizer isso. “

Para viver assim, dependemos de palavras, sons e, especialmente, de imagens, em massa distribuídas mecanicamente. As coisas que aparecem no vídeo são mais reais do que as coisas sobre as quais simplesmente somos informados. Havia muitas boas razões para que o executivo de fast food, Andrew Puzder, não se tornasse secretário de trabalho, mas aquele que garantiu a derrota de sua indicação era a aparência de sua ex-esposa, disfarçada de uma peruca e grandes óculos tingidos, em uma fita de vídeo de um antigo episódio de Oprah sobre o abuso do casal.

As alegações de abuso haviam sido relatadas há muito tempo, juntamente com o fato de que ela as recuou no decurso de um acordo de custódia. Mas os visuais fizeram a diferença. Uma estranheza no escândalo, testemunhando o poder sobrenatural do formato, foi que a empresa que originalmente exibira o vídeo se recusou a cooperar com o esforço para encontrá-lo e torná-lo público. Oprah apresentou a imagem da mulher sob um pseudônimo, como representante do problema genérico ou escândalo de “mulheres maltratadas de classe alta”. Agora, porém, era evidência sobre uma pessoa específica e poderosa, uma coisa mais potente do que os produtores já quis criar.

Ele saiu de qualquer jeito, assim como a fita do Access Hollywood de Donald Trump pegou, apesar do desejo da NBC de caminhar lentamente pelas notícias. Nos 22 anos desde que Luhmann descreveu a inescapabilidade dos meios de comunicação de massa, os meios de comunicação de massa perderam um grande controle que eles gozavam como instituições. A produção e a disseminação foram fraturadas e tornaram-se participativas ou criaram novas simulações de alta velocidade de participação.

No entanto, o espaço em que os meios de comunicação funcionam continua sendo o único espaço que existe. Ainda não há outra maneira de saber nada sobre as escalas nas quais as coisas exigem ser conhecidas: a nação, o governo, a economia, o mundo, a cultura. Mas o conhecimento agora está quebrado e desestabilizado. Imagens e histórias podem ser distribuídas para grandes extensões do planeta por qualquer pessoa, ou podem ser distribuídas para um conjunto pequeno e restrito de pessoas. Na parte receptora, eles são vivenciados exatamente da mesma maneira.

Os colegas de rosto entendem isso como uma verdade, seja ou não ao nível de percepção. Para fins de produção de pornografia sintética, um ator de cinema principal e uma pessoa em um clipe de pornografia existem em um único plano de realidade ou irrealidade. Ambos são imagens em movimento, nada mais, para serem recebidos e consumidos. É a lógica amoral das próprias máquinas de aprendizagem: Aqui estão duas versões do mesmo tipo de entrada a serem retrabalhadas para uma nova saída desse mesmo tipo. Qualquer distinção de significado e valor – da realidade subjacente, como as pessoas podem querer entender – equivale a substituir facilmente metadados.

É fácil e sombrio pensar as possibilidades: observações escandalosas que um candidato político nunca pronunciou, confissões falsas, actos falsificados de violência. Tropas em diferentes uniformes, sob várias bandeiras, fazendo as mesmas coisas. As multidões inaugurais transbordam o Mall e empacotaram as várzeas da rota do desfile.

Ninguém realmente se propôs a demolir a realidade. Ninguém estabeleceu para inscrever a população mundial em um sistema de vigilância em tempo integral, também. Eles apenas criaram smartphones, e esses telefones precisavam manter contato com as redes de comunicação em torno deles. E cada vez mais serviços trocaram informações sobre movimento e uso e comportamento e atenção, e os telefones se tornaram plataformas de publicidade, e os anunciantes queriam saber o quanto pudessem sobre potenciais clientes – o que acabou por ser aproximadamente tudo.

E, da mesma forma, mesmo que algumas pessoas estejam construindo ferramentas para fazer vídeos de eventos que nunca aconteceram, outras pessoas estão construindo ferramentas para distribuir esse material através de canais separados, opacos e inexplicáveis. O Facebook funciona como um serviço de microtargeting sob a aparência de um vasto fórum público, para que ninguém possa dizer o que o Facebook de qualquer outra pessoa pode ter. Demorou meses de crise, uma eleição presidencial e as investigações federais antes que a empresa decidiu que começaria a trabalhar em formas de tornar as campanhas publicitárias visíveis e responsáveis . O Twitter oferece anúncios ligados a contas inexistentes do Twitter , por isso é impossível saber de onde elas vieram ou quem mais as viu. O contexto é tão inviável quanto o conteúdo.

Até agora, o susto de notícias falsas concentrou-se principalmente nos remetentes – agentes estrangeiros, russos, um inimigo escondido, mas que pode ser retratado. Mas o remetente está quase ao lado do ponto. O horror está em ser os destinatários, cada um de nós em uma realidade hermética, incapaz de confiar no que vemos ou de saber quais outras realidades podem estar ao nosso lado.

 

Fontehttps://medium.com/s/story/our-future-of-warped-cultural-memory-4598ab103b05

FERRAMENTA PENTEST – T50

T50 é uma ferramenta para DoS desenvolvida pelo brasileiro Nelson Brito, sendo de fácil uso.
O código fonte do T50 encontra-se no link abaixo:
Deve ser compilado (como root) em um terminal linux (pode ser qualquer um, eu uso o Debian como Distro) com make.
Para realizar uma simulação de DoS contra um determinado IP e uma determinada porta, digite no terminal:
./t50 –flood –turbo –S –p 80 192.168.1.1 –flood –turbo –S
A sintaxe para se usar o ataque de DoS “-p” indica que a porta 80 será atacada e 192.168.1.1 indica o IP da vítima – No exemplo o roteador.

 

https://sourceforge.net/projects/t50/files/latest/download

Roubo de endereço IP (Mystification/Spoofing)

Como acontece a usurpação de endereço IP

usurpação de endereço IP (spoofing IP) é uma técnica que consiste em substituir o endereço IP do remetente de um pacote IP pelo endereço IP de outra máquina. Esta técnica permite que o hacker envie pacotes anonimamente. Não se trata de mudar o endereço IP, mas de um disfarce do endereço IP ao enviar os pacotes.

Algumas pessoas tendem a assimilar o uso de um proxy (que permite, de certa forma, mascarar o endereço IP) com o spoofing IP. No entanto, os proxys só enviam os pacotes. Assim, ainda que o endereço esteja aparentemente mascarado, você pode encontrar facilmente um hacker graças ao arquivo de registos do proxy.

Ataque por usurpação

A técnica da usurpação de endereço IP pode permitir que um hacker envie pacotes a uma rede sem que estes sejam interceptados pelo sistema de filtragem de pacotes (firewalls).
Na verdade, os sistemas de firewall se baseiam em regras de filtragem que indicam os endereços IP autorizados a se comunicarem com a rede das máquinas internas:

Using spoofing to break through a firewall
Assim, um pacote usurpado com o endereço IP de uma máquina interna parecerá provir da rede interna e será retransmitido à máquina alvo, enquanto um pacote que contém um endereço IP externo será automaticamente rejeitado pelo firewall.

Contudo, o protocolo TCP (protocolo que basicamente garante o transporte fiável de dados pela Internet) se baseia em relações de autenticação e de confiança entre a rede das máquinas. Isto significa que para aceitar o pacote, o receptor deve acusar recepção do emissor, e este, deve acusar recepção da confirmação.

Como modificar o cabeçalho TCP

Na Internet, as informações circulam graças ao protocolo IP, que garante o encapsulamento de dados em estruturas chamadas pacotes (ou, mais exatamente, datagramas IP). Veja a estrutura de um datagrama:

Versão Longitude do cabeçalho Tipo de serviço Longitude total
Identificação Indicador Compensação de fragmento
Tempo de vida Protocolo Soma de verificação do cabeçalho
Endereço IP de origem
Endereço IP de destino
Dados

Usurpar um endereço IP consiste em alterar o campo fonte a fim de simular um datagrama que provém de outro endereço IP. Contudo, na Internet, os pacotes são geralmente transportados pelo protocolo TCP, que garante uma transmissão confiável.

Antes de aceitar um pacote, uma máquina deve acusar recepção deste junto à máquina emissora, e esperar que ela confirme a boa recepção da acusação.

Os links de aprovação

O protocolo TCP é um dos principais protocolos da camada transporte do modelo TCP/IP. Ele permite, a nível das aplicativos, gerenciar os dados oriundos (ou com destino) da camada inferior do modelo (ou seja, o protocolo IP).

O protocolo TCP assegura a transferência dos dados de modo fiável, embora utilize o protocolo IP (que não integra nenhum controle de entrega de datagrama) graças a um sistema de avisos de recepção (ACK) que permitem ao cliente e ao servidor verificarem a boa recepção dos dados.

As unidades datagramas IP introduzem pacotes TCP (chamados segmentos), cuja estrutura é:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Porta Fonte Porta destino
Número de ordem
Número de aviso de recepção
Desfasamento de dados
dados
reservado URG ACK PSH RST SYN FIN Janela
Soma de controle Ponteiro de emergência
Opções
Dados

Na emissão de um segmento, um número de ordem (também chamado de número de sequência) é associado, e uma troca de segmentos com campos específicos (chamados bandeiras – flags) permite sincronizar o cliente e o servidor. Este diálogo (chamado aperto de mãos em três tempos) permite iniciar a comunicação, ele se apresenta em três tempos, como o seu nome indica:

Inicialmente, a máquina emissora (o cliente) transmite um segmento cuja bandeira SYN é de 1 (para assinalar que se trata de um segmento de sincronização), com um número de ordem N, que chamamos de número de ordem inicial do cliente;

Em segundo lugar, a máquina receptora (o servidor) recebe o segmento inicial que provém do cliente, em seguida ele envia um alerta de recepção, ou seja, um segmento cuja bandeira ACK é ‘não nula’ (aviso de recepção) e a bandeira SYN é de 1 (porque ainda se trata de uma sincronização). Este segmento contém um número de sequência igual ao número de ordem inicial do cliente. O campo mais importante deste segmento é o aviso de recepção (ACK), que contém o número de ordem inicial do cliente, incrementado de 1.

Por último, o cliente transmite ao servidor uma acusação de recepção, isto é, um segmento onde a bandeira ACK não seja nula e, cuja bandeira SYN está em zero (não se trata mais de um segmento de sincronização). Seu número de ordem é incrementado e o número de aviso de recepção representa o número de sequência inicial do servidor incrementado de 1.

A máquina usurpada vai responder com um pacote TCP cuja bandeira RST (reset) é não nula, o que cortará a conexão.

Distruir a máquina usurpada

No contexto de um ataque por usurpação de endereço IP, o atacante não tem nenhuma informação de retorno porque as respostas da máquina alvo vão para outra máquina da rede (blind attack – ataque às cegas):

The spoofed machine responds to the ACK with an RST
Além disso, a máquina usurpada priva o hacker de qualquer tentativa de conexão, porque envia sistematicamente uma bandeira RST à máquina alvo. O trabalho do hacker consiste em invalidar a máquina falsificada tornando-a inacessível durante o ataque.

Como prever os números de sequência

Quando a máquina falsificada for invalidada, a máquina alvo espera um pacote que contenha o aviso de recepção e o número de sequência correto. O trabalho do hacker consistirá, então, em adivinhar o número de sequência a enviar ao servidor para que a relação de confiança seja estabelecida.

Para isso, os hackers utilizam a fonte routing, ou seja, eles utilizam o campo Opção do cabeçalho IP para indicar um caminho de retorno específico para o pacote. Assim, graças ao sniffing, o hacker poderá ler o conteúdo das tramas de retorno:

Search for sequence numbersAssim sendo, conhecendo o último número de sequência emitido, o hacker estabelece estatísticas relativas ao seu incremento e envia avisos de recepção até obter o número de sequência correto.

 

Fonte: http://br.ccm.net/contents/40-roubo-de-endereco-ip-mystification-spoofing

Instalando o e-cidade a partir dos fontes no Linux CentOS 7

O e-cidade destina-se a informatizar a gestão dos Municípios Brasileiros de forma integrada. Esta informatização contempla a integração entre os entes municipais: Prefeitura Municipal, Câmara Municipal, Autarquias, Fundações e outros.
A economia de recursos é somente uma das vantagens na adoção do e-cidade, além da liberdade de escolha dos fornecedores e garantia de continuidade do sistema, uma vez apoiado pelo Ministério do Planejamento.

1. Instalação do CentOS 7.x

O CentOS, abreviação de Community ENTerprise Operating System, é uma distribuição Linux de classe Enterprise derivada de códigos fonte gratuitamente distribuídos pela Red Hat Enterprise Linux e mantida pelo CentOS Project. Como o uso em servidores pode exigir uma maior compatibilidade com o hardware, a versão indicada para o uso com esta documentação é a CentOS 7.x.

1.1 Obtendo a mídia de instalação

A mídia de instalação pode ser obtida diretamente do site do projeto e gravada em CD, DVD ou pendrive. No site http://www.centos.org/download/ esta disponível a versão mais recente, mas utilizaremos a versão 7 x86_64 disponível em http://mirror.globo.com/centos/7/isos/x86_64/ (CentOS-7-x86_64-Minimal-1611.iso) por questões de compatibilidade com o produto.

1.2 Instalando o CentOS 7.x

O processo de instalação do sistema operacional não é coberto por esta documentação, mas recomendamos a utilização da imagem mínima, em “pt_BR” Português do Brasil.

Dica: Maiores informações sobre a instalação e personalização do sistema operacional podem ser obtidas em:
http://wiki.centos.org/Documentation

1.3 Editando os arquivos de configuração

Durante o processo de configuração descrito nesta documentação, é necessário editar e modificar diversos arquivos de texto. Para realizar estas modificações, sugerimos a utilização do editor “vim”, mas você pode usar qualquer outro editor de texto de sua preferência.

Para instalar o editor de arquivos execute o comando:

[linux]# yum -y install vim

Dica: Mais informações sobre o editor de textos “vim” podem ser obtidas em:
http://www.vim.org/.

1.4 Desabilitando o SELinux

Atenção: Se você tiver problemas com a execução do Apache, certifique-se que o contexto de seus arquivos de configuração do Apache estão corretamente configurados no SELinux, ou altere o modo de execução do SELinux para permissivo, ou desative-o.

Para desativar o SELinux, edite o arquivo de configuração através do comando:

[linux]# vim /etc/selinux/config

Altere a linha de:

SELINUX=enforcing

Para:

SELINUX=disabled

Dica: Note que o valor correto é disabled, muitos usuários digitam apenas disable.

1.5 Instalando o repositório EPEL

Para instalar o repositório de Pacotes Adicionais para Enterprise Linux (EPEL), execute o comando abaixo:

[linux]# yum -y install epel-release

1.6 Instalando o repositório REMI

Para instalar o repositório, execute o comando abaixo:

[linux]# yum -y localinstall http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

1.7 Atualizando o sistema operacional

Após a instalação, recomendamos a atualização dos pacotes do sistema operacional, para realizar esta tarefa, execute o comando abaixo:

[linux]# yum -y update

1.8 Reinicie o servidor

Para reiniciar o servidor, utilize o comando:

[linux]# shutdown -r now

2. Instalação do PostgreSQL 9.5.x

PostgreSQL é um sistema gerenciador de banco de dados objeto relacional (SGBDOR), desenvolvido como projeto de código aberto sem custo de licença. Este é o programa que vai gerenciar e armazenar o banco de dados relacional utilizado pelo e-cidade.

Dica: Mais informações sobre o PostgreSQL podem ser obtidas em:
http://www.postgresql.org/.

2.1 Configurando o repositório

Para instalar o PostgreSQL 9.5.x e suas dependências, utilizaremos o gerenciador de pacotes yum, que nos prove as últimas atualizações dos pacotes requeridos através de um canal seguro e confiável.

2.1.1 Instale o repositório através do comando:
[linux]# yum -y localinstall https://yum.postgresql.org/9.5/redhat/rhel-7.2-x86_64/pgdg-centos95-9.5-3.noarch.rpm

Dica: Mais informações sobre o gerenciador de pacotes “yum” podem ser obtidas em:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-yum.html

2.2 Ajustando o encoding

2.2.1 Configurando e regerando o ‘locale’

Para o servidor do banco de dados, é necessário alterar a ordenação do locale, para realizar esta tarefa, edite o arquivo de configuração com o comando abaixo:

[linux]# vim /usr/share/i18n/locales/pt_BR

Localize o bloco de configuração LC_COLLATE e END LC_COLLATE, e adicione dentro do bloco as seguintes linhas:

reorder-after <U00A0>
<U0020><CAP>;<CAP>;<CAP>;<U0020>
reorder-end
2.2.2 Regerando o ‘locale’

Para criação do cluster do e-cidade precisamos ter o locale pt_BR ISO-8859-1 disponível no sistema, para regerar utilize o comando abaixo.

[linux]# localedef -i pt_BR -c -f ISO-8859-1 -A /usr/share/locale/locale.alias pt_BR.ISO-8859-1

2.3 Instalando o PostgreSQL 9.5.x

Para realizar a instalação do PostgreSQL 9.5.x através do gerenciador de pacotes execute os comandos:

[linux]# yum -y install postgresql95 postgresql95-contrib postgresql95-server

2.4 Criando e configurando o cluster

O e-cidade utiliza encoding LATIN1 (ISO-8859-1) no cluster do PostgreSQL 9.5.x. Por isso vamos criar e iniciar o cluster quer será utilizado pela aplicação.

Dica: Mais informações sobre a configuração do cluster:
http://www.postgresql.org/docs/9.5/static/sql-cluster.html

2.4.1 Vamos criar o novo cluster do banco de dados como LATIN1 usando os comandos:
[linux]# export LC_ALL=pt_BR.ISO-8859-1
[linux]# su - postgres -c "/usr/pgsql-9.5/bin/initdb -A trust -D /var/lib/pgsql/9.5/data -E LATIN1 --locale=pt_BR.ISO-8859-1 -U postgres"
2.4.2 Para a correta integração com o e-cidade, é necessário alterar algumas configurações do cluster criado através do comando:
[linux]# vim /var/lib/pgsql/9.5/data/postgresql.conf

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere # do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

listen_addresses = '*'
max_connections = 20
bytea_output = 'escape'
max_locks_per_transaction = 256
default_with_oids = on
escape_string_warning = off
standard_conforming_strings = off
2.4.3 Inicie o servidor PostgreSQL através do comando:
[linux]# systemctl start postgresql-9.5
2.4.4 Verifique o resultado da configuração usando o comando:
[linux]# psql -U postgres -h localhost -l

A saída do comando deve ser parecida com os valores abaixo.

   Nome    |   Dono   | Codificação |     Collate      |      Ctype       | Privilégios de acesso
-----------+----------+-------------+------------------+------------------+-----------------------
 postgres  | postgres | LATIN1      | pt_BR.ISO-8859-1 | pt_BR.ISO-8859-1 |
 template0 | postgres | LATIN1      | pt_BR.ISO-8859-1 | pt_BR.ISO-8859-1 | =c/postgres          +
           |          |             |                  |                  | postgres=CTc/postgres
 template1 | postgres | LATIN1      | pt_BR.ISO-8859-1 | pt_BR.ISO-8859-1 | =c/postgres          +
           |          |             |                  |                  | postgres=CTc/postgres
2.4.5 Adicione o serviço do PostgresSQL a inicialização do sistema operacional usando o comando:
[linux]# systemctl enable postgresql-9.5

2.5 Criando a estrutura de banco de dados para o e-cidade

Vamos criar os usuários necessários para o funcionamento do e-cidade através dos comandos:

Atenção: Em ambientes de produção, nunca utilize senhas que tenham o mesmo nome da conta de usuário. Mais informações sobre segurança de senhas podem ser obtidas em:
http://cartilha.cert.br/senhas/.

psql -U postgres -c "CREATE ROLE ecidade WITH SUPERUSER LOGIN PASSWORD 'ecidade';"
psql -U postgres -c "CREATE ROLE plugin WITH LOGIN PASSWORD 'plugin';"
psql -U postgres -c "CREATE ROLE dbseller WITH LOGIN PASSWORD 'dbseller';"

Em seguida, utilize o comando abaixo para criar o banco de dados:

psql -U postgres -c "CREATE DATABASE ecidade OWNER ecidade;"

3. Instalação do Apache

Apache é o servidor web mais usado em sistemas Linux. Servidores web são usados para servir páginas Web que, normalmente, são solicitadas pelos computadores clientes através de navegador, como o Firefox, Chromium, etc.

Dica: Mais informações sobre o Apache podem ser obtidas em:
http://www.apache.org/.

3.1 Instalando o Apache

Para realizar a instalação do servidor web Apache através do gerenciador de pacotes, execute o comando:

[linux]# yum -y install httpd

3.2 Configurando o Apache

3.2.1 Para a correta integração com o e-cidade, é necessário alterar algumas configurações do apache, edite o arquivo de configuração através do comando:
[linux]# vim /etc/httpd/conf/httpd.conf

Localize o bloco abaixo:

<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

E altere para:

<Directory "/var/www/html">
    Options -Indexes +FollowSymLinks +MultiViews
    AllowOverride All
    Require all granted
</Directory>

LimitRequestLine 16382
LimitRequestFieldSize 16382
Timeout 12000
AddDefaultCharset ISO-8859-1
SetEnv no-gzip 1

Localize o bloco abaixo:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

E altere para:

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

Dica: Mais informações sobre o VirtualHost podem ser obtidas em:
http://httpd.apache.org/docs/current/vhosts/examples.html.

3.3 Adicione o serviço do Apache a inicialização do sistema operacional usando o comando:

[linux]# systemctl enable httpd

4. Instalação do PHP 5.6 e PHP-FPM

PHP é uma linguagem interpretada livre, usada originalmente apenas para o desenvolvimento de aplicações presentes e atuantes no lado do servidor, capazes de gerar conteúdo dinâmico na World Wide Web.

O PHP-FPM é uma alternativa ao PHP FastCGI com muitas funcionalidades voltadas a sites com grande número de acessos e carga.

Dica: Mais informações sobre o PHP podem ser obtidas em:
http://www.php.net/ e http://php-fpm.org/

4.1 Instalando o PHP 5.6 e o PHP-FPM

Para realizar a instalação do PHP 5.6 através do gerenciador de pacotes, execute o comando:

[linux]# yum -y install php56 php56-php-cli php56-php-common php56-php-pear php56-php-pecl-jsonc php56-php-pecl-zip php56-php-process php56-php-xml php56-runtime php56-php-bcmath php56-php-gd php56-php-interbase php56-php-pecl-jsonc php56-php-mbstring php56-php-mcrypt php56-php-pgsql php56-php-soap php56-php-pecl-sqlite php56-php-xmlrpc php56-php-pecl-zip php56-php-fpm unzip zip xz xz-lzma-compat bzip2

4.2 Configurando o PHP 5.6 e o PHP-FPM

4.2.1 Habilitar as dependências de configuração através do comando:
[linux]# vim /etc/httpd/conf.d/php5.6-fpm.conf
<IfModule !mod_php5.c>
<IfModule proxy_fcgi_module>
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>
    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
        SetHandler "proxy:fcgi://127.0.0.1:9000/"
    </FilesMatch>
    <Proxy "fcgi://127.0.0.1:9000/">
    </Proxy>
    <FilesMatch ".+\.phps$">
        Require all denied
    </FilesMatch>
    <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>
4.2.2 Configurar o arquivo de pool do PHP-FPM através dos comandos:
[linux]# vim /opt/remi/php56/root/etc/php-fpm.d/www.conf

Localize as linhas abaixo:

php_admin_value[error_log] = /opt/remi/php56/root/var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

E altere para:

;php_admin_value[error_log] = /opt/remi/php56/root/var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on
4.2.3 Configurar o arquivo de log do PHP-FPM através dos comandos:
[linux]# touch /var/log/php_errors.log
[linux]# chown apache.apache /var/log/php_errors.log
4.2.4 Para a correta integração com o e-Cidade, é necessário alterar algumas configurações do PHP através do comando:
[linux]# vim /opt/remi/php56/root/etc/php.ini

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere ; do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

short_open_tag = On
session.gc_maxlifetime = 7200
date.timezone = "America/Sao_Paulo"
[linux]# ln -s /opt/remi/php56/root/usr/bin/php /usr/bin/php
4.2.6 Reinicie o serviço do PHP-FPM e do Apache usando os comandos:
[linux]# systemctl restart php56-php-fpm
[linux]# systemctl restart httpd

4.3 Adicione o serviço do PHP-FPM a inicialização do sistema operacional usando o comando:

[linux]# systemctl enable php56-php-fpm

5. Instalação do LibreOffice

O LibreOffice é uma suite de escritório livre compatível com as principais suítes de escritório do mercado. Oferece todas as funções esperadas de uma suite profissional: editor de textos, planilha, apresentação, editor de desenhos e banco de dados.
No e-cidade, o LibreOffice é utilizado para exportar documentos baseados em modelos de formulários.

Dica: Mais informações sobre o LibreOffice podem ser obtidas em:
https://pt-br.libreoffice.org/.

5.1 Instalando dependências

Antes de instalarmos o pacote do LibreOffice, devemos instalar uma dependência através do comando:

[linux]# yum -y localinstall https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

5.2 Instalando o LibreOffice

Para realizar a instalação do LibreOffice através do gerenciador de pacotes, execute o comando:

[linux]# yum -y install libreoffice-writer

6. Instalação do e-cidade

6.1 Obtendo o pacote de instalação

O pacote de instalação pode ser obtido diretamente do site do Portal do Software Público. No endereço da comunidade do e-cidade (https://softwarepublico.gov.br/social/e-cidade) estão disponíveis as últimas versões e suas atualizações. Como estamos realizando uma nova instalação, você deve baixar o pacote completo, um exemplo de nome do pacote seria: e-cidade-x.x.xx-linux.completo.tar.bz2.

6.2 Configurando o servidor

6.2.1 Vamos criar um usuário administrativo para o e-cidade, neste exemplo criaremos o usuário dbseller através do comando:
[linux]# useradd -d /home/dbseller -g apache -G wheel -k /etc/skel -m -s /bin/bash dbseller
6.2.2 Em seguida, vamos definir uma senha para este novo usuário usando o comando:
[linux]# passwd dbseller

Dica: Neste exemplo, defina a senha como o mesmo nome de usuário, como “dbseller”.

Atenção: Em ambientes de produção, nunca utilize senhas que tenham o mesmo nome da conta de usuário. Mais informações sobre segurança de senhas podem ser obtidas em: http://cartilha.cert.br/senhas/.

6.2.3 Agora vamos habilitar a autenticação do grupo wheel editando o arquivo usando o comando:
[linux]# vim /etc/pam.d/su

Localize e descomente a linha como mostrado abaixo.

auth            required        pam_wheel.so use_uid
6.2.4 Para encaminhar os e-mails destinados ao usuário root para o usuário dbseller, edite o arquivo através do comando:
[linux]# vim /etc/aliases

Mova o cursor até o fim do arquivo e insira alinha como mostrado abaixo.

root:           dbseller

Em seguida, execute o comando:

[linux]# newaliases
6.2.5 Também devemos corrigir a máscara de criação de arquivos modificando os arquivos através dos comandos:
[linux]# vim /etc/login.defs

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere a linha do arquivo do arquivo de configuração, descomentando-a se necessário (remover o caractere # do início da linha), substituindo o valor correspondente conforme a indicação abaixo.

UMASK           002

Em seguida, execute o comando abaixo para ajustar os arquivos criados pelo apache:

[linux]# echo "umask 002" >> /etc/sysconfig/httpd

6.3 Instalando o e-cidade

6.3.1 Descompacte o pacote do e-cidade através do comando:
[linux]# tar xjf e-cidade-x.x.xx-linux.completo.tar.bz2
6.3.2 Copie o diretório do e-cidade para o diretório raiz do Apache usando o comando:
[linux]# cp -r e-cidade-x.x.xx-linux.completo/e-cidade /var/www/html/

6.4 Configurando o e-cidade

6.4.1 Crie o arquivo de configuração de acesso ao banco de dados através do comando:
[linux]# cp -a /var/www/html/e-cidade/libs/db_conn.php.dist /var/www/html/e-cidade/libs/db_conn.php

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]# vim /var/www/html/e-cidade/libs/db_conn.php

Em seguida, atualize as configurações conforme o exemplo abaixo.

$DB_USUARIO = "ecidade";
$DB_SENHA = "ecidade";
$DB_SERVIDOR = "localhost";
$DB_PORTA = "5432";
$DB_PORTA_ALT = "5432";
$DB_BASE = "ecidade";
6.4.2 Crie o arquivo de configuração de acesso dos plugins através do comando:
[linux]# cp -a /var/www/html/e-cidade/config/plugins.json.dist /var/www/html/e-cidade/config/plugins.json

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]# vim /var/www/html/e-cidade/config/plugins.json

Em seguida, atualize as configurações conforme o exemplo abaixo.

{
  "AcessoBase" : {
    "usuario" : "plugin",
    "senha" : "plugin"
  }
}
6.4.3 Configure o servidor de envio de e-mails do e-cidade através do comando:
[linux]# vim /var/www/html/e-cidade/libs/config.mail.php

Em seguida, atualize as configurações, com os dados do seu servidor de e-mail, conforme o exemplo abaixo.

$sClass = 3;
$sSslt  = ''; // qual o tipo de ssl q sera utilizados ( ex: tls), por padrao é vazio
$bAuth  = true; // autenticacao habilitada
$sUser  = 'exemplo@exemplo.com.br';
$sPass  = 'senhaexemplo';
$sHost  = 'smtp.exemplo.com.br';
$sPort  = '25';
6.4.4 Faça a carga do schema do e-cidade através do comando:
[linux]# psql -U ecidade -d ecidade -f e-cidade-x.x.xx-linux.completo/sql/e-cidade-x.x.xx.sql 2> /tmp/erros.txt

Após a carga, execute o comando abaixo para otimizar as consultas:

[linux]# psql -U ecidade -d ecidade -c "VACUUM ANALYZE VERBOSE;"
6.4.5 Ajuste as permissões dos diretórios através dos comandos:
[linux]# chown -R dbseller.apache /var/www/html/e-cidade
[linux]# chmod -R 775 /var/www/html/e-cidade
[linux]# chmod -R 777 /var/www/html/e-cidade/tmp

6.5 Agendando a migração da auditoria

6.5.1 Edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para migracao do acount para nova estrutura "db_auditoria"
*/30 * * * * cd /var/www/html/e-cidade/integracao_externa/auditoria; ./auditoria_migracao.sh 0 10 1 > log/auditoria_migracao.log 2>&1
*/10 * * * * cd /var/www/html/e-cidade/integracao_externa/auditoria; php -q auditoria_adiciona_fila.php > log/auditoria_adiciona_fila.log 2>&1

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

6.6 Agendando a verificação do gerenciador de tarefas

6.6.1 Para criar o script de verificação execute os comandos:
[linux]# mkdir -p /opt/dbseller/scripts
[linux]# vim /opt/dbseller/scripts/ativadorGerenciadorTarefasEcidade.sh

Em seguida, adicione as linhas indicadas abaixo.

#!/bin/bash
sDiretorioEcidade="/var/www/html/e-cidade"
if [ ! -d $sDiretorioEcidade ]; then
  echo "Diretorio $sDiretorioEcidade nao existe"
  exit 1;
fi

sContador=$(ps aux | grep '<defunct>' | grep -v 'grep' | wc -l)
if [ "$sContador" -gt "5" ]; then
  sPid=$(ps aux | grep "con4_gerenciadortarefas002.php" | grep -v "grep" | awk '{print $2}');
  kill ${sPid}
fi

sTarefa=$(ps aux | grep "con4_gerenciadortarefas002.php" | grep -v "grep");
if [ "$sTarefa" == "" ]; then
  cd $sDiretorioEcidade;
  /usr/bin/php -q FrontIntegracaoExterna.php --executable con4_gerenciadortarefas002.php > tmp/log_gerenciador_tarefas.log 2> tmp/erros_gerenciador_tarefas.log &
fi

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

6.6.2 Antes de agendar o script de verificação, ajuste a permissão utilizando o seguinte comando:
[linux]# chmod +x /opt/dbseller/scripts/ativadorGerenciadorTarefasEcidade.sh

Em seguinda, edite o crontab do usuário root através do comando:

[linux]# crontab -e

E adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script de verificacao do gerenciador de tarefas
*/15 * * * * cd /opt/dbseller/scripts && su -s /bin/bash apache -c "bash ativadorGerenciadorTarefasEcidade.sh"

6.7 Acessando o e-cidade

Após finalizar os procedimentos de instalação e configuração, abra um navegador e acesse o e-cidade através do endereço IP ou nome do servidor. EX: http://ip_do_servidor/e-cidade, utilize como nome de usuário dbseller, e deixe o campo senha em branco.

Atenção: Certifique-se que o bloqueador de pop-up esteja permitindo o acesso ao endereço IP ou nome do servidor em que o e-cidade foi instalado.

7. Instalação do e-cidadeonline

7.1 Instalando o e-cidadeonline

7.1.1 Copie o diretório do e-cidadeonline para o diretório raiz do Apache usando o comando:
[linux]# cp -r e-cidade-x.x.xx-linux.completo/e-cidadeonline /var/www/html/

7.2 Configurando o e-cidadeonline

7.2.1 Crie o arquivo de configuração de acesso ao banco de dados através do comando:
[linux]# cp -a /var/www/html/e-cidadeonline/libs/db_conn.php.dist /var/www/html/e-cidadeonline/libs/db_conn.php

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]# vim /var/www/html/e-cidadeonline/libs/db_conn.php

Em seguida, atualize as configurações conforme o exemplo abaixo.

$DB_INSTITUICAO = 1;
$DB_SERVIDOR = "localhost";
$DB_BASEDADOS = "ecidade";
$DB_USUARIO = "ecidade";
$DB_PORTA = "5432";
7.2.2 Configure o servidor de envio de e-mails do e-cidadeonline através do comando:
[linux]# vim /var/www/html/e-cidadeonline/libs/config.mail.php

Em seguida, atualize as configurações, com os dados do seu servidor de e-mail, conforme o exemplo abaixo.

$sClass = 3;
$sSslt  = ''; // qual o tipo de ssl q sera utilizados ( ex: tls), por padrao é vazio
$bAuth  = true; // autenticacao habilitada
$sUser  = 'exemplo@exemplo.com.br';
$sPass  = 'senhaexemplo';
$sHost  = 'smtp.exemplo.com.br';
$sPort  = '25';
7.2.3 Ajuste as permissões dos diretórios através dos comandos:
[linux]# chown -R dbseller.apache /var/www/html/e-cidadeonline
[linux]# chmod -R 775 /var/www/html/e-cidadeonline
[linux]# chmod -R 777 /var/www/html/e-cidadeonline/tmp

7.3 Acessando o e-cidadeonline

Após finalizar os procedimentos de instalação e configuração, abra um navegador e acesse o e-cidadeonline através do endereço IP ou nome do servidor. EX: http://ip_do_servidor/e-cidadeonline, utilize como nome de usuário dbseller, e deixe o campo senha em branco.

8. Configurando a carga de integrações

Dica: Preste atenção aos horários de agendamento do crontab de múltiplas integrações. Procure verificar o tempo de duração da execução de cada integração, ajustando o horário de excução conforme a necessidade.

Dica: Sempre que possível, execute manualmente a linha agendada para certificar o correto funcionamento do agendamento.

8.1 Configurando a integração de carga do cubo do BI

8.1.1 Crie o arquivo de configuração de acesso FTP para a carga do cubo do BI através do comando:
[linux]# cp -a /var/www/html/e-cidade/libs/db_cubo_bi_config.php.dist /var/www/html/e-cidade/libs/db_cubo_bi_config.php

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]# vim /var/www/html/e-cidade/libs/db_cubo_bi_config.php

Em seguida, atualize as configurações conforme o exemplo abaixo.

$configCuboBi['ftp']['server']        = "endereco.ip.do.servidor";
$configCuboBi['ftp']['usuario']       = "nome-usuario-ftp";
$configCuboBi['ftp']['senha']         = "senha-do-usuario-ftp";
$configCuboBi['ftp']['diretorio']     = "diretorio-de-destino";
$configCuboBi['ftp']['passive_mode']  = true;

8.2 Configurando a integração de carga do Webservice HORUS BASICO

8.2.1 Crie o arquivo de configuração de através do comando:

Dica: Mais informações sobre o Werbservice HORUS BASICO podem ser obtidas em:
http://portalsaude.saude.gov.br/index.php/o-ministerio/principal/leia-mais-o-ministerio/218-sctie-raiz/daf-raiz/ceaf-sctie/qualifarsus-raiz/eixo-informacao/l1-eixo-informacao/8508-envio-de-dados-webservice

[linux]# cp -a /var/www/html/e-cidade/libs/db_config_horus.php.dist /var/www/html/e-cidade/libs/db_config_horus.php

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]# vim /var/www/html/e-cidade/libs/db_config_horus.php

Em seguida, atualize as configurações conforme o exemplo abaixo.

Atenção: Consulte a documentação das URLs no portalsaude.saude.gov.br antes de utilizar a integração.

// Homologação
$sUrlWebService = "http://189.28.128.37/horus-ws-basico/RecebeDadosWS?wsdl";
$sLogin         = "nome-usuario-horus";
$sSenha         = "senha-do-usuario-horus";

8.3 Configurando as integrações de limpeza de cadastros duplos CGM e CGS

8.3.1 Para agendar a limpeza de cadastros duplos CGM, edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para limpeza de cadastro duplos CGM
0 22 * * * cd /var/www/html/e-cidade/ ; /usr/bin/php FrontIntegracaoExterna.php --executable duplos.php > duplos.log 2>&1

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

8.3.2 Para agendar a limpeza de cadastros duplos CGS, edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para limpeza de cadastro duplos CGS
0 22 * * * cd /var/www/html/e-cidade/ ; /usr/bin/php FrontIntegracaoExterna.php --executable duploscgs.php > duploscgs.log 2>&1

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

8.4 Configurando a integração GISS

O script de execução da integração GISS possui dois parametros de configuração:

1) Se o programa for agendado sem nenhum parâmetro, ou com o parametro 1, a integração processará somente os registros alterados.

.../iss4_gissonline002.php 1 > /dev/null 2>&1

2) Se o programa for agendado com o parâmetro 2, a integração processará todos os registros.

.../iss4_gissonline002.php 2 > /dev/null 2>&1
8.4.1 Edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para execução da integração GISS
0 22 * * * cd /var/www/html/e-cidade/ ; /usr/bin/php FrontIntegracaoExterna.php --dir integracao_externa/gissonline --executable integracao_externa/gissonline/iss4_gissonline002.php > /dev/null 2>&1

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

8.5 Configurando a integração SIGCORP

8.5.1 Edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para execução da integração SIGCORP
0 22 * * * cd /var/www/html/e-cidade/ ; /usr/bin/php FrontIntegracaoExterna.php --dir integracao_externa/sigcorp --executable integracao_externa/sigcorp/iss4_sigcorp001.php > /dev/null 2>&1

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

8.6 Configurando a integração WEBISS

8.6.1 Edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para execução da integração WEBISS
0 22 * * * cd /var/www/html/e-cidade/ ; /usr/bin/php FrontIntegracaoExterna.php --executable integracao_externa/webiss/iss4_webiss001.php > /dev/null 2>&1

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

8.7 Configurando a integração de geração das tabelas débitos

8.7.1 Para agendar a geração das tabelas débitos, edite o crontab do usuário dbseller através do comando:
[linux]# crontab -u dbseller -e

Em seguida, adicione o seguinte bloco ao final do arquivo:

# DBSeller - Agendamento do script para geração das tabelas débitos
0 20 * * * cd /var/www/html/e-cidade/integracao_externa/debitos ; ./debitos.sh &> /dev/null

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

8.7.2 Configurando a integração débitos

O script de execução da integração débitos necessita de um arquivo de configuração para ser executado.
Para criar o script de configuração, execute os comandos abaixo:

[linux]# cd /var/www/html/e-cidade/integracao_externa/debitos/libs
[linux]# cp -a debitos.conf.dist debitos.conf

Em seguida edite o arquivo através do comando:

[linux]# vim debitos.conf

Informe o valor das variáveis conforme as descrições abaixo:

# Permite definir a periodicidade com que a manutencao da tabela debitos
# sera executada. O valores permitidos sao: -1=desativa, 0=todos ou dia da semana (1=segunda, 2=terca ... 7=domingo).
#
# Exemplo:
# DEBITOS_PERIODO="7"
#
DEBITOS_PERIODO=""

# Permite definir o numero de dias no passado para manter os registros na debitos.
#
# Exemplo:
# DEBITOS_DIAS_MANTER="14"
#
DEBITOS_DIAS_MANTER=""

# Permite definir o codigo da(s) instituicao(oes) que deve(em) ser gerada debitos. Se houver
# mais de uma instituicao, os seus codigos devem ser separados por espa�o.
#
# Exemplo:
# DEBITOS_INSTITUICOES="1"
# DEBITOS_INSTITUICOES="1 3"
#
DEBITOS_INSTITUICOES=""

Atenção: Lembre-se de ajustar o caminho para o diretório do e-cidade conforme o ambiente em que foi instalado.

Glossário

Termo Significado
encoding http://en.wikipedia.org/wiki/Character_encoding
cluster http://www.postgresql.org/docs/8.2/interactive/creating-cluster.html
apt-get http://www.debian.org/doc/manuals/apt-howto
apt-get http://pt.wikipedia.org/wiki/Advanced_Packaging_Tool
vim http://www.vim.org
Firefox http://www.mozilla.org/firefox
DBSeller Sistemas http://www.dbseller.com.br
proxy http://pt.wikipedia.org/wiki/Proxy
squid http://pt.wikipedia.org/wiki/Squid

Instalando o Nota Fiscal de Serviços Eletrônica (NFS-e) a partir dos fontes no Linux

 

A Nota Fiscal de Serviços Eletrônica possui integração com entes públicos que utilizam o sistema e-Cidade, gerando cobranças automáticas no momento da emissão de guias e facilitando o processo de fiscalização. Além disso, o produto permite a integração com outros sistemas de gestão pública, visando sempre atender às necessidades dos nossos clientes.

1. Instalação do Ubuntu Server 16.04.x LTS

O Ubuntu Server é a versão do sistema operacional da Canonical voltada para servidores. Como o uso em servidores exige um tempo maior de suporte, a versão indicada para o uso com esta documentação é a Ubuntu Server 16.04.x LTS.

1.1 Obtendo a mídia de instalação

A mídia de instalação pode ser obtida diretamente do site da Canonical e gravada em CD, DVD ou pendrive. No site http://www.ubuntu.com/download/server esta disponível a versão mais recente, mas utilizaremos a versão 16.04.x LTS disponível em http://releases.ubuntu.com/xenial/ (ubuntu-16.04.2-server-amd64.iso) por questões de compatibilidade com o produto.

1.2 Instalando o Ubuntu Server 16.04.x LTS

O processo de instalação do sistema operacional não é coberto por esta documentação, mas recomendamos a instalação mínima padrão, em “pt_BR” Português do Brasil, somente com os softwares “standard system utilities” e “OpenSSH server”.

Dica: Maiores informações sobre a instalação e personalização do sistema operacional podem ser obtidas em:
https://help.ubuntu.com/16.04/serverguide/

1.3 Editando os arquivos de configuração

Durante o processo de configuração descrito nesta documentação, é necessário editar e modificar diversos arquivos de texto. Para realizar estas modificações, sugerimos a utilização do editor “nano”, mas você pode usar qualquer outro editor de texto de sua preferência.

Dica: Mais informações sobre o editor de textos “nano” podem ser obtidas em:
http://www.nano-editor.org/.

2. Instalação do PostgreSQL 9.5.x

PostgreSQL é um sistema gerenciador de banco de dados objeto relacional (SGBDOR), desenvolvido como projeto de código aberto sem custo de licença. Este é o programa que vai gerenciar e armazenar o banco de dados relacional utilizado pelo NFS-e.

Dica: Mais informações sobre o PostgreSQL podem ser obtidas em:
http://www.postgresql.org/.

2.1 Configurando o repositório

Para instalar o PostgreSQL 9.5.x e suas dependências, utilizaremos o gerenciador de pacotes apt, que nos prove as últimas atualizações dos pacotes requeridos através de um canal seguro e confiável.

2.1.1 Crie o arquivo pgdg.list através dos comandos abaixo.
[linux]$ sudo touch /etc/apt/sources.list.d/pgdg.list
[linux]$ echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

Dica: Mais informações sobre a configuração do repositório podem ser obtidas em:
https://www.postgresql.org/download/linux/ubuntu/

2.1.2 Baixe e importe a chave de assinatura do repositório através do comando:
[linux]$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv ACCC4CF8

Dica: Mais informações sobre o gerenciador de pacotes “apt” podem ser obtidas em:
https://help.ubuntu.com/16.04/serverguide/package-management.html

2.2 Ajustando o idioma

Atenção: Este procedimento só é necessário se você não instalou o sistema operacional em “pt_BR” – Português do Brasil.

[linux]$ sudo apt -y install language-pack-gnome-pt language-pack-pt-base myspell-pt myspell-pt-br wbrazilian wportuguese

2.3 Instalando o PostgreSQL 9.5.x

Para realizar a instalação do PostgreSQL 9.5.x através do gerenciador de pacotes execute os comandos:

[linux]$ sudo apt update
[linux]$ sudo apt -y install postgresql-9.5 postgresql-client-9.5 postgresql-contrib-9.5

2.4 Criando e configurando o cluster

O NFS-e utiliza encoding UTF-8 no cluster do PostgreSQL 9.5.x. Por isso vamos parar, remover e recriar o cluster quer será utilizado pela aplicação.

Atenção: O NFS-e não pode ser instalado no mesmo cluster dos demais produtos como: e-cidade, e-cidadeonline, etc. A codificação utilizada pelo NFS-e é UTF-8, enquanto que nos outros produtos é LATIN1!

Dica: Mais informações sobre a configuração do cluster:
http://www.postgresql.org/docs/9.5/static/sql-cluster.html

2.4.1 Vamos parar o cluster criado pelo processo de instalação do PostgreSQL através do comando:
[linux]$ sudo pg_dropcluster --stop 9.5 main
2.4.2 Vamos criar o novo cluster do banco de dados como LATIN1 usando o comando:
[linux]$ sudo pg_createcluster -u postgres -g postgres -e UTF8 --locale="pt_BR.UTF-8" --lc-collate="pt_BR.UTF-8" 9.5 nfse
2.4.3 Para permitir o acesso de qualquer local ao banco de dados é necessário modificar o arquivo /etc/postgresql/9.5/nfse/pg_hba.conf usando o comando:
[linux]$ sudo nano /etc/postgresql/9.5/nfse/pg_hba.conf

Localize e altere as linhas do arquivo do arquivo de configuração que não estão comentadas (# na frente da linha), substituindo os valores correspondentes por trust, conforme a tabela abaixo.

local all postgres
local all all
host all all 127.0.0.1/32
host all all ::1/128
2.4.4 Para a correta integração com o NFS-e, é necessário alterar algumas configurações do cluster criado através do comando:
[linux]$ sudo nano /etc/postgresql/9.5/nfse/postgresql.conf

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere # do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

listen_addresses = '*'
max_connections = 20
2.4.5 Inicie o servidor PostgreSQL através do comando:
[linux]$ sudo systemctl start postgresql.service
2.4.6 Verifique o resultado da configuração usando o comando:
[linux]$ psql -U postgres -h localhost -l

A saída do comando deve ser parecida com os valores abaixo.

   Nome    |   Dono   | Codificação |     Collate      |      Ctype       | Privilégios de acesso
-----------+----------+-------------+------------------+------------------+-----------------------
 postgres  | postgres | UTF8        | pt_BR.UTF-8      | pt_BR.UTF-8      |
 template0 | postgres | UTF8        | pt_BR.UTF-8      | pt_BR.UTF-8      | =c/postgres          +
           |          |             |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8        | pt_BR.UTF-8      | pt_BR.UTF-8      | =c/postgres          +
           |          |             |                  |                  | postgres=CTc/postgres

2.5 Criando a estrutura de banco de dados para o NFS-e

Vamos criar os usuários necessários para o funcionamento do NFS-e através dos comandos:

Atenção: Em ambientes de produção, nunca utilize senhas que tenham o mesmo nome da conta de usuário. Mais informações sobre segurança de senhas podem ser obtidas em:
http://cartilha.cert.br/senhas/.

psql -U postgres -c "CREATE ROLE nfse WITH SUPERUSER LOGIN PASSWORD 'nfse';"

Em seguida, utilize o comando abaixo para criar o banco de dados:

psql -U postgres -c "CREATE DATABASE nfse OWNER nfse;"

3. Instalação do Apache

Apache é o servidor web mais usado em sistemas Linux. Servidores web são usados para servir páginas Web que, normalmente, são solicitadas pelos computadores clientes através de navegador, como o Firefox, Chromium, etc.

Dica: Mais informações sobre o Apache podem ser obtidas em:
http://www.apache.org/.

3.1 Instalando o Apache

Para realizar a instalação do servidor web Apache através do gerenciador de pacotes, execute o comando:

[linux]$ sudo apt -y install apache2

3.2 Configurando a diretiva VirtualHost

3.2.1 Faça uma cópia de segurança do arquivo de configuração padrão, que é criado pelo Apache durante o processo de instalação através do comando:
[linux]$ sudo cp -a /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.dist
3.2.2 Para a correta integração com o NFS-e, é necessário adicionar alguns parâmetros ao arquivo de configuração do VirtualHost através do comando:
[linux]$ sudo nano /etc/apache2/sites-available/000-default.conf

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Adicione as linhas que não existirem e edite as existentes dentro do bloco VirtualHost, conforme é exibido abaixo.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/nfse/public

  SetEnv APPLICATION_ENV "production"
  SetEnv no-gzip 1

    <Directory /var/www/html/nfse/public>
        DirectoryIndex index.php
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error-nfse.log
    CustomLog ${APACHE_LOG_DIR}/access-nfse.log combined

</VirtualHost>

Dica: Mais informações sobre o VirtualHost podem ser obtidas em:
http://httpd.apache.org/docs/current/vhosts/examples.html.

4. Instalação do PHP 5.6 e PHP-FPM

PHP é uma linguagem interpretada livre, usada originalmente apenas para o desenvolvimento de aplicações presentes e atuantes no lado do servidor, capazes de gerar conteúdo dinâmico na World Wide Web.

O PHP-FPM é uma alternativa ao PHP FastCGI com muitas funcionalidades voltadas a sites com grande número de acessos e carga.

Dica: Mais informações sobre o PHP e PHP-FPM podem ser obtidas em:
http://www.php.net/ e http://php-fpm.org/

4.1 Configurando o repositório

Para instalar o PHP 5.6 e suas dependências, utilizaremos o gerenciador de pacotes apt, que nos prove as últimas atualizações dos pacotes requeridos através de um canal seguro e confiável.

4.1.1 Instale o repositório PPA através dos comandos abaixo.
[linux]$ sudo apt-add-repository -y ppa:ondrej/php
[linux]$ sudo apt update

4.2 Instalando o PHP 5.6 e o PHP-FPM

Para realizar a instalação do PHP 5.6 através do gerenciador de pacotes, execute o comando:

[linux]$ sudo apt -y install php5.6 php5.6-bcmath php5.6-bz2 php5.6-cli php5.6-common php5.6-curl php5.6-gd php5.6-interbase php5.6-json php5.6-mbstring php5.6-mcrypt php5.6-pgsql php5.6-soap php5.6-sqlite3 php5.6-xml php5.6-xmlrpc php5.6-zip php5.6-fpm

4.3 Configurando o PHP 5.6 e o PHP-FPM

4.3.1 Habilitar as dependências de módulos através do comando:
[linux]$ sudo a2enmod proxy_fcgi setenvif rewrite
4.3.2 Habilitar as dependências de configuração através do comando:
[linux]$ sudo a2enconf php5.6-fpm
4.3.3 Configurar o arquivo de log do PHP-FPM através dos comandos:
[linux]$ sudo touch /var/log/php_errors.log
[linux]$ sudo chown www-data.www-data /var/log/php_errors.log
4.3.4 Para a correta integração com o NFS-e, é necessário alterar algumas configurações do PHP através do comando:
[linux]$ sudo nano /etc/php/5.6/fpm/php.ini

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere ; do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

short_open_tag = On
session.gc_maxlifetime = 7200
date.timezone = "America/Sao_Paulo"

Também é necessário alterar o arquivo de configuração utilizado pelo php-cli através do comando:

[linux]$ sudo nano /etc/php/5.6/cli/php.ini

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere ; do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

short_open_tag = On
date.timezone = "America/Sao_Paulo"
4.3.5 Reinicie o serviço do PHP-FPM usando o comando:
[linux]$ sudo systemctl restart php5.6-fpm.service

5. Instalação do NFS-e

5.1 Obtendo o pacote de instalação

O pacote de instalação pode ser obtido diretamente do site do Portal do Software Público. No endereço da comunidade do e-cidade (https://softwarepublico.gov.br/social/e-cidade) estão disponíveis as últimas versões e suas atualizações. Como estamos realizando uma nova instalação, você deve baixar o pacote completo, um exemplo de nome do pacote seria: e-cidadeonline2.completo.Vxxxxxx.tar.bz2.

5.2 Configurando o servidor

5.2.1 Vamos criar um usuário administrativo para o NFS-e, neste exemplo criaremos o usuário dbseller através do comando:
[linux]$ sudo useradd -d /home/dbseller -g www-data -G sudo,adm,cdrom,dip,plugdev -k /etc/skel -m -s /bin/bash dbseller
5.2.2 Em seguida, vamos definir uma senha para este novo usuário usando o comando:
[linux]$ sudo passwd dbseller

Dica: Neste exemplo, defina a senha como o mesmo nome de usuário, como “dbseller”.

Atenção: Em ambientes de produção, nunca utilize senhas que tenham o mesmo nome da conta de usuário. Mais informações sobre segurança de senhas podem ser obtidas em:
http://cartilha.cert.br/senhas/.

5.2.3 Também devemos corrigir a máscara de criação de arquivos modificando os arquivos através dos comandos:
[linux]$ sudo nano /etc/login.defs

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere a linha do arquivo do arquivo de configuração, descomentando-a se necessário (remover o caractere # do início da linha), substituindo o valor correspondente conforme a indicação abaixo.

UMASK           002

Em seguida, edite o arquivo de configuração de variáveis do apache com o comando abaixo:

[linux]$ sudo nano /etc/apache2/envvars

Adicione a linha abaixo no final do arquivo.

umask 002

5.3 Configurando o acesso do webservice no e-cidade

O NFS-e se comunica com o e-cidade através de um webservice, para que essa comunicação seja possível, é necessário liberar o acesso no e-cidade.

5.3.1 Liberando o acesso ao webservice do e-cidade

Após realizar o login no e-cidade, acesse:

  1. Selecione a instituição da prefeitura;
  2. Selecione o módulo DB:Configuração;
  3. Selecione o módulo Configuração;
  4. Selecione o menu Cadastros;
  5. Selecione o menu Cadastro de Acessos ao Sistema;
  6. Selecione o menu Inclusão;

Em seguida, preencha os campos conforme as instruções abaixo:

  1. No campo Data Início, selecione a data de hoje;
  2. No campo Hora Início, informe o valor 08:00;
  3. No campo Data Final, selecione uma data no futuro, como o valor 31/12/2099;
  4. No campo Hora Final, informe o valor 08:00;
  5. No campo Observação, informe o valor Acesso ao webservice pelo NFS-e;
  6. Clique no botão Incluir.

Após incluir o acesso, clique na aba Usuário e selecione no campo Cod. Usuário o usuário que será utilizado para comunicação com o webservice, em seguida, clique no botão Alterar.

Após incluir o usuário, clique na aba IP/Máscara e informe o valor no campo Máscara do IP o endereço IP do servidor do NFS-e que será utilizado para comunicação com o webservice do e-cidade, em seguida, clique no botão Alterar.

5.4 Instalando o NFS-e

5.4.1 Descompacte o pacote do NFS-e através do comando:
[linux]$ tar xjf e-cidadeonline2.completo.Vxxxxxx.tar.bz2
5.4.2 Copie o diretório do NFS-e para o diretório raiz do Apache usando o comando:
[linux]$ sudo cp -r e-cidadeonline2.completo.Vxxxxxx /var/www/html/nfse

5.5 Configurando o NFS-e

5.5.1 Crie o arquivo de configuração da aplicação através do comando:
[linux]$ sudo cp /var/www/html/nfse/application/configs/application.ini.dist /var/www/html/nfse/application/configs/application.ini

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/application/configs/application.ini

Em seguida, atualize as configurações conforme o exemplo abaixo.

...
doctrine.connectionParameters.dbname                    = "nfse"
doctrine.connectionParameters.host                      = "localhost"
doctrine.connectionParameters.password                  = "nfse"
doctrine.connectionParameters.port                      = "5432"
doctrine.connectionParameters.user                      = "nfse"
// Verifique a versão do sistema em /var/www/html/nfse/versao.txt
ecidadeonline2.versao                                   = "V011114"
resources.mail.transport.host                           = "smtp.exemplo.com"
resources.mail.transport.password                       = "nfse@exemplo.com"
resources.mail.transport.port                           = "587"
resources.mail.transport.username                       = "nfse@exemplo.com"
resources.mail.defaultFrom.email                        = "nfse@exemplo.com"
resources.mail.defaultFrom.name                         = "NFS-e Nome da Prefeitura"
settings.application.cache                              = "011114"
webservice.client.uri                                   = "http://url_acesso_ecidade/e-cidade/"
webservice.client.url                                   = "http://url_acesso_ecidade/e-cidade/"
webservice.client.location                              = "http://url_acesso_ecidade/e-cidade/webservices/requisicao.webservice.php"
// md5 do ID do usuário selecionado na regra de acesso do e-cidade
webservice.cliente.user                                 = "c4ca4238a0b923820dcc509a6f75849b"
...
5.5.2 Crie os arquivos de configuração do webservice através dos comandos:
[linux]$ sudo cp /var/www/html/nfse/application/configs/webservice-ecidade.ini.dist /var/www/html/nfse/application/configs/webservice-ecidade.ini

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/application/configs/webservice-ecidade.ini

Em seguida, atualize as configurações conforme o exemplo abaixo.

...
DB_id_usuario          = 'Id do usuário que criou a regra de acesso';
DB_login               = 'Login o usuário que criou a regra de acesso';
DB_ip                  = 'IP de acesso ao servidor do E-cidade';
SERVER_ADDR            = 'IP local do servidor do E-cidade';
SERVER_PORT            = 'Porta local do servidor do E-cidade';
DOCUMENT_ROOT          = 'Diretório raiz do E-cidade ex: /var/wwww';
SERVER_ADMIN           = 'e-mail do administrador do servidor web';
PHP_SELF               = 'webservices/requisicao.webservice.php';
HTTP_HOST              = 'Nome do host do E-cidade ex localhost';
...
[linux]$ sudo cp /var/www/html/nfse/public/webservice/wsdlValidations/producao/modelo1.wsdl.dist /var/www/html/nfse/public/webservice/wsdlValidations/producao/modelo1.wsdl

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/public/webservice/wsdlValidations/producao/modelo1.wsdl

Em seguida, altere todos os valores {URL}, pela URL do NFS-e conforme o exemplo abaixo.

...
xmlns:ii="http://{URL}/webservice/index/producao"
...

Um exemplo de como ficaria a configuração, se fosse configurado um nome de domínio no VirtualHost:

...
xmlns:ii="http://nfse.prefeitura.gov.br/webservice/index/producao"
...

Atenção: Existem diversas linhas que devem ser substituídas, você deve verificar todo o arquivo.

Atenção: Utilize a mesma URL configurada no VirtualHost do apache, ou o endereço IP do servidor.

[linux]$ sudo cp /var/www/html/nfse/public/webservice/wsdlValidations/homologacao/modelo1.wsdl.dist /var/www/html/nfse/public/webservice/wsdlValidations/homologacao/modelo1.wsdl

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/public/webservice/wsdlValidations/homologacao/modelo1.wsdl

Em seguida, altere todos os valores {URL}, pela URL do NFS-e conforme o exemplo abaixo.

...
xmlns:ii="http://{URL}/webservice/index/homologacao"
...

Um exemplo de como ficaria a configuração, se fosse configurado um nome de domínio no VirtualHost:

...
xmlns:ii="http://nfse.prefeitura.gov.br/webservice/index/homologacao"
...

Atenção: Existem diversas linhas que devem ser substituídas, você deve verificar todo o arquivo.

Atenção: Utilize a mesma URL configurada no VirtualHost do apache, ou o endereço IP do servidor.

[linux]$ sudo cp /var/www/html/nfse/public/webservice/wsdlValidations/integracao/modelo1.wsdl.dist /var/www/html/nfse/public/webservice/wsdlValidations/integracao/modelo1.wsdl

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/public/webservice/wsdlValidations/integracao/modelo1.wsdl

Em seguida, altere todos os valores {URL}, pela URL do NFS-e conforme o exemplo abaixo.

...
xmlns:ii="http://{URL}/webservice/index/integracao"
...

Um exemplo de como ficaria a configuração, se fosse configurado um nome de domínio no VirtualHost:

...
xmlns:ii="http://nfse.prefeitura.gov.br/webservice/index/integracao"
...

Atenção: Existem diversas linhas que devem ser substituídas, você deve verificar todo o arquivo.

Atenção: Utilize a mesma URL configurada no VirtualHost do apache, ou o endereço IP do servidor.

5.5.3 Ajuste as permissões dos diretórios através dos comandos:
[linux]$ sudo chown -R dbseller.www-data /var/www/html/nfse
[linux]$ sudo chmod -R 775 /var/www/html/nfse

Em seguida, limpe qualquer cache existente através do comando:

[linux]$ sudo rm -rf /var/www/html/nfse/application/data/Proxy/*
5.5.4 Faça a carga do schema do NFS-e através do comando:
[linux]$ cd /var/www/html/nfse
[linux]$ php bin/ruckus.php db:migrate
5.5.5 Reinicie o serviço do Apache usando o comando:
[linux]$ sudo systemctl restart apache2.service

5.6 Acessando o NFS-e

Após finalizar os procedimentos de instalação e configuração, abra um navegador e acesse o NFS-e através do endereço IP ou nome do servidor. EX: http://nfse.prefeitura.gov.br/, utilize como nome de usuário admin, e e como senha 123456.

Atenção: Altere a senha ao realizar o primeiro acesso. Mais informações sobre segurança de senhas podem ser obtidas em: http://cartilha.cert.br/senhas/.

Glossário

Termo Significado
encoding http://en.wikipedia.org/wiki/Character_encoding
cluster http://www.postgresql.org/docs/8.2/interactive/creating-cluster.html
apt-get http://www.debian.org/doc/manuals/apt-howto
apt-get http://pt.wikipedia.org/wiki/Advanced_Packaging_Tool
nano http://www.nano-editor.org
Firefox http://www.mozilla.org/firefox
DBSeller Sistemas http://www.dbseller.com.br
proxy http://pt.wikipedia.org/wiki/Proxy
squid http://pt.wikipedia.org/wiki/Squid

Apple Watch detecta diabetes em usuários com 85% de precisão

Um estudo DeepHeart realizado entre a Cardiogram e UCSF revelou algo interessante: o Apple Watch de 462 usuários detectou que estes possuíam diabetes através do sensor de batimentos cardíacos. Os usuários nos quais o relógio detectou a diabetes já sabiam de sua condição – e a precisão foi de 85%.

Na pesquisa, foram analisados dados de 14 mil Apple Watches. O sensor é do mesmo tipo dos utilizados em outros aparelhos do tipo (que, supostamente, possuem esta mesma capacidade de detecção). Um estudo do Framingham Heart Study publicado em 2015 já havia informado que a frequência dos batimentos cardíacos pode predizer de forma significante a diabetes e hipertensão.

O CEO da Cardiogram, Brandon Ballinger e seus colegas já haviam feito um movimento semelhante ao detectar um ritmo cardíaco normal com 97% de eficiência a partir de um Apple Watch. A apneia do sono e hipertensão também foram detectadas, com 90% e 82% de precisão, respectivamente.

Agora, Ballinger e seus colegas pretendem analisar outras doenças a partir de sensores de batimentos cardíacos. Esse é um exemplo de como a tecnologia pode impactar positivamente em nossas vidas, podendo servir de alarme a usuários desavisados, além de trazer dados consistentes sobre sua saúde.

É claro que a análise feita pelo aparelho não substitui uma consulta ou exame médico, mas é um bom ponto de partida para prestar atenção em possíveis anormalidades. E claro, se você recebe um aviso para investigar, este pode ser um excelente ponto de partida para você começar a tratar e evitar problemas maiores.

pesquisa VIGITEL (Vigilância de fatores de risco e proteção para doenças crônicas por inquérito telefônico) divulgada em abril do ano passado mostrou que teve um aumento de 61,8% de diabetes no país. O dado alarmante comprova a necessidade de diagnóstico e um acompanhamento ainda mais próximo desta condição, o que pode ser ainda mais facilitado pela tecnologia.

Se você deseja saber mais sobre como a tecnologia está impactando na saúde – geralmente através de empresas e startups do setor, as healthtechs -, leia o nosso e-book gratuito e participe da HealthTech Conference.

 

Fonte:  https://conteudo.startse.com.br/tecnologia-inovacao/taina/applewatch-detectou-diabetes-usuarios-85-precisao-healthtech-conference/?utm_campaign=startse_news_16_-_09022018&utm_medium=email&utm_source=RD+Station

Melhorando o desempenho do MongoDB com recomendações de índices

Hoje trazendo um conteúdo originalmente escrito por Jay Gordon, vou falar sobre o novo recurso de recomendação de índices agora disponível no MongoDB Atlas.

Além de uma boa modelagem de dados, existem alguns processos que as equipes responsáveis pela otimização do desempenho da consulta podem aproveitar: procurando COLLSCANS em logs, analisando explain results, ou confiando em ferramentas de terceiros.

O MongoDB Atlas, serviço de banco de dados totalmente gerenciado, ajuda você a resolver problemas de desempenho com um maior nível de facilidade, fornecendo ferramentas para garantir que seus dados sejam acessados da forma mais eficiente possível. Esse artigo mostrará uma visão geral básica sobre como acessar o MongoDB Atlas Performance Advisor, uma ferramenta que analisa suas consultas por até duas semanas e fornece recomendações de índices quando necessário.

Começando

Este pequeno tutorial utiliza os seguintes recursos:

  • Um data set de demonstração gerado com o mgodatagen
  • Um cluster no MongoDB Atlas (o Performance Advisor está disponível para M10 ou maior)
  • MongoDB shell instalado (para criar índices)

Meu banco de dados tem dois milhões de documentos em duas coleções separadas:

Revisando o Performance Advisor

O Performance Advisor monitora as consultas com execução lenta (qualquer coisa que leve mais de 100 milissegundos para executar) e sugere novos índices para melhorar o desempenho da consulta.

Para acessar esta ferramenta, vá até o painel de controle do Atlas e clique no nome do seu cluster. Você encontrará “Performance Advisor” no topo.

 

Clique no link e você será levado para a página onde vai ver recomendações relevantes de índice, com base no período de tempo fixado no topo da página.

 

Neste exemplo, vou analisar o desempenho das minhas consultas nas últimas 24 horas. O Performance Advisor me fornece algumas recomendações sobre como melhorar a velocidade das consultas lentas:

 

Parece que a coleção test com o campo “name” pode usar um índice. Podemos ver as mudanças específicas a serem feitas clicando no botão “More Info”.

Posso copiar o conteúdo desta recomendação e colar no meu MongoDB Shell para criar o índice recomendado. Você notará que uma opção especial, {background: true}, é passada com o comando createIndex. O uso deste comando garante que a criação do índice não bloqueie nenhuma operação. Se você estiver construindo novos índices em ambientes de produção, recomendo que você leia mais sobre as operações de construção de índice.

 

 

Agora que o índice recomendado foi criado, posso rever o desempenho da minha aplicação e ver se ele atende aos requisitos dos meus usuários. Os alertas do Atlas que recebi anteriormente foram resolvidos, o que é um bom sinal:

Perda de performance em consultas desindexadas prejudicam a experiência do usuário em sua aplicação, o que pode resultar na redução do engajamento ou atrito com clientes. O Performance Advisor no MongoDB Atlas oferece uma maneira simples de garantir que você aproveite ao máximo os recursos provisionados em seu cluster.

Para começar, entre para o MongoDB Atlas e implemente um cluster em minutos.

É isso, espero que tenham gostado! Fiquem à vontade para compartilhar e comentar, se quiser conferir o artigo original em inglês clique aqui.

Até mais!

 

 

Fonte: https://codigosimples.net/2018/02/07/melhorando-o-desempenho-do-mongodb-com-recomendacoes-de-indices/

 

 

 

Aprenda a instalar e usar o EVE-NG para emular roteadores da MikroTik

Nesse vídeo iremos ensinar como instalar e usar o EVE-NG para emular roteadores da MikroTik.

O EVE-NG é um emulador de redes que está ganhando cada vez mais usuários.

Esse novo emulador possui várias vantagens em relação ao GNS3, abaixo listamos algumas delas:
– Melhor performance de CPU devido ao uso do KVM.
– Pode ser usado em uma máquina virtual.
– Fácil instalação e poucos problemas.

Brasileiro desenvolve nova arquitetura para processadores quânticos

Quando se pensa no conceito de processadores quânticos, logo vem à cabeça um computador ultramoderno, com altíssima tecnologia. Porém, eles ainda não são acessíveis, já que o processo de produção ainda é extremamente difícil e caro.

Porém, pesquisadores australianos e o brasileiro Guilherme Tosi, que trabalham na University of New South Wales, criaram um novo conceito para a construção desses chips, que podem ser desenvolvidos a partir do silício, sendo muito próximo ao uso já existente em outros dispositivos.

O processador quântico de silício funciona em torno de qubits “flip-flop”, ou seja, afastam o elétron do núcleo e usam os eletrodos na parte superior. Isso significa que eles podem ser controlados com sinais elétricos, ao contrário dos conduzidos magneticamente – como acontece hoje.

 

Diferente dos circuitos desenvolvidos pela IBM e pela Google, o novo conceito é construído a uma distância em nanômetros, de maneira que continuem entrelaçados, o que torna o processo mais fácil na hora da produção, e sem interferir no estado dos qubits.

Por sua vez, os circuitos feitos pelas gigantes da tecnologia também contam com a facilidade de condução dos dados, porém podem ter um tamanho maior do que se imagina.

Apesar de ser uma ideia promissora, ela ainda está no papel. Os pesquisadores envolvidos no projeto já estão iniciando a primeira empresa de computação quântica da Austrália e, caso a teoria se aplique, em breve teremos supercomputadores quânticos acessíveis.

 

Fonte: https://www.tecmundo.com.br/ciencia/122183-brasileiro-desenvolve-nova-arquitetura-processadores-quanticos.htm

 

ABB lança software de otimização de ativos para suportar transformação digital

ABB lança software de otimização de ativos para suportar transformação digital

A ABB lançou seu pacote de soluções de software Ability Ellipse na DistribuTECH US, para ajudar os utilitários a maximizar o desempenho dos ativos e acelerar sua rota para a digitalização. 

ABB Ability Ellipse tem como objetivo oferecer uma abordagem entre empresas para gerenciamento de ciclo de vida de ativos conectado. O conjunto de software foi projetado para permitir que os utilitários de energia elétrica otimizem a utilização de ativos, reduzam os custos de manutenção e reduzam as falhas de equipamentos e as quedas do sistema. O número de novos ativos que entram na grade está explodindo – desde contadores inteligentes e switches, até fontes de energia distribuídas, como energia solar e eólica, para estações de carregamento de veículos elétricos.

A nova solução ABB Ability Ellipse oferece aos serviços públicos uma abordagem pró-ativa para manutenção preditiva que combina um sistema de gerenciamento de ativos com coleta e análise de dados de desempenho e uma solução de gerenciamento de força de trabalho para despachar equipes e manter ativos críticos. Especificamente, a solução unifica a funcionalidade das soluções da ABB para gerenciamento de ativos corporativos (EAM), WFM e Asset Performance Management (APM).

“Entendemos os desafios que as empresas de serviços elétricos enfrentam ao gerar maiores níveis de desempenho em uma rede cada vez mais complexa”, disse Massimo Danieli, diretor do negócio de Grid Automation da ABB na divisão Power Grids da empresa. “Com a ABB Ability Ellipse, os utilitários agora podem usar uma solução única e simplificada para gerenciamento, manutenção e monitoramento de ativos que permitem uma rede mais forte, mais inteligente e mais verde”.

Como o Gerenciamento de desempenho de ativos torna-se um ponto focal para transformar a grade moderna, é de vital importância que os serviços públicos gerenciem seus ativos e mão de obra com uma estratégia coesa.

Para informações adicionais:

ABB

Fonte:  https://www.renewableenergymagazine.com/energy_saving/abb-launches-asset-optimisation-software-to-support-20180124

Padrão de interface de software do microcontrolador Cortex

Padrão de interface de software do microcontrolador Cortex

O CMSIS permite um suporte de dispositivo consistente e interfaces de software simples para o processador e seus periféricos, simplificando a reutilização de software, reduzindo a curva de aprendizado para desenvolvedores de microcontroladores e reduzindo o tempo de mercado para novos dispositivos.


Visão geral

A partir do CMSIS-CORE, uma camada de abstração de hardware independente do fornecedor para os processadores Cortex-M, o CMSIS expandiu-se para áreas como o gerenciamento de componentes de software e as interfaces de depurador de referência. A criação de software é um fator de custo importante na indústria incorporada. A padronização das interfaces de software em todos os produtos do fornecedor de silício Cortex-M, especialmente ao criar novos projetos ou a migrar o software existente para um novo dispositivo, significa redução significativa de custos.

O CMSIS é definido em estreita cooperação com vários fornecedores de silício e software e fornece uma abordagem comum para a interface para periféricos, sistemas operacionais em tempo real e componentes de middleware. Isso simplifica a reutilização de software, reduzindo a curva de aprendizado para novos desenvolvedores de microcontroladores e reduzindo o tempo de colocação no mercado para dispositivos.


Componentes do CMSIS

CMSIS-CORE: inicialização consistente do sistema e acesso periférico

A inicialização do sistema, o acesso ao núcleo do processador e as definições periféricas são essenciais para cada aplicativo incorporado. O CMSIS-CORE padronizado é implementado para mais de 3900 dispositivos diferentes e facilita a introdução de um novo dispositivo ou migra software em microcontroladores.

CMSIS versão 5

O CMSIS é desenvolvido publicamente no GitHub. A última versão pode ser baixada aqui:

CMSIS-RTOS: Execução determinista de software em tempo real

Um conceito de super-loop só é adequado para aplicativos embutidos simples. Os microcontroladores Cortex-M são projetados para sistemas operacionais em tempo real que oferecem controle de recursos e tempo.

O CMSIS-RTOS é uma API que permite camadas de software consistentes com componentes de middleware e biblioteca. O CMSIS-RTOS RTX é executado em todos os dispositivos Cortex-M e é a implementação de referência comprovada que é fácil de aprender e usar.

CMSIS-DSP: implementação rápida de processamento de sinal digital

O desenvolvimento de um sistema de processamento de sinais digitais em tempo real (DSP) não é trivial, já que os algoritmos DSP dependem fortemente de operações matemáticas complexas que são mesmo críticos para o tempo.

A biblioteca CMSIS-DSP é uma rica coleção de funções DSP que o Arm optimizou para os vários núcleos de processadores Cortex-M. O CMSIS-DSP é amplamente utilizado na indústria e também permite a geração de código C otimizada a partir de várias ferramentas de terceiros.

CMSIS-Driver: interfaces periféricas genéricas para middleware e código de aplicativo

Interfacing microcontroller periféricos com middleware ou código genérico de aplicação pode ser um desafio, pois cada dispositivo é diferente. As interfaces CMSIS-Driver prontas para usar estão disponíveis para muitas famílias de microcontroladores e evitam a portabilidade do driver pesada e demorada.

CMSIS-Pack: acesso fácil a componentes de software reutilizáveis

Anteriormente, os módulos de software eram difíceis de integrar, pois os arquivos de origem e de cabeçalho tinham requisitos pouco claros, documentação inconsistente ou informações de licença perdidas.

Como o CMSIS-Pack define a estrutura de um pacote de software que contém componentes de software, esses problemas são abordados. Os componentes de software são facilmente selecionáveis ​​e todas as dependências de outros softwares são destacadas.

CMSIS-SVD: visão consistente para dispositivos e periféricos

Para cada microcontrolador suportado, os depuradores podem fornecer visualizações detalhadas aos periféricos do dispositivo que exibem o estado do registro atual.

Os arquivos CMSIS-SVD permitem essas visualizações e garantem que a exibição do depurador coincida com a implementação real dos periféricos do dispositivo.

CMSIS-DAP: conectividade para hardware de avaliação de baixo custo

Planos de desenvolvimento baratos estão disponíveis em muitos fornecedores de microcontroladores. Freqüentemente, uma unidade de depuração de baixo custo está incluída, mas interfaces diferentes precisam de uma configuração de ferramenta específica.

O CMSIS-DAP é uma interface padronizada para a Porta de Acesso de Depuração Cortex (DAP) e é usado por muitos kits de inicialização e é suportado por vários depuradores.

CMSIS-NN: kernels de rede neural eficiente

As soluções baseadas em rede neural estão se tornando cada vez mais populares para aplicações de aprendizado de máquinas incorporadas.

O CMSIS-NN é uma coleção de kernels de redes neurais eficientes desenvolvidos para maximizar o desempenho e minimizar a pegada de memória de redes neurais nos núcleos de processadores Cortex-M.

 

Fonte:  https://developer.arm.com/embedded/cmsis

https://developer.arm.com/products/system-design/development-boards

https://developer.arm.com/products/system-design/development-boards/logictile-express

https://community.arm.com/b/carlosdelfino/posts/facilitando-o-desenvolvimento-para-a-proxima-geracao-de-embarcados-inteligentes-e-conectados

EFEITO PARALAX DE MANEIRA SIMPLES

No exemplo abaixo, são três divs, porém, apenas a primeira e última estarão recebendo o efeito de parallax, por isso é adicionado a classe .prlx, mas as configurações serão feitas normalmente na folha de estilo CSS e o script será sempre fixo no seu js.

<div id="top" class="prlx">
</div>

<div id="mid">
</div>

<div id="bot" class="prlx">
</div>

style.css:

#top,
#mid,
#bot {
  width: 100%;
  padding: 20px 0;
}
        
#top {
  background: url("../img/background.jpg");
  height: 1200px;
}
        
#mid {
  background: #f0494d;
  height: 460px;
}
        
#bot {
  background: url("../img/background.jpg");
  height: 1200px;
}

javascript.js

$('.prlx').each(function() {
    var $obj = $(this);
    $obj.css('background-position', '50% 0');
    $obj.css('background-attachment', 'fixed');
    if ($(window).width() > 940) {
        $obj.css('background-size', '100%');
        $(window).scroll(function() {
            var offset = $obj.offset();
            var yPos = -($(window).scrollTop() - offset.top) / 10;
            var bgpos = '50% ' + yPos + 'px';
            $obj.css('background-position', bgpos);
        });
    }
});

http://matheusp.com.br/blog/tutoriais/efeito-parallax-sem-plugins-apenas-com-html-css-e-javascriptFonte: 

Como ver quais sites o seu computador acessa secretamente

Dos computadores que você tem em casa, quantos deles estão conectados na internet? Praticamente todas as máquinas que saíram das lojas nos dois últimos anos, seja notebook ou PC, estão ligadas à rede mundial de computadores, o que faz com elas se tornem alvo de usuários mal-intencionados.

Existem diversos programas que ajudam a proteger sua máquina dessas pragas, mas nem sempre eles são suficientes para impedir que elas invadam o computador. Outro problema bem comum é que os aplicativos de proteção não conseguem detectar 100% dos invasores que batem à porta do usuário.

Um tipo bem comum de spyware é aquele que não tem a intenção de roubar dados, mas sim de utilizar o computador como zumbi, utilizando a sua conexão com a internet para hackear sites e serviços disponíveis na rede. Mas existe uma forma de monitorar a sua conexão com a internet e ver todo e qualquer site ou endereço de IP que é acessado por meio do seu roteador.

 

Como fazer?

O primeiro passo para descobrir quais serviços estão sendo acessados do seu computador é iniciar o prompt de comandos do Windows com os privilégios de administrador. Para isso, abra o Menu Iniciar e escreva “cmd” na caixa de pesquisa. Em seguida, clique com o botão direito do mouse sobre a opção encontrada e escolha o item “Executar como administrador”.

O “-a” do comando significa que todas as conexões e portas serão ouvidas e armazenadas no arquivo; o “-b” mostrará quais aplicações estão criando os caminhos para acesso à internet; o “-f” gravará os DNS completos de cada conexão, para facilitar a compreensão dos dados. Caso queira que apenas os endereços IPs sejam gravados, coleque o -n no lugar do “-f”, ficando ”-abn”. O valor “5” indica o intervalo de tempo, em segundos, entre uma leitura e outra.

Não será mostrado nada na tela enquanto o comando estiver sendo executado. Depois de alguns minutos, pressione Ctrl+C para encerrar a leitura das conexões e finalizar a gravação dos dados no arquivo. Agora é só abrir o arquivo de? texto criado e começar a investigar quais são os serviços acessados a partir do seu computador.

Como interpretar os resultados?

Ao abrir o arquivo activity.txt você poderá notar que o conteúdo está dividido em quatro colunas principais: “Proto”, “Endereço local”, “Endereço externo” e “Estado”. A primeira indica o protocolo de comunicação utilizado pelo processo. A segunda e a terceira mostram os endereços IP utilizados e a última coluna exibe a atividade que estava sendo realizada no momento da leitura.

É na terceira coluna que os esforços serão concentrados, pois ela indica as URLs e endereços IP externos acessados utilizando a sua máquina. Uma maneira fácil de encontrar alguma atividade suspeita é olhar o nome dos processos, apresentados entre colchetes ao longo do documento.

Ao notar um processo estranho, verifique o endereço externo que ele utiliza. Se mesmo assim você não conseguir identificar do que se trata, uma boa saída é procurar pelo nome da atividade no Google. Se for algo comum nos computadores, certamente há algum site explicando do que se trata.

Outra forma de descobrir o serviço acessado é utilizando algum serviço que rastreia endereços IP. Duas boas opções são o IP Address Tracer e o Global Whois Search. Nos dois casos, você só precisa copiar o IP nos campos de pesquisa e aguardar até que a busca seja finalizada e os dados comecem a aparecer na tela.

 

Outras ferramentas

Existem diversos aplicativos que ajudam a monitorar as portas e conexões abertas em um computador. O CurrPorts é um dos mais usados pelos usuários com um pouco mais de experiência, pois é relativamente fácil de usar e a interpretação dos resultados exibidos na tela se dá de forma mais natural.

Há ainda o Wireshark, mais indicado para quem possui uma rede de computadores em casa, pois ele também analisa a troca de mensagens entre as máquinas conectadas pelo hub (ou switch). Assim, caso algum PC esteja infectado e a invasão acabe se propagando pela rede, você consegue detectá-la sem maiores problemas.

 

O que faço depois?

Se o resultado das investigações apontarem que o processo é, de fato, um invasor, é preciso tomar algumas providências para que ele seja eliminado do computador e não utilize mais a sua conexão. A maneira mais simples de fazer isso é utilizando aplicativos de segurança, como anti-spywares, que varrem a máquina em busca de possíveis sanguessugas de internet.

 

 

Caso as ferramentas não tenham efeito algum sobre o possível invasor, uma alternativa é buscar na rede mundial de computadores por injeções específicas para determinada praga. O Google sempre ajuda nessas horas. É muito comum as empresas de segurança lançarem soluções gratuitas para combater apenas determinadas ameaças.

…..

Agora que você já sabe como usar o “netstat” e viu como é fácil interpretar os dados e utilizar as informações fornecidas, comece as investigações em seu computador para descobrir se não há nenhum processo rodando escondido e que esteja prejudicando a sua conexão. Depois não se esqueça de voltar aqui para deixar um comentário contando a sua experiência.

 

Fonte: https://www.tecmundo.com.br/seguranca-de-dados/16199-como-ver-quais-sites-o-seu-computador-acessa-secretamente.htm

Learn CI: Teste Automatizado e Publicação em 10 min

Aqui está um modelo para iniciar e executar testes automatizados e publicação de código JS cliente ou servidor

Há muitas dependências por aí. Claramente, o mundo precisa de mais testes automatizados. Mas, precisamos nos instalar rapidamente.

Objetivos:
deve ser livre, como em dinheiro.
Deve ter pequena curva de aprendizado, poucas palavras mágicas para aprender!
Deve ser UI grátis. Teste o código do cliente usando o uso de Chrome sem cabeça
Travis CI para testes automatizados, com emblema de aprovação / falha no github
Execute testes em cada commit
Fácil publicação no NPM e URL memorável para incluir scripts em páginas da web

Então, em cada compromisso com o repositório Github :

  1. A Travis CI iniciará sua instância de teste
  2. Instale a última versão do nó e o navegador Chrome
  3. Inicie o Chrome para testes sem cabeça
    (apenas necessários para projetos que sejam clientes JS)
  4. Execute dois exemplos de scripts de teste. Um para testar aplicativos de servidor e outro para navegador JS
    (Um deles pode ser eliminado dependendo se o seu é um aplicativo de nó ou script de cliente)
  5. Mostrar resultado do teste
  6. Publicar no NPM se for bem-sucedido
  7. Mostre os cartões de aprovação / aprovação para o projeto no NPM e no github.

Você pode adicionar / remover para isso conforme necessário, dependendo das necessidades do seu projeto.

Aqui estão todos os arquivos :

Para Travis CI, que hospedará o teste, apenas um  arquivo .travis.yml é necessário.

Se o projeto for um aplicativo de nó e não o cliente JS, você não precisa das peças do Chrome.

Também publicará para npm. Para scripts de clientes, podemos usar um link curto e fácil de lembrar usando unpkg.com

Não há estruturas de teste extravagantes para aprender aqui. Nós simplesmente escrevemos nossos scripts de teste, que lançam erros de falha.

A estrutura de teste é a seguinte , qualquer erro nativo constitui um teste falhado.

Para aplicativos de nó, test-server.js

main.js é o arquivo principal no aplicativo. O que está sendo testado.
Se tivéssemos chamado test_fail, o teste falharia e Travis nos diria assim.

test-browser.js para scripts de clientes.
Como realmente queremos automatizar as coisas, não podemos ter UI. Ninguém estará prestes a clicar nas coisas. Então, o cromo sem cabeça é usado para executar testes.

testchrome , é apenas um invólucro simples na interface remota cromada usada para testes sem cabeça.

Testchrome passa a usar uma API simplificada, apenas
.evaluar (JS no navegador)
.get (JSON de um URL)

Alternativamente, você pode usar os outros módulos de teste de Headless Chrome que estão disponíveis, como o marionetismo.

Conseguir esta configuração localmente em uma máquina pode ser desagradável. Travis CI realmente brilha aqui!

Indo para travisci.org (para reposos públicos) e siga as instruções para configurar seu repo. Conecte seu Travis CI acct ao github e especifique seu repo para teste.

Existe uma configuração necessária no Travis, seu token NPM que permitirá que o Travis publique o aplicativo, em Configurações:

Em seguida, apenas comprometa-se com o repo, ou use o console, para iniciar um teste.

Monitorize seu teste no console do Travis:

e ver resultados

Uma última coisa, o distintivo. Na README.md do repo:

que sempre mostra nosso emblema de aprovação / falha no NPM e no Github.

Finalmente, precisamos de um URL facilmente lembrado (para scripts de clientes). Usando o unpkg.com sem necessidade de configuração adicional, porque ele irá puxar o mais recente do NPM.

<script src = // unpkg.com/reponame> </ script>

Claro, para aplicativos de servidor, simplesmente

npm instalar o reponame

É isso mesmo, para a nossa estrutura que fornece testes e publicação automatizados. Por favor comente com quaisquer pensamentos ou sugestões. O exemplo de repo está em https://github.com/digplan/learn-ci

Testes felizes!

 

Fonte: https://hackernoon.com/learn-ci-automated-test-and-publish-in-10-min-3096717dc81e