segunda-feira, 8 de outubro de 2018

Problemas Notebook Q432A

Recentemente comprei um Notebook Positivo Q432A. Máquina de ótima aparência, com design muito semelhante ao MacBook Air. Lindo. Estou rodando Linux Manjaro nele. Fiquei com apenas alguns problemas:

  • Teclado é duro, as vezes falha
  • Ficou a marca das teclas na tela
  • Touchpad para de funcionar depois de suspender
  • Rede para de funcionar depois de suspender

sexta-feira, 24 de março de 2017

Instalação e configuração de servidor de mídia com Raspberry pi 2: instalação do Kodi (parte 3 de 3)

Para instalar o kodi no raspberry:
pacman -S kodi-rbp
Escolher o libglvnd como provider do libgl. O pacote é o customizado para o Arch-ARM, por isso não é o pacote padrão que seria o kodi.

Instalação e configuração de servidor de mídia com Raspberry pi 2: instalação do Deluge (parte 2 de 3)

Continando a série de posts sobre a configuração do raspberry pi 2, eu faço a configuração completa do Deluge (cliente de torrent) para rodar como um serviço do sistema e ser usado remotamente por interface web.
Pra instalar:
pacman -S deluge python2-mako python2-service-identity
O pacote 'python2-mako' é necessário para a interface web funcionar corretamente.
Pegar o nome da dependência da montagem no systemd para que o serviço do deluge só rode quando o hd_externo (onde eu estou salvando os torrents) estiver disponível:
systemctl -t mount | grep -E '/mnt/hd_externo'
No meu caso é 'mnt-hd_externo.mount'.

Depois é necessário mexer no arquivo de serviço principal, que na minha instalação fica em /mnt/mp/deluged.service:
[Unit]
Description=Deluge Daemon
After=network.target mnt-hd_externo.mount
Requires=mnt-hd_externo.mount
BindsTo=mnt-hd_externo.mount
[Service]
User=deluge
ExecStart=/usr/bin/deluged -d -P /srv/deluge/.config/deluge/deluged.pid -l /var/log/deluge/daemon.log -L warning
UMask=0002
[Install]
WantedBy=multi-user.target
E também é necessário mexer no arquivo do serviço de interface web (/usr/lib/systemd/system/deluge-web.service):
[Unit]
Description=Deluge WebUI
After=deluged.service
[Service]
User=deluge
ExecStart=/usr/bin/deluge-web --ssl -l /var/log/deluge/web.log -L warning
[Install]
WantedBy=multi-user.target

