sexta-feira, 29 de setembro de 2017

Usando sua câmera em python

Instalação


Se você tiver instalada uma versão anterior do OpenCV, você deve removê-lo antes da instalação da nova versão para evitar conflitos. O mesmo valor para o pacote opencv-contrib-python.
Você pode utilizar os ambientes virtuais do Pytho para evitar conflitos e tornar o desenvolvimento mais fácil.

Existe uma instalação simples se você tiver pip.
Basta digitar:
$ pip install --upgrade pip
$ pip install opencv-python
O problema desta instalação é que algumas características do opencv não funcionam.

Processo longo

Bom!!!
Prepare-se pois tem um bocado de coisas para fazer.
Você tem que instalar o compilador e algumas bibliotecas para compilar o opencv.

$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Alguns tutoriais indicam que os pacotes mostrados na terceira linha são opcionais, mas eu só consegui rodar instalando tudo. Agora temos que baixar o código fonte do opencv e precisamos compila-lo.

$ git clone https://github.com/opencv/opencv.git
$ cd ~/opencv
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local .. 
A quarta linha é crítica. Se alguma etapa deste processo der erro, provavelmente você não irá conseguir instalar o opencv. Ao rodar cmake várias linhas serão mostradas na tela. Se funcionou, as suas linhas finais devem parecer com a tela mostrada abaixo.

Próximo passo: compilar...

$ make -j4
Como tenho 4 cores no meu computador, use -j4 para acelerar. Você pode digitar somente make sem o parâmetro -j se quiser. Se você tiver 2 cores, use -j2. Se forem 4, use -j4. Você já entendeu, não é?
Este comando vai gerar um monte de linhas, algumas delas tem um indicador que quanto já foi compilado. A tela final da compilação é mostrada abaixo.


Ainda falta um passo para poder usar o opencv. Para instalar use o comando


$ sudo make install
Ele também vai gerar um monte de linhas, mostrando também entre colchetes quanto já executou da instalação.

Quando ele terminar você retornará ao prompt do terminal. Você pode entrar no interpretador do python para ver se está tudo carregado.
Na tela abaixo entramos com dois comandos: (1) import cv2 faz a importação da biblioteca do python. Se tudo deu certo, o python retorna com o prompt para você. (2) usamos cv2.__version__ para ver a versão que foi compilada e instalada. Veja que no momento deste post estamos na versão 3.3


Uso

Para usar o opencv é relativamente simples. Se você fez o processo longo, o código abaixo deverá rodar. Entre em um editor de textos e entre com as seguintes linhas.

import cv2

def show_webcam(mirror=False):
  # conecta na sua câmera
  cam = cv2.VideoCapture(0)  # câmera id = 0
  while True:
    ret, img = cam.read()
    if ret == False:
      break # não conseguiu abrir, portanto sai
    if mirror:
      # muitas câmeras leem a imagem espelhada
      # assim se ativar mirror = True
      # fazemos o cv espelhar a imagem
      # mostrando da forma correta
      img = cv2.flip(img, 1)
    cv2.imshow('minha webcam no python', img)
    if cv2.waitKey(1) == 27:  # ESC para sair
      break 
  cv2.destroyAllWindows()

show_webcam(mirror=True)
Basta chamar o programa (no nosso caso ele chama program_my_cam.py):
$ python program_my_cam.py

Quer saber mais

Vá para o site de tutoriais do OpenCV.

Usando containers

Você pode querer manter seu ambiente mais limpo e assim recomendamos o uso de containers.
Você pode ver em https://github.com/h3dema/opencv_docker como usar um container docker com o ambiente completo do opencv.

domingo, 17 de setembro de 2017

Criando um repositório espelho

Quando temos várias máquinas na rede, faz sentido ter um repositório local espelhado a partir do repositório remoto, pois isto reduz o uso de largura de banda, limitando o número de máquinas que se conectam ao repositórios remotos e assim reduz o download de grandes arquivos associados aos pacotes.
Uma vantagem adicional é que todas as máquinas da rede local por estarem utilizando este repositório local, os pacotes em cada uma das máquinas serão da mesma versão.

Criando um repositório local, somente um computador irá se conectará ao repositório remoto, fazendo um espelho do conteúdo para o computador local.

