28 julho 2016

Visualizando pacotes que dependem de um pacote “x” no Arch Linux

Recentemente tive um “problema” no meu sistema, depois de instalar um “monte” de pacotes e no fim ter meu $HOME sujo com pastas e arquivos de configuração, resolvi fazer uma limpa geral no $HOME e nos pacotes que eu não ia usar mais.

Meu primeiro problema era desinstalar um pacote e acabar afetando outro ou até removendo outro, pois gerenciadores de pacotes trabalhando dessa forma, compartilhando pacotes com outros pacotes. Dando uma pesquisada sobre o PacMan(Package Manager) que é o gerenciador de pacotes do Arch Linux, encontrei o pactree que faz uma árvore das dependências de um pacote e ele é bem simples, veja um exemplo:

$ pactree vi
vi
└─ncurses
 ├─glibc
 │ ├─linux-api-headers
 │ ├─tzdata
 │ └─filesystem
 │ └─iana-etc
 └─gcc-libs
 └─glibc

Você pode saber mais a respeito do pactree aqui — https://www.archlinux.org/pacman/pactree.8.html

Ou simplesmente o famoso “-h”


Este texto foi originalmente publicado no Medium e posteriormente migrado para este site.

26 julho 2016

Salvando sessões no VIM

Às vezes costumo abrir vários splits e tabs no VIM e quando não termino o trabalho costumo salvar a sessão inteira para não ter trabalho de reabrir todos os arquivos novamente, uma vez que eles ficam em posições que eu já acostumei.

O VIM tem uma “feature” que é pouco usada e pouco conhecida, mas que é bem interessante, e ajuda muito na hora de restaurar todo o workflow de trabalho. Guardar sessões não é novidade para quem usa editores mais modernos, e no VIM não é diferente. Você pode guardar a sessão inteirar e restaurar independente do diretório atual que você esteja.

Para começar isso basta dar um:

:mksession

Isso fará com que o VIM salve um arquivo Session.vim no local em que foi aberto. E esse é o arquivo que você irá usar para restaurar toda sua sessão.

E como restaurar?

Há duas formas de fazer isso, estando com vim já aberto e outra via linha de comando.

Com o editor já aberto:

:source Session.vim

Via linha de comando:

$ vim -S Session.vim

Para deixar as coisas mais fáceis, é interessante ter uma pasta para guardar as sessões. Não é regra, mas um bom lugar para fazer isso é na raíz do seu $MYVIMRC, que no VIM é $HOME/.vim/sessions/. Já no NeoVIM, seguindo o XDG ficaria no $HOME/.config/nvim/sessions/. Simples, os comandos serão os mesmos o que muda é apenas a localização do arquivo de sessão e o nome dele para não conflitar.

:mksession ~/.vim/sessions/minha_sessao.vim

Para saber mais sobre as sessões, basta dar um help no comando:

:help mksession

Existe um plugin para isso!

O desenvolvedor Peter Odding, criou um plugin que ele intitula de “mksession on steroids”, que facilita muito o workflow. O plugin faz tudo que o mksession faz, mas de uma forma mais simples. Com ele você salva e resgata sessões rapidamente sem a necessidade de seguir o caminho do arquivo de sessão.

Você pode saber mais e ler sobre o plugin na sua página do GitHub https://github.com/xolox/vim-session


Este texto foi originalmente publicado no Medium e posteriormente migrado para este site.

12 julho 2016

Templates com a biblioteca padrão de strings no Python

A algum tempo venho explorando a biblioteca padrão do Python e nos últimos dias tenho aprendido muitas coisas e usado também muitas coisas.

Suponhamos que você tem uma mensagem “quase que padrão” para aprensentar algo, um erro por exemplo. Mas algo pode mudar nessa mensagem, seja o número do erro ou algumas palavras. Algo como:

Ooops! Ocorreu um erro no arquivo parser.py.
[Code erro: 10]
Infos: https://doc.mylib.hi/?error=10

Pensa que você precisa apenas mudar o nome do arquivo, código de erro e a URL para informações (o infos).

Um dos jeitos de resolver isso é usar a classe Template que está na biblioteca de strings essa classe nada mais faz do que substítuir valores recebendo como parâmetro um dicionário. Exemplo:

import string
e = '''Ooops! Ocorreu um erro no arquivo $file_error.
[Code erro: $error_code]
Infos: https://doc.mylib.hi/?error=$error_code
'''
d = {
    'file_error': 'parser.py',
    'error_code':  '10'
}
template = string.Template(e)
sub_render_template = template.substitute(d)
print(sub_render_template)

Em $ fica os valores que serão substituidos pela dicionário, e os valores chave do dicinionário precisam ter o menos nome, só que sem o $.

Esse é um dos jeitos de resolver um problema. Poderia ter usado format, mas perceba que se isso ficar maior será um pouco mais complicado dar manutenção no futuro.

Fontes

  • https://docs.python.org/2/library/string.html#template-strings


Este texto foi originalmente publicado no Medium e posteriormente migrado para este site.

08 julho 2016

Checagem de tipos no Python

Suponhamos que você irá receber um valor que é fruto de uma função, você ‘acha’ que pode receber um inteiro, mas não tem certeza disso e quer garantir que as o valor que você irá trabalhar é um inteiro, caso contrário você não faz nada.

Existem vários jeitos de fazer isso, entre eles você pode usar o isinstance, casting, fazer um filtro entre outras. Mas estamos programando em python e queremos o jeito mais simples de fazer e mais declarativo de ler.

>>> X = 10
>>> type(X) is int

É possível usar os operadores de comparação == mas preferi usar is, pois ele faz a checagem do objeto e não do valor contido na variável. Há uma diferença entre os dois.

Em breve pretendo escrever mais sobre Python e seu funcionamento interno.


Este texto foi originalmente publicado no Medium e posteriormente migrado para este site.

05 julho 2016

Trabalhando com divisão de números inteiros com resultados decimais em Python 2

Essa é uma questão simples para quem já tem uma certa noção de Python ou para quem já migrou de vez para Python 3, mas para quem está começando e usa Python 2 ou precisa dar suporte para essa versão, este artigo pode ajudar.

Em Python 2 quando se faz divisões em que os operandos são inteiros o interpretador do Python automaticamente trunca a parte fracionada retornando apenas o valor inteiro. Exemplo:

>>> 3 / 4
0

Veja que ele retornou um inteiro e o que queremos é o valor fracionado que é:

0.75

Para resolver isso, precisamos explicitamente dizer que um dos operandos é um decimal(float) e a duas formas de fazer isso. Podemos em um dos operados colocar um nº.0 ou envolver com a função float(). Exemplo com as duas forma:

>>> 3 / 4.0
0.75

ou

>>> 3/ float(4)
0.75

Essa questão já foi resolvida no Python 3, então lá não a necessidade de transformar nenhum valor em float para receber um valor do mesmo tipo.


Este texto foi originalmente publicado no Medium e posteriormente migrado para este site.