É possível confirmar a localização dos arquivos de serviço com:
pacman -Ql deluge | grep -E 'service$'
Criar a pasta, arquivo de log com permissões seguras:
mkdir -p /var/log/deluge
chown -R deluge:deluge /var/log/deluge
chmod -R 750 /var/log/deluge
Evitar a criação de arquivos gigantes de log com o recurso de rotação de log: criar um arquivo /etc/logrotate.d/deluge com o conteúdo
/var/log/deluge/*.log {
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                systemctl restart deluged >/dev/null 2>&1 || true
                systemctl restart deluge-web >/dev/null 2>&1 || true
        endscript
}
Criar um usuário para conectar remotamente no serviço do Deluge:
echo 'usuario:senha:10' > /srv/deluge/.config/delug/auth
Mexer nas chaves de configuração do /srv/deluge/.config/deluge/core.conf:

"move_completed_path": "/srv/deluge/completed",
"ignore_limits_on_local_network": true,
"allow_remote": true,
"download_location": "/srv/deluge/downloading",
"torrentfiles_location": "/srv/deluge/torrents",
"autoadd_location": "/srv/deluge/autoadd_torrents",

Habilitar o serviço:
systemctl enable deluged
systemctl enable deluge-web 
systemctl start deluged deluge-web
E o cliente para Android que eu estou usando (que é compatível com o Deluge, lógico) é o Transdrone

Referências:

quarta-feira, 22 de março de 2017

Instalação e configuração de servidor de mídia com Raspberry pi 2: instalação do Archlinux-ARM (parte 1 de 3)

Como o Manjaro no Arm está sendo descontinuado estou migrando minha máquina de torrent, digo, meu servidor de mídia :-), um Raspberry pi 2, para o Arch Linux ARM ao mesmo tempo que escrevo este post, vou me arriscar um pouco com os nada confiáveis repositórios do Archlinux, não vou entrar em detalhes, mas em resumo minha última experiência com o Arch no meu note não foi lá muito legal: toda a atualização eu já sabia que a máquina ia dar algum problema depois....

Vamos lá:

Imagem baixada e gravada seguindo esse tutorial
Depois do primeiro boot (fiz por ssh, então não sei como vai ficar o tty), fazer tudo como root (não custa lembrar):

Layous de teclado disponíveis:
find /usr/share/kbd/keymaps/ -type f -name \*.map.gz | less

Aplicando o novo layout à sessão atual:
loadkeys
Tornar persistente:
echo 'KEYMAP=br-abnt2' > /etc/vconsole.conf
Fontes de console:
find /usr/share/kbd/consolefonts/ -type f | less
Aplicar uma fonte à sessão atual:
setfont
Descomente o seu locale em: /etc/locale.gen (ctrl+w para procurar no nano)
nano /etc/locale.gen
Gerar o locale selecionado:
locale-gen
Criar o /etc/locale.conf com o idioma desejado e o charset padrão:
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
Data hora atual:
date '+%F %T'
Listar fusos horários disponíveis
timedatectl list-timezones
Mudar o fuso horário:
timedatectl set-timezone
Pega a data/hora da rede:
timedatectl set-ntp true
Mudar o nome do host:
echo 'raspberry' > /etc/hostname
Colocar a entrada também no /etc/hosts (recomendável):
echo '127.0.1.1 raspberry.localdomain raspberry' > /etc/hosts
Não esquecer de mudar a senha do root:
passwd
Atualizar todos os pacotes:
pacman -Syu
Instalar os pacotes:
pacman -S zsh sudo tmux vim
Criar grupo 'sudo'
groupadd sudo
Liberar o acesso dos usuários do grupo sudo via comando 'sudo':
visudo
E adicionar ao final do arquivo:
%sudo ALL=(ALL) ALL
Listar todos os grupos com id's:
cat /etc/group
Criar um usuário não-administrador:
useradd --create-home --gid users --groups sudo -s /bin/zsh rmonico
Mudar a senha do novo usuário:
passwd rmonico
pacman -S deluge

# Para poder usar o alsamixer com kernel 4.4+
echo dtparam=audio=on >> /boot/config.txt

# Rebootar a máquina e entrar com o novo usuário criado

# Remover usuário alarm
userdel --remove alarm
# --remove apaga a home do usuário

# TODO: testar o kodi e o deluge

# tigervnc com xfce:
pacman -S xorg-server
pacman -S xfce4 # Opcional: escolher todos os pacotes que ele oferecer
pacman -S tigervnc

# Montando um hd externo conectado no roteador na inicialização:
# Adicionar ao /etc/fstab:
//router/volume1 /mnt/hd_externo cifs username=admin,password=sua_senha_aqui,nofail 0 2
# Em caso de problemas ver [6]

Fiz a configuração do deluge (cliente de torrent) em post separado

Link para a segunda parte do tutorial: configuração do Deluge
Link para a terceira parte do tutorial: instalação do Kodi


Efeito Pirula: fontes, mesmo quando não é necessário:
Guia de instalação do Archlinux (para desktop)
Instalação do Archlinux ARM no Raspberry PI 2 (informações adicionais)
Guia de instalação do Archlinux (recomendações gerais)
Archlinux Wiki: Kodi
Archlinux Wiki: gestão de usuários
Archlinux Wiki: Samba

Todas as dicas adaptadas e testadas no meu raspberry pi 2

domingo, 19 de março de 2017

Criando arquivos .gitignore

Geração automática de arquivos .gitignore:

http://gitignore.io

Só informar as tecnologias que o seu projeto usa e clicar no 'Generate' (útil?)

Update 26/mar/2017:
Criar atalho no git:

git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi'
Chama com: git ignore Lista de tecnologias

Fonte: https://www.gitignore.io/docs

Versionando meu currículo

Este post é sobre como eu mantenho várias versões do meu currículo em paralelo, se você quiser saber apenas o como eu faço e não o por quê, recomendo que pule direto para a última sessão do post, no resto eu só discuto pq eu acho a minha solução boa e as outras tentativas com os problemas que tinham. Já aviso: esse post (assim como o resto do Blog) pressupõe que vc tenha conhecimento (mesmo que apenas conceitual) das ferramentas mais usadas para desenvolvimento de sistemas!

O problema

Um problema que eu venho enfrentando nos últimos tempos é como manter o controle de versão do meu currículo em um formato que funcione bem com o git. Quando mando currículo para uma empresa tenho o costume de olhar as qualificações mais importantes para a vaga e, quando for o caso, destacar algumas qualificações mais incomuns que a vaga exija e eu possua. Pra isso eu preciso saber qual versão do meu currículo eu enviei para cada empresa (até pra evitar mal entendido depois em uma possível entrevista). O jeito mais simples é fazendo uma cópia do currículo para cada empresa e fazer as alterações que forem necessárias. Funcionaria relativamente bem dessa maneira, todavia, considerando que, como programador, eu já tenho conhecimento de ferramentas muito mais avançadas do que o sistema de arquivo do computador é conveniente fazer uso dessas ferramentas. Outra utilidade possível do que eu vou apresentar aqui talvez seja para quem é acadêmico e precisa saber quais versões dos papers foram para quem, quando e o que foi mexido. Mas as utilidades não terminam aí: basicamente é possível recuperar qualquer versão de um documento criado e manter várias versões em paralelo sem grande esforço.

Requisitos para uma solução conveniente

Mas tudo isso de nada adianta se a solução final for complicada de fazer alterações como o Latex. Os usuários do Latex me perdoem, eu entendo os benefícios do Latex, ele é excelente, mas eu nunca aprendi a usá-lo devidamente. Também nunca tive paciência para isso (ok, falha minha), sempre que eu precisava fazer alguma alteração acaba perdendo uma tarde inteira lendo documentação, acabei saindo desse formato por conta disso. Uma necessidade é justamente que seja rápido fazer alterações em novas versões, nada melhor para isso do que através de uma interface intuitiva e um formato de arquivo bem maleável. Como tem muito recrutador que exige que currículo em formatos específicos, também é necessário que seja possível exportar, pelo menos, para PDF e DOC.

Caminhando em direção à luz (tentativas de soluções e considerações gerais)

A melhor opção em termos de interface de usuário é o Libre Office Writer, ok, tem o MS Word também (e vários outros na verdade), mas não é nenhum segredo pra quem já leu algum post meu que uso Linux e evito software pirata, além disso, no contexto do problema que eu coloquei no começo do post, o MS Word tem os mesmos problemas que do Libre Office: ele não é feito para funcionar com o sistemas de controle de versão como o git. O git, e os demais sistemas do gênero, são feitos para gerir versões de código de fonte de programas, que em geral (na verdade não conheço exceção) são arquivos de texto puro com nenhuma informação binária. Por isso os arquivos gerados por estes programas não costumam funcionar muito bem com o git.
Até é possível usá-los em conjunto, mas para usar todas as funcionalidades do LibreOffice eu precisaria salvá-lo em formato nativo (odt), que é um zip com vários arquivos XML, que, por usa vez, têm várias tags na mesma linha. Fica impossível de ler! Imagina fazer um diff do git em um arquivo desse tipo? Mais rápido aprender a usar Latex!
Se o problema é que o arquivo salvo é um binário então uma solução seria usar um formato de texto puro, como HTML ou RTF. Comecei tentando montar o arquivo em HTML com o LibreOffice (LO) de vários jeitos, mas sempre dava algum problema quando exportava para outros formatos (como PDF ou Doc do MS Word). Aí eu acabava abrindo o arquivo e mexendo nele na mão (usar LO pra que então?), aí quando abria, o LO bagunçava tudo..... Com o RTF (um formato de 1980 eu acho) funcionava até um pouco melhor, pois é mais dirigido para documentos de texto, como um currículo, do que o HTML, mas várias funcionalidades do LO não ficavam disponíveis e também problema exportando para PDF.....
Bom, foi nessa época que eu migrei pro Latex e criei o repositório do meu currículo. Bom, eu já comentei um pouco sobre o Latex, quem sabe usá-lo bem eu encorajaria a usá-lo, eu achei uma ótima solução, só achei a curva de aprendizado muito íngreme....
Depois de tentar com o Latex e com o HTML/RTF passei por um esquema de tentar descompactar o arquivo odt do LO e versionar os seus xml's.... mas foi quando eu descobri que os xml's do LO são porcamente formatados (ok, pq seriam legíveis? É feito para o próprio LO ler eles....), tem várias tags na mesma linha, pouquíssimas quebras de linha, enfim, um inferno para ler. Eu até cheguei a fazer uma solução eu mesmo para formatar os XML's para deixar mais amigável de ler..... O problema é que quase sempre acaba quebrando o conteúdo do arquivo ao colocar quebras de linha para melhorar a legibilidade. Então em determinadas situações eu acaba evitando colocar quebras de linha no arquivo formatado.... o que prejudicava a legibilidade do arquivo.......
Acabou que eu mandei tudo às favas e comecei a versionar o binário do odt mesmo. Paciência, nessa altura dos acontecimentos não é difícil imaginar quanto tempo eu já tinha perdido tentando versionar um arquivo de texto..... Uma coisa importante que eu aprendi aqui foi a usar as próprias ferramentas de diff do LO (que ficam no menu Editar / Registrar alterações / Comparar documento...)
Outra solução possível para saber o que foi mexido no arquivo é usar as ferramentas desse mesmo menu, mas elas, por outro lado, não permitem organizar versões em paralelo do mesmo documento, é bom, mas não resolve tudo.

Até que um belo dia eu tropecei neste link aqui. Essa pessoa havia (uns 3 anos antes) tido e resolvido o mesmo problema que eu. O que eu vinha fazendo errado era versionar o mesmo conteúdo que o git gerenciava: pra quem não sabe o git tem um mecanismo para resolver o problema do versionamento de binários: é possível versionar um arquivo e visualizar a saída de um comando nos diff's. Era a solução que eu tanto procurei. Na próxima sessão detalho como ela funciona.

Uma solução funcional que atende a todos os requisitos

Uma vez que as responsabilidades de versionar e visualizar diferenças entre versões do mesmo arquivo podem ser separadas é possível versionar um binário sem os inconveniente de não saber o que mudou de uma versão para outra. Porém, para que isso seja possível é preciso que uma saída em texto puro seja gerada por algum comando do terminal seja gerado sempre que uma diferença entre dois arquivos for solicitada. Então primeiro é preciso criar esse comando:

#!/usr/bin/env sh
set -o errexit
/usr/bin/odt2txt --raw "$@" | /usr/bin/xmllint --format -

Salve o arquivo acima em algum lugar do seu PATH com o nome 'odt2prettytxt'.
Repare na última linha: ela possui dois comandos que não fazem parte do Linux: se vc estiver usando o Manjaro instale os pacotes odt2txt e libxml2, não sei em quais pacotes estes comandos ficam no Debian/Ubuntu. No Archlinux provavelmente os pacotes são os mesmos.

Depois disso só fica faltando informar para o git que para arquivos .odt não é pra fazer o diff com o arquivo informado, é pra passar o arquivo para o nosso script e fazer o diff com a saída do comando:

git config --global diff.odt.textconv odt2prettytxt

Até aqui é a mesma coisa que o Robert Riemann fala no link dele. O que ele deixa passar é que LO polui MUITO os arquivos gerados com um monte de estilos automáticos toda vez que uma alteração é feita. É possível evitar isso selecionando todo o texto (Ctrl+A) limpando toda a formatação direta (Ctrl+M), recarregando o arquivo (menu Arquivo / Recarregar ) e fazendo uma nova limpeza da formatação direta no documento (desse vez sem texto selecionado).
Pronto! No diff ficam apenas as alterações feitas no arquivo e no documento final não fica nenhuma alteração desnecessária!

terça-feira, 18 de outubro de 2016

Estudo de alguns clientes de linha de comando do Manjaro

bti - Não consegui fazer funcionar
oysttyer - Interface poluída
nocturn - Usável
polly - Tem vários opções interessantes (como exibir várias colunas ao mesmo tempo), mas é muito orientado à mouse, não é possível (ou eu não descobri como) controlar com teclado
mikutter - A interface é toda em Japonês, nem tentei usar muito
rainbowstream - É bom, totalmente orientado à linha de comando
ttytter - Clone do oysttyer?
turpial - Não consegui instalar
turses - Melhor até agora, não fica em nenhum extremo
v2c - Em Java e Swing. Interface toda em japonês

quarta-feira, 6 de julho de 2016

Pascal, internet, senhas e você


Você teria um minuto para ouvir a palavra de Pascal?
(A primeira pessoa que se tem notícia de ter escrito de maneira formal sobre permutações foi Blaise Pascal)
Este post seria uma (longa) resposta a este post. Por esse motivo faz referência à amigos que postaram respostas por lá.

Vamos ignorar a piada da foto e vamos fazer de conta que eu quero descobrir a senha do painel da foto, que tem 12 símbolos possíveis (e nenhum desgastado). Eu consigo imaginar duas possibilidades: o mesmo símbolo poder se repetir na senha (1) ou não (2) (mal aê Patrick Sérgio, não pensei nessa possibilidade antes de te responder).

No caso (1) então o primeiro simbolo pode ser qualquer um dos 12 possíveis. No segundo dígito também são 12 possíveis (pois os dígitos podem se repetir), assim como nos demais. Aí já fica fácil de sacar que a quantidade de senhas possíveis é elevado à , por exemplo, se o painel da foto tem 12 símbolos e a senha tiver 3 de comprimento dá 12 elevado à 3 senhas possíveis (1728 senhas). 

(2) Se um dígito só pode aparecer uma vez na senha a conta fica assim: o primeiro dígito podem ser 12 possíveis (12 senhas possíveis de um símbolo de comprimento), pro segundo dígito sobram 11 possíveis (12*11 símbolos possíveis de comprimento = 132 senhas possíveis), pro terceiro dígito 10 (12*11*10=1320), no quarto 9 (12*11*10*9=11880). Por essa lógica a conta fica assim: fatorial - (( - + 1) fatorial), por exemplo, se eu quero testar todas as senhas no painel (de 12 dígitos) com até 10 dígitos então eu tenho que testar: 12! - (12 - 10 + 1)! = 12! - 3! = 479001600 - 6 = 479.001.594 senhas possíveis. Por essa lógica a conta fica assim: fatorial - (( - + 1) fatorial) então, por exemplo, se eu quero testar todas as senhas no painel (de 12 dígitos) com até 10 dígitos então eu tenho que testar: 12! - (12 - 10 + 1)! = 12! - 3! = 479001600 - 6 = 479.001.594 senhas possíveis.

Respondendo a pergunta do Fernando: como as senhas costumam ser do tipo (1) então fica 4 elevado à 8 = 65536 senhas (que já é muito)

Tentando quebrar a senha do painel da foto (ou "Respondendo certo a pergunta do Patrick): ali tem 4 dígitos desgastados, então pelo que vimos até aqui isso facilita (muito) o trabalho. Como são 4 dígitos desgastados então a senha tem, pelo menos 4 dígitos, então se a senha for do tipo (2) são 24 senhas possíveis que, a princípio, é bem rápido de testar. Se não for (isto é, cai no caso (2)) a coisa degringola da seguinte maneira: senha de 4 dígitos de 4 possíveis (4 ^ 4 = 256, ainda é testável, talvez ao longo de alguns dias), senha de 5 dígitos possíveis (4 ^ 5 = 1024, ok ainda), 6 dígitos: 4 ^ 6 = 4096 (opa), 4 ^ 7 = 16384 (eita).... vcs já entenderam: a cada dígito novo que entra multiplica-se a quantidade de senhas possíveis pela quantidade de algarismos existentes no painel (como estamos pensando só nos desgastados são apenas 4).

Bônus: em quanto vc melhora a segurança das suas senhas do computador ao acrescentar um novo dígito (que, pra simplificar, podem ser uma das 27 letras ou um dos 10 números)?

TODO: Falar sobre aumento da complexidade das senhas.
TODO: Falar sobre bancos de senhas
TODO: Falar rapidamente sobre como proteger senhas em sistemas desktop
TODO: Postar o Leaked source

sexta-feira, 27 de novembro de 2015

git daemon in 30 seconds

* Inicialização de repositório:

git init --bare repo_dir

# Permite que o repositório seja clonado
touch > repo_dir/git-daemon-export-ok

* Start git daemon for clone and push:

git daemon --verbose --enable=upload-pack --enable=receive-pack --base-path=. ./repo_dir ./another_repo

* Clone git repository:

git clone git://localhost/repo_dir

Não permitir que uma string seja internacionalizada no Eclipse

Comentar depois da linha:  //$NON-NLS-1$
Caso se queira ignora apenas a segunda string: //$NON-NLS-2$

Exemplo:

System.out.println("String que não será internacionalizada."); //$NON-NLS-1$

Não sei se é um padrão para qualquer coisa ou se funciona apenas para o Eclipse.