Nós precisaremos realizar três tarefas conseguir fazer funcionar o repositório espelho local:

  1. Primeiro, configuramos o espelho em uma das máquinas da rede local -- este será nosso repositório local
  2. Em seguida, configuramos este computador para espelhar apenas determinados repositórios. Isso limitará a quantidade de dados baixados e também evitar que pacotes indesejados sejam baixados.
  3. A terceira tarefa é apontar os clientes locais para este repositório para que eles usem apenas esse repositório para atualizar os pacotes.

Configurando uma máquina espelho

Começamos portanto configurando o espelhamento de duas maneiras, usando: rsync e apt-mirror. Veremos neste post o comando apt-mirror. Ele pode ser utilizado para o espelhamento inicial. A instalação é simples:

$ sudo apt-get install apt-mirror

Se você tentar o comando apt-mirror agora, ele irá solicitar o download de um grande quantidade de dados. Precisamos portanto limitar os repositórios que queremos e também configurar outras configurações para o apt-mirror.

Precisamos configurar o arquivo /etc/apt/mirror.list. A primeira seção do arquivo contem a configuração padrão relacionada ao armazenamento de arquivos baixados, o caminho do diretório espelho base, scripts de limpeza etc.

Por padrão, os arquivos são copiados para o diretório /var/spool/apt-mirror. Você precisa garantir que haja espaço em disco suficiente para armazenar os arquivos (são muitos !).
Se todos os computadores da rede estão na mesma arquitetura você pode deixar o parâmetro defaultarch com o valor padrão, que usará a arquitetura do computador onde o apt-mirror está sendo rodado. Se você precisar espelhar repositórios para qualquer outra arquitetura, então você precisa configurá-lo explicitamente.

Em seguida, comente as linhas relacionadas aos repositórios na segunda seção. Mantenha somente ativos os repositórios que você realmente precisa e comente os outros.
Esta é uma parte delicada da sua configuração, pois você não vai querer baixar tudo, mas também não vai querer deixar uma atualização importante de fora. Infelizmente não tenho como dizer qual a melhor opção, você tem que ir testando. Sugiro descomentar somente o que você tiver certeza e ir liberando depois aos poucos.
Se você mantiver tudo ativo, o programa irá baixar uma quantidade muito grande de
dados.

Depois de ter feito as alterações, execute o comando apt-mirror para espelhar o repositório remoto para o computador local. Uma vez concluído o download de todos os arquivos, você pode ver que o diretório de destino fica semelhante aos diretórios de repositório que você observa nos servidores remotos.

Usando o espelho local

Com o repositório local funcionado, agora precisamos configurar as máquinas da rede local para utilizá-lo. Precisamos nos certificar que o espelho local é completamente funcional.

Em cada uma das máquinas da rede local, precisamos alterar o URL do repositório para fazer com que o computador acesse o computador espelho. Basicamente o que nós precisamos fazer é apontar para o IP da máquina que funciona como espelho.

Abra o arquivo de configuração /etc/apt/sources.list. Ache a linha que faz o download como mostrado abaixo.


Troque o endereço para o IP do computador espelho (ou comente a linha e acrescente pela linha com o IP local):

deb http://192.168.100.2/mirror/ubuntu trusty main restricted

Note que na minha rede, o computador espelho tem o endereço 192.168.100.2. Esta configuração deve conter o endereço do seu computador. Com isto agora temos todos os computadores da rede configurados para usar o espelho como o repositório.

Dá um trabalho, mas compensa.

PS: como a configuração nos computadores locais é a mesma, você pode fazer um script e copiar para todos a partir de uma única máquina, utilizando por exemplo o comando scp.

Fazendo com que o Ubuntu realize atualizações automáticas

Em um ambiente de produção comercial, por exemplo em um webserver, não recomendo esta opção pois nem sempre as atualizações retém todas as dependências que o sistema em produção permite. Por exemplo, a atualização automática pode instalar uma nova biblioteca de sistema e apagar a antiga, contudo o sistema em produção utiliza a versão antiga enquanto a nova é incompatível. Assim a sua atualização automática paralisa a operação do serviidor web.

Porém para um sistema em casa ou mesmo uma estação de trabalho que não utiliza sistemas muito especializados, a atualização automática pode ser uma garantia que o seu computador não seja atacado com facilidade, uma vez que as atualizações de segurança podem ser feitas automaticamente.

