Otimizando o Linux com Swapiness

A partir das últimas versões do kernel 2.6.x, o kernel do linux passou a permitir que o usuário controle a partir de qual percentual de uso da memória RAM que será utilizado o swap.

Entretanto não se preocupe com essa questão de versão do kernel, pois atualmente o mesmo está na versão 4.x, então a não ser que você use um linux do tempo das cavernas sua distro terá suporte a esta configuração.

Existem duas maneiras de ver como seu swapiness está configurado:

sudo cat /proc/sys/vm/swappiness
60

ou

sysctl -a|grep swappiness
vm.swappiness = 60

no caso acima, ele irá utilizar swap a partir de 40% de uso da memória RAM (a configuração se baseia em memória disponível, então use sempre “100 – valor” para aplicar esta definição).

Primeiramente, poemos definir este valor em tempo de execução de forma testar qual valor melhor se adéqua a sua máquina

sysctl -w vm.swappiness=5

Acima configuramos para só usar o swap quando a memória RAM estiver 95% cheia (lembre do cálculo mencionado anteriormente).

O único problema é que essa configuração se perde ao reiniciar a máquina, então, para torná-la permanente, basta editar o arquivo /etc/sysctl.conf e adicionar/editar a seguinte linha:

vm.swappiness = 5

Certo, e qual número eu devo configurar?

A configuração vai depender da quantidade de RAM a máquina, mas por via e regra, quanto mais memória RAM, menor deverá ser o swapiness. 

Em um note com 4GB de RAM que uso pra desenvolvimento, consegui o melhor desempenho setando o número em 5, porém é interessante testar com outros valores antes e tornar a configuração definitiva 😉

Entendendo as certificações para dispoditivos a prova d’agua

“Nos dias atuais contemporâneos de hoje em dia” (não resisti a piada) muito se fala em dispositivos a prova d’agua com certificações ip67, ip68, etc.

Porém uma dúvida comum é o que significam estas siglas.

Este sistema de proteção IP é definido pela norma internacional IEC 60529 que classifica o grau de proteção fornecido por um compartimento de equipamento elétrico/eletrônico contra objetos sólidos (como poeira) e líquidos (água, óleo, etc.).

Seu grau de proteção é definido pela sigla ip, seguido de um número de dois dígitos, aonde o primeiro é o grau de proteção contra sólidos e o segundo contra líquidos.

O primeiro número indica o grau de proteção contra objetos sólidos

O segundo número indica o grau de proteção contra líquidos

X: Não mensurado

X: Não mensurado

0: Sem proteção

0: Sem proteção

1 = protegido contra a entrada de objetos sólidos externos de diâmetro ? 50 mm

1 = Protegido contra gotejamento vertical

2 = protegido contra a entrada de objetos sólidos externos de diâmetro ? 12,5 mm

2 = Protegido contra gotejamento (inclinação de 15%)

3 = protegido contra a entrada de objetos sólidos externos de diâmetro ? 2,5 mm

3 = Protegido contra pulverização (inclinação de 60%)

4 = protegido contra a entrada de objetos sólidos externos de diâmetro ? 1 mm

4 = Protegido contra respingo

5 = protegido contra poeira (entrada limitada, sem depósitos prejudiciais)

5 = Protegido contra jato

6 = à prova de poeira

6 = Protegido contra jato potente
7 = Protegido contra imersão temporária (até 1 metro por 30 minutos)
8 = Protegido contra imersão contínua (acima de 1 metro de profundidade pelo período de tempo especificado pelo fabricante)

OBS: Em alguns casos, no lugar dos algarismos numéricos, podem ser substituídos pela letra X, referenciando que aquela situação não foi testada.

Exemplo: ipX6 significa que, apesar de aguentar jatos potentes de água, não possui qualquer garantia de resistência contra objetos sólidos.

Instalar PHP5.3 no ubuntu 14.04

Esta dica teoricamente funciona também nas versões mais recentes do ubuntu.

Estes dias um antigo cliente meu entrou em contato solicitando a árdua tarefa de instalar o PHP  5.3 na última versão LTS do ubuntu (no momento em que escrevo é a 14.04).

Meu primeiro pensamento, foi baixar o tarball e compilar no servidor. Depois de mais de uma hora resolvendo dependências de bibliotecas, me deparo com erro na hora do make que eram basicamente questões relativas a versão de compilador, sendo praticamente impossível resolver (e olha que tentei).

Logo surgiu a ideia de buscar algum PPA que contenha esta versão, que também foi em vão, pois descobri que mesmo os repositórios que, em alguns artigos na internet diziam que continham esta versão do PHP, já haviam atualizado para as mais novas.

Quando tudo estava perdido, eis que surge uma ideia muito maluca. E se eu adicionasse os repositórios do ubuntu 12.04, deveria haver algum jeito de forçar o apt a utilizar pacotes de um determinado repositório.

Então, sem mais delongas, segue a receita de bolo:

Primeiro vamos criar um arquivo contendo os repositórios do ubuntu precise (12.04)

/etc/apt/sources.list.d/precise.list