Você irá precisar do pacote unattended-upgrades. Ele é usado para instalar pacotes atualizados e pode ser configurado para atualizar todos os pacotes e atualizações de segurança. Primeiro, instale o pacote executando o seguinte comando no terminal:

sudo apt-get install unattended-upgrades
Para configurar o programa devemos editar o arquivo de configurações /etc/apt/apt.conf.d/50unattended-upgrades e ajustar o seguinte para atender às suas necessidades:

Vemos na tela acima duas partes. A parte (1) indica quais tipos de atualização serão feitos. As linhas marcadas com \\ estão comentadas e portanto não são consideradas. No nosso caso por exemplo, as atualizações de segurança são feitas automaticamente, porém as demais não são. Na parte (2) podemos indicar (listar) os pacotes que não queremos que sejam atualizados automaticamente. Se você tem um servidor, pode ser que sejam interessante listar aqui coisas como seu tomcat, java etc.

Tendo feito isto estamos quase prontos. Para ativar as atualizações automáticas, precisamos ainda editar o arquivo /etc/apt/apt.conf.d/20auto-upgrades para definir as opções de configuração apt apropriadas. Por exemplo, queremos uma configuração que

  1. atualiza a lista de pacotes;
  2. baixa e instala atualizações disponíveis todos os dias;
  3. o arquivo de download local é limpo todas as semanas. 

O arquivo deve conter então as seguintes linhas:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Em servidores com versões mais recentes do Ubuntu (14.04.5 em diante), o arquivo indicado acima pode não estar no diretório. Neste caso, você deverá criar um novo arquivo com este nome no diretório indicado.

Todas as atualizações indicadas neste post, precisam ser feitas com o usuário root ou utilizando o comando sudo (mesmo para editar os arquivos).

A ferramenta apt-cache

A ferramenta apt-cache serve para verificar se há pacotes disponíveis no sistema local.
Ela permite realizar pesquisa, verificação de dependência e de dependência inversa.

Procurando por um pacote

Podemos usar a opção de search do apt-cache para procurar um pacote.
Por exemplo, queremos buscar o pacote tomcat. O resultado da pesquisa é uma lista de pacotes relacionados ao termo pesquisado -- tomcat -- e uma breve descrição do que é o pacote:


Verificando dependências

Se você deseja verificar as dependências de um determinado pacote (por exemplo tomcat), use a opção depends da ferramenta apt-cache. A saída é mostrada na tela:

Note que a saída mostra os pacotes que são necessários para instalação do tomcat.
Podemos também fazer a pesquisa reversa, isto é, que pacotes precisam de tomcat. O comando é bem parecido com o anterior, só que agora escrevemos rdepends.
A saída mostra os pacotes que estão no cache que dependem de tomcat.

Existem outras opções adicionais ao apt-cache, contudo acho as três acima bastante úteis.

sábado, 16 de setembro de 2017

Pycharm - Um ambiente de desenvolvimento python

Neste post vamos ver como instalar o Pycharm no Ubuntu 14.04.
O Pycharm não funciona direito com o Openjdk, portanto devemos instalar o Java no Ubuntu.
Espera aí? Por que instalar Java? Não é Python?
Pois é... As ferramentas da JetBrains (que fabrica o Pycharm) são feitas em Java.
Portanto se você quer ver como instalar o Java, dê uma olhada no nosso post: Instalando o Java da Oracle no Ubuntu.

Preparando o ambiente

Em uma instalação padrão do Ubuntu o python já é instalado por default. Por isto, não estamos detalhando aqui como instalar o python. Neste post, estamos utilizando com ambiente o Python 2.7, porém a versão 3 também pode ser utilizada.

O Pycharm utiliza algumas ferramentas adicionais ao python para baixar módulos e bibliotecas, para criar ambientes virtuais etc. Portanto é interessante instalá-las antes do Pycharm:

$ sudo apt-get install -y python-pip
$ sudo apt-get install python-setuptools
$ sudo -H pip2 install virtualenv

Instalando o Pycharm

O pycharm não é instalado usando o apt-get. A gente tem que baixar o instalador diretamente o site da JetBrains. Existem duas versões : profissional e community. A versão community é gratuita e portanto é ela que iremos instalar. Abra o site e clique no botão download (em preto) da versão community.

No momento deste post, a versão que está sendo baixada é: pycharm-community-2017.2.3.tar.gz.
Faça o download para o diretório que lhe convier. Abra um terminal e mude para o diretório onde você baixou o arquivo. Temos que descompactá-lo e rodar o script de instalação. Isto é feito com os comandos abaixo:

$ tar zxvf pycharm-community-2017.2.3.tar.gz
$ cd pycharm-community-2017.2.3/bin
$ ./pycharm.sh
Pronto, agora o instalador abre uma janela para terminarmos a instalação.


Criando DHCP server

O servidor DHCP é usado para atribuir o endereço IP aos computadores clientes e outros dispositivos de rede. Basicamente, precisamos do endereço IP, da máscara de sub-rede, do endereço IP do gateway da rede e do endereço(s) do(s) servidor(es) DNS para configurações de rede. Desta forma, precisamos definir esses valores no servidor DHCP, de modo que o computador cliente (estação) conectado a esta rede obtenha valores automaticamente do servidor DHCP.

Este post mostra como configurar um servidor DHCP no Ubuntu 14.04.

Antes de iniciar a instalação, devemos garantir que a interface de rede que fornecerá os IPs para a rede tenha atribuído IP estático ao servidor. Não cobrimos esta configuração aqui. Veja em outro post como configurar uma interface de rede no Ubuntu.

Devemos atualizar a lista de pacotes e instalar o pacote e as dependências isc-dhcp-server.

$ sudo apt-get update
$ sudo apt-get install -y isc-dhcp-server

Após a instalação, abra o arquivo /etc/default/isc-dhcp-server e atribua a interface que está ligada à rede interna, isto é, a rede que receberá os endereços fornecidos pelo DHCP server. No nosso exemplo, esta interface é eth0.

$ sudo vi /etc/default/isc-dhcp-server
Achar ou acrescentar a linha:

INTERFACES="eth0"
No nosso cenário, iremos fornecer endereços para a rede 192.168.100.0/24.
O DHCP server irá fornecer endereços no intervalo:
  • 192.168.100.20 (IP inicial)
  • 192.168.100.100 (IP final). 
O gateway da rede será o próprio roteador, isto é, terá o IP 192.168.100.1.
Ele também será o nosso DNS primário. Utilizaremos como DNS secundária o endereço do DNS público do Google (8.8.8.8).

Precisamos alterar o arquivo dhcpd.conf localizado no diretório /etc/dhcp/ para colocar estas configurações.

# esta seção define condições para todos as subredes 
default-lease-time 600; 
max-lease-time 7200;     # tempo máximo que o endereço ficará reservado
log-facility local7;
#
# 1ª (e única) subrede que iremos definir
#
subnet 192.168.100.0 netmask 255.255.255.0 {  #network
 range 192.168.100.20 192.168.100.100; # Range
 option domain-name-servers 192.168.100.5, 8.8.8.8; #Pri DNS , Sec DNS
 option domain-name "meudominio.com.br"; #Domain name 
 option routers 192.168.100.1; #Gateway
 option broadcast-address 192.168.100.255; #Broadcast
}

Note que a opção "domain-name" não é obrigatória. Ela ajuda caso você tenha realmente um dominio na internet, assim suas máquinas internas (configuradas pelo DHCP) podem colocar somente o nome da máquina e o nome será completado com o valor de "domain-name".

Iniciamos o serviço:
$ sudo service isc-dhcp-server restart

Reservando endereços

Às vezes nós precisamos reservar o endereço IP para alguns dispositivos como impressoras, câmeras, máquinas linux etc. Assim estes equipamentos receberão sempre o mesmo IP.
Neste caso, primeiro você precisa encontrar o endereço MAC desse dispositivo e definir valores nessa sub-rede específica.

Por exemplo, queremos garantir que a nossa impressora e nossa câmera do bebê tem o mesmo endereço sempre. A impressora tem o endereço MAC 00: DD: HD: 66: 55: 9B e a câmera do bebê tem o endereço MAC 00: DD: HD: 66: 55: 9C
O endereço MAC da impressora será 192.168.100.20 e da câmara será 192.168.100.30.

Para isso, você precisa adicionar código como abaixo para essa sub-rede.

     host impressora {
                hardware ethernet 00:DD:HD:66:55:9B; 
                fixed-address 192.168.100.20;
        }
       host bebe-cam {
                hardware ethernet 00:DD:HD:66:55:9C;
                fixed-address 192.168.100.30;
        }