deb http://mirror.rackspace.com/ubuntu/ precise main restricted
deb-src http://mirror.rackspace.com/ubuntu/ precise main restricted
deb http://mirror.rackspace.com/ubuntu/ precise-updates main restricted
deb-src http://mirror.rackspace.com/ubuntu/ precise-updates main restricted
deb http://mirror.rackspace.com/ubuntu/ precise universe
deb-src http://mirror.rackspace.com/ubuntu/ precise universe
deb http://mirror.rackspace.com/ubuntu/ precise-updates universe
deb-src http://mirror.rackspace.com/ubuntu/ precise-updates universe

Agora o “pulo do gato”, fazer com que os pacotes do PHP e do Apache utilizem este repositório

/etc/apt/preferences.d/php_precise

Package: php5
Pin: release a=precise
Pin-Priority: 1001

Package: php*
Pin: release a=precise
Pin-Priority: 1001

Package: php-*
Pin: release a=precise
Pin-Priority: 1001

Package: libapache2-mod-php5
Pin: release a=precise
Pin-Priority: 1001

Package: php5
Pin: release a=precise-updates
Pin-Priority: 1001

Package: php*
Pin: release a=precise-updates
Pin-Priority: 1001

Package: php-*
Pin: release a=precise-updates
Pin-Priority: 1001

Package: libapache2-mod-php5
Pin: release a=precise-updates
Pin-Priority: 1001

Package: apache2-*
Pin: release a=precise
Pin-Priority: 1001

Package: apache2-*
Pin: release a=precise-updates
Pin-Priority: 1002

Package: apache2*
Pin: release a=precise
Pin-Priority: 1001

Package: apache2*
Pin: release a=precise-updates
Pin-Priority: 1002

OBS: Os pacotes do apache são necessários caso você vá utilizar mod_php, se for utilizar php-fpm ou php-cgi, basta retirar os grupos referentes ao apache no arquivo acima.

Agora basta instalar os software e “voilà”

apt-get update
apt-get install apache2 php5 libapache2-mod-php5

Todo esses procedimentos que citei (compilação, procura de ppa, testes), levaram horas do meu tempo livre, então se você estiver lendo isso e lhe for útil, um belo agradecimento seria um compartilhamento no facebook! 😉

API para obter informações de geolocalização de um IP

O site http://ipinfo.io/ disponibiliza uma API pública e gratuita (até 1000 requisições/dia) para consulta de geolocalização.

O funcionamento é bem simples, basta fazer uma requisição usando file_get_contents(), curl ou o que mais a imaginação desejar para o endreço http://ipinfo.io/XXX.XXX.XXX.XXX/json o retorno é em json então basta usar algum json parser pra trabalhar com os dados.

Exemplo:

curl ipinfo.io/8.8.8.8/geo
{
  "ip": "8.8.8.8",
  "loc": "37.385999999999996,-122.0838",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
}

Dica do Giuseppe

Vida de Programador

Sad, but true
Ilustrações que definem bem a vida de um programador… Se você não teve nenhuma dessas experiencias, creio que você não é programador! =)

Quando você envia algo para o ambiente de produção:

Quando você resolve um problema sem precisar recorrer ao google:

Quando você fecha sua IDE sem salvar o código (ou quando ela trava):
Quando você tenta corrigir um BUG as 3 da manhã:
Quando uma expressão regular retorna exatamente o que você espera:
Quando meu chefe fala que o código que eu escrevi nunca será usado:
Quando eu mostro a meu chefe que corrigi um bug:
Quando eu envio um código sem testar e funciona exatamente como esperado:
Quando o pessoal do comercial mostra a equipe de desenvolvimento/infra o que eles venderam:
Primeira vez que você aplica um CSS a uma página:
Quando o sysadmin lhe dá acesso root:
Quando você roda um script pela primeira vez depois de horas trabalhando nele:
Quando você vai sair de férias e todos no escritório estão tentando corrigir error no sistema:
Quando seu chefe procura alguem para corrigir um bug crítico:
Quando você recebe pagamento extra por terminar um projeto antes do deadline:
Quando alguma coisa funciona na sexta e não funciona mais quando você chega na segunda:
Quando voc~e desenvolve sem nenhuma documentação
Quando seu chefe fala para você “testes são para pessoas que não sabem programar”
Quando você roda um script para atualizar o banco de dados e descobre que apagou todo o banco:
Fonte (em espanhol)

Como desvincular sua conta do msn com o skype

Skype-vs-MSN

Simples e rápido, basta acessar o teu perfil do skype na WEB através deste link:
https://secure.skype.com/portal/profile

Após logar, logo do cara, vc verá teu nome e mais abaixo, a frase “DETALHES DA CONTA”,  clique na opção perfil.

Vc será direcionado para a página “DADOS DA CONTA”, repare na opção, conta microsoft, estará o teu e-mail vinculado. Basta selecionar a opção “DESVINCULAR”.

Ferramenta para detecção de problemas em rede wifi

Um verdadeiro canivete-suíço para redes wifi, contendo gráficos, informações das redes entre outras coisas úteis:

Link Para Download:
http://www.metageek.net/products/inssider/

inSSIDer em execução