Precisamos reiniciar o serviço para que as nossas alterações tenham efeito:

$ sudo service isc-dhcp-server restart

quinta-feira, 14 de setembro de 2017

Descompactar arquivos tar.gz ou tar.bz2

É possível descompactar arquivos nos formatos tar.gz e tar.bz2 em um único passo.
Isto é você não precisa primeiro chamar um descompactador (como unzip ou bunzip2) e depois chamar o comando tar.
Mostraremos neste post como fazer isto utilizando a linha de comando. Para isto você terá que abrir um terminal. Em alguns computadores basta digitar <CTRL>+<ALT>+<T> simultaneamente para abrir o terminal, em outras você tem que ir no menu e achar o ícone do terminal e clicar nele.

Para descompactar um arquivo do tipo .tar.gz em uma única etapa, use o comando a seguir:

$ tar xvfz somefilename.tar.gz
O parâmetro "z" é importante pois informa ao comando tar que o arquivo está compactado no formato ZIP.


Para descompactar um arquivo do tipo .tar.bz2 em uma única etapa, use o comando a seguir:

$ tar xvfj somefilename.tar.bz2
Note que agora o parâmetro é "j", no lugar de "z", pois informa ao comando tar que o arquivo está compactado no formato bunzip2.


terça-feira, 12 de setembro de 2017

Instalando acesso VPN no Ubuntu

Se você tem o networkmanager instalado, provavelmente já tem como configurar uma conexão VPN.
Porém existem alguns caso onde você precisa de um software específico - o openvpn.

A instalação é bastante simples no Ubuntu, pois ele pode ser instalado com o apt-get:

$ sudo apt-get install -y openvpn
Para rodar o openvpn, você precisará de um arquivo de configuração que normalmente é fornecido pelo seu provedor (ou pelo menos deveria ser fornecido por ele). Tipicamente ele é um arquivo com extensão ovpn (por exemplo, cliente.ovpn). Para rodar o cliente, basta digitar:

$ openvpn --config client.ovpn
Contudo nem sempre o comando acima funciona perfeitamente. Por quê? Porque muitas vezes o provedor precisa informar para seu computador novas rotas, dns e outras informações. Este tipo de configuração somente pode ser feita por um usuário administrativo (root).

Dica

Uma dica é guardar o nome e senha em um arquivo local e fazer o openvpn verificar este arquivo e usar estes dados para autenticação. Isto pode ser um problema de segurança! Tenha muito cuidado, pois deixar esta informação no computador, com permissões para outros usuários pode ser perigoso.

Já estamos avisados, mas como fazer então?
Acrescente no arquivo de configuração cliente.ovpn a linha abaixo. No meu caso, coloquei na última linha do arquivo que me foi fornecido.

auth-user-pass nome_arquivo

onde nome_arquivo é o nome do arquivo que você irá colocar o usuário e senha. Este arquivo tem duas linhas, a primeira com o nome do usuário e a segunda com a senha.

nome_usuario
senha_do_usuario
Pronto agora ao chamar o openvpn, ele irá ler o arquivo nome_arquivo e obter o usuário e senha de login no provedor. Novamente ... cuidado com as permissões deste arquivo.

monitorar a temperatura do seu computador

A temperatura excessiva de algum componente no computador pode indicar o seu mau funcionamento então se você está com alguma desconfiança é bom ficar de olho em como andam os seus componentes, e nesta tarefa de monitoramento o PSensor pode te ajudar, ele é uma aplicação muito simples e que possui um indicador que fica na parte superior da área de trabalho onde você pode ver à quantos graus está o seu processador, placa de vídeo e placa mãe.

Instalando no Ubuntu


Para instalar o PSensor no seu sistema é muito simples,

$ sudo apt-get install -y psensor

Você também pode usar na Central de Programas:



Depois de instalado você pode rodar na linha de comando ou no menu do Unity. Pela linha de comando basta



$ psensor
A janela do programa abre. Você pode selecionar quais informações deseja que esteja mostradas no gráfico.

E no menu você pode selecionar as preferências para o programa:

Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems: 4G/5G modems (LTE/NR) 3G modems NB-IoT / Cat-M1 modul...