O cozinheiro de bits

Print

Uma análise do meu 2014

Written by Helio Loureiro on .

Em geral as análises do ano que se vai acontece na semana logo após o Natal, lá pelo dia 27 ou 28 de dezembro.  Mas como minha árvore de Natal continua imponente na sala, mostrando que o Natal só termina quando acaba, o que deve ocorrer lá pra março pelos meus cálculos, acho que ainda estou em tempo de publicar como foi o ano do site durante 2014.

Como todo ano, tive uns altos e baixos no tráfego.  Não foi um outage, mas eu que mudei o template do site e esqueci de carregar e ativar o módulo de estatísticas, que faço com o j4age que já publiquei sobre no post j4age, a evolução do joomlastats.  Mas é possível ver que a média de acessos é por volta de 100 views/dia, o que está bom demais pra um site que não recorre à publicidade paga pra aparecer mais.

Sistemas operacionais

Windows continua firme e forte na primeira posição, mesmo eu não escrevendo absolutamente nada sobre ele.  Mas apesar disso, acredito que são pessoas conscientes de seus erros e que pensam em mudar logo.  Assim espero.

Surpresa foi o MacOSX figurar na segunda posição.  Esse é um novo fenômeno.

E Linux surgindo na contagem com 10% dos acessos, mais o Ubuntu, com 7,5%.  Com isso já são quase 20% dos acessos a partir de Linux, ou melhor GNU/Linux, pois existem mais os acessos a partir de Android, que são Linux mas não são GNU.

E Nokia.  Com mais acesso que FreeBSDs.  Nokia.  Essa foi uma supresa.

Navegadores

Agora a estatística de acesso de navegadores ficou melhor, colocando todos os Firefox em uma só categoria.  A tendência que já tinha visto em 2013, do Chrome despontando, se mostra clara.  Internet Explorer despencou pra 3º posição, que ainda acho muito.

Páginas mais acessadas

Sem muitas surpresas.  Uma vez que muitos links direcionam pro site, os mais acessados são sempre links da página principal.  Dá pra ver que existe uma certa procura por assuntos técnicos, principalmente python, e algum interesse por assuntos com mais opinião que informação.  E o bom e velho #XGH.

Uma coisa que ainda domina bastante os tráfegos é informação sobre hardware antigo, mais precisamente o post que fiz sobre o uso de FreeBSD num compaq que eu tinha.  Artigo de 2006 ou 2007.  E continua tendo acessos.

Referências de links

Notadamente o tráfego pro meu site vem de pesquisas diretas do Google.  Então o que seria de mim sem o Google?  Não posso reclamar.

Planos pra 2015

Esse é o ano que já começo numa vida nova, morando fora do Brasil. Tenho tido muito mais contato com a área de desenvolvimento e Linux que qualquer outro momento de minha vida.  E espero ter tempo pra escrever por aqui.  Mas... ao mesmo tempo que tecnicamente estou mais próximo do que gosto, também tenho mais desafios.  Tenho cuidado de palestras internas e desenvolvimento de Linux como desktop na empresa.  Infelizmente coisa que não tem como eu divulgar muito já que é inerente ao trabalho, mas que posso o conhecimento usar pra escrever por aqui.

E agora estou me aventurando bastante com raspberrypi.  Logo devo incluir alguns scripts e dicas de uso do mesmo.  Esse deve ser o ano de 2015, que pelas estatísticas de acesso não deve ser ainda o ano do Linux.  Ainda.

Print

Filtrando em SQL pelo tamanho da contagem

Written by Helio Loureiro on .

A Priscila (@MayogaX) foi uma das pessoas que reclamou que eu tinha uma seção aqui sobre bancos de dados, mas nada escrito.  Acho que finalmente chegou o momento de ter alguma coisa ;-)

Mantenho o maravilhoso e ultra moderno encurtador eri.cx, que agora passou a sofrer ataques constantes.  Chato?  É, mas ataque na Internet já virou lugar comum.  Então temos de estar preparados.  Sempre.  O foco só mudou, pois antes esse tipo de ataque vinha por mail, com os SPAMs.

Entre os muitos scripts que tenho, tem um que verifica por alguns padrões de palavras como "cialis", "tramadol", "xanax" e "taladafil".  Não tenho idéia do que sejam.  Aliás o "xanax" dá uma certa idéia.

O que me faz pensar que esses links não são legítimos?  Perfil de tráfego.  São links que o número de cliques aumenta muito rápido.  Com isso eu tenho uns scripts que fazem algumas verificações, inclusive com palavras chaves como essas.  Se o link entra nesse perfil, eu removo pra uma tabela chamada "quarantine", salvando exatamente o formato de entrada.  Em seguida eu troco pro meu próprio site.  É uma propaganda subversiva, mas é mais legítimo que permitir que as pessoas caiam nesse truques.

Hoje eu resolvi dar uma olhada nos ataques, aliás nos logs dos ataques, e procurar um perfil.  Então eu precisava pegar os IPs e procurar um padrão.  Basicamente pegar via SQL os IPs, e fazer um count() na quantidade de vezes que apareciam e apenas mostrar aqueles que um padrão acima do normal.

O resultado foi esse aqui:

mysql> select ip, count(ip) as ip_count from quarantine group by ip having count(ip) > 10 order by count(ip) desc;
+---------------+----------+
| ip            | ip_count |
+---------------+----------+
| 173.44.37.250 |      168 |
| 96.47.224.50  |      139 |
| 173.44.37.226 |      136 |
| 173.44.37.242 |      121 |
| 96.47.224.42  |      118 |
| 96.47.225.82  |      117 |
| 173.44.37.234 |      115 |
| 96.47.225.74  |      112 |
| 96.47.225.66  |      110 |
| 96.47.224.58  |      100 |
| 213.5.66.88   |       89 |
| 96.47.225.162 |       71 |
| 96.47.225.170 |       69 |
| 96.47.225.186 |       69 |
| 96.47.225.178 |       67 |
+---------------+----------+
15 rows in set (0.01 sec)

Com isso foi fácil ver um padrão claro de ataque de apenas alguns ranges IPs.  Bastou uma pequena adição ao iptables pra acabar com a farra.

Print

Swapless Linux

Written by Helio Loureiro on .

Começando 2015, todos se lembram de como foi 2014.  Então resolvi escrever com um artigo sobre memória :)

Durante umas das discussões no grupo SOSLinux, alguém postou que já não usava Linux com swap fazia um tempo.  Nos meus velhos conceitos Unix adquiridos no século passado isso era algo inconcebível.  Uma heresia.  Um motivo pra receber um belo dum RTFM.

Esse é o problema de ter "aquela mesma velha opinião formada sobre tudo", como dizia Raul Seixas.  As coisas mudam.  Os sistemas evoluem.  Aquela recomendação de sempre se ter swap, e com fórmulas mágicas sobre seu tamanho, são coisas do passado, de uma era em que Linux era pra servidores e desktops.  Agora Linux está em todo lugar.  Na minha TV, no meu telefone, no meu tablet, e vai saber mais onde.  Talvez já esteja até no meu café e eu ainda não saiba.

Mas o fato é que naquela época a idéia era que as máquinas seriam cada vez maiores, mais potentes, mais gigantes, mais mais, muito mais.  Na verdade até são.  Mas aconteceu um fato interessante: o cloud.  Esse conceito permitiu uma forma de computação mais distribuída, com vários pequenos computadores ao invés de somente um maior.  E esse conceito foi se espalhando.  Se pensarmos hoje em dia nos celulares, eles são uma extensão computacional de algo que roda num datacenter.  Temos uma parte do aplicativo rodando localmente, e outra parte na nuvem.

Nesse novo paradigma, não é preciso tanto swap quanto antes.  Meu laptop tem 8 GB de RAM (tinha 12 GB com um pente extra de 4 GB que comprei no Dealextreme, mas o danado teima em dar problema de acesso e travar), mais que suficiente pra muita coisa.

Então resolvi experimentar.

Desabilitei o swap (swapoff /dev/mapper/vg-swap) e comentar a linha que o habilitava durante o boot no /etc/fstab.  E funcionou.  Mas bastou abrir chrome, firefox, thunderbird e eclipse pra coisa ficar feia (claro que a culpa é do java).

root@elx3030vlm-78:vm# head -16 /proc/meminfo 
MemTotal:        7926776 kB
MemFree:          218640 kB
MemAvailable:     889676 kB
Buffers:           57568 kB
Cached:           750036 kB
SwapCached:            0 kB
Active:          6672176 kB
Inactive:         404504 kB
Active(anon):    6282356 kB
Inactive(anon):    55548 kB
Active(file):     389820 kB
Inactive(file):   348956 kB
Unevictable:       65852 kB
Mlocked:           65852 kB
SwapTotal:             0 kB
SwapFree:              0 kB

Quando chega próximo do limite de memória, eu simplesmente tenho de aguardar o kernel decidir matar alguma coisa pra eu conseguir mandar um comando.  Até fiz um vídeo pra mostrar a situação.


http://www.youtube.com/v/ga8lG2xE7wc

Nessas ocasiões a carga do sistema vai às alturas, provavelmente por troca de contexto de processos no kernel, tentando achar memória onde não tem.

Quando isso acontece, uma mudança do ambiente gráfico pro console e um reinicio do mesmo resolve.  Mas é chato.

Esses são os load averages que consegui enquanto gerava o vídeo acima:

 12:51:51 up 21:12,  6 users,  load average: 36.61, 59.21, 75.31
 13:01:24 up 21:21,  6 users,  load average: 57.21, 51.78, 61.71
 13:29:59 up 21:50,  6 users,  load average: 110.99, 122.08, 107.70

Então melhor com swap?  Não é tanto assim.  O sistema evoluiu, mas o problema de gerenciamento de memória é coisa do Linux.  Com swap esse tipo de problema também acontece, só demora mais.  Eu já tinha visto isso justamente com criação de vídeo no kdenlive.  Tinha um bug no melt, possivelmente um memory leak, que ia consumindo toda a memória.  Travava?  Não, mas tinha de aguardar o kernel matar o melt pra conseguir voltar.  Isso levava de 4 a 6 horas.  Usando somente RAM acontece o mesmo, mas é mais rápido, por volta de 20 ou 30 minutos.

Eu tentei achar alguma referência de tunning pra ajudar.

Memory Management Approach for Swapless Embedded Systems

When Linux Runs Out of Memory

http://linux-mm.org/LinuxMMDocumentation

O problema é que a maioria das informações são antigas.  No kernel que estou usando, 3.17.7, não tem esses parâmetros.  Mas eu tentei melhorar a responsividades alterando algumas coisas:

vm.laptop-mode = 1
vm.memory_failure_early_kill = 1
vm.memory_failure_recovery = 1

O resultado foi bastante satisfatório e agora o sistema tem estado mais responsivo durante alta carga que exige alocação de memória.  E com mensagens interessantes vindas do kernel.

Out of memory: Kill process 24223 (chromium-browse) score 332 or sacrifice child
Killed process 24223 (chromium-browse) total-vm:1360048kB, anon-rss:242548kB, file-rss:15632kB

Gosto de um sistema que exige sacrifícios.

Print

Twitter is dead!

Written by Helio Loureiro on .

Acho que agora o tão falado fim da rede social que revolucionou a comunicação na Internet chegou.  Não digo em relação à investimentos, interface web ou mudança de tráfego.  Falo de código.

Recentemente eu ministrei mais um coding dojo.  O assunto escolhido foi... Twitter!  Twitter e python.  O motivo era simplicidade de ambos.  Fácil fazer, rápido pra colocar em produção e testar.

Até preparei meu curso de python twitter pra inglês:

http://prezi.com/phgt99r0-3fx/?utm_campaign=share&utm_medium=copy&rc=ex0share

Palestra pronto, público pronto, então foi hora de bota a mão na massa.  Pra não começar com algo enfadonho, aproveitei o intervalo de almoço pra criar uma conta na rede do twitter, pra justamente fazer a aplicação e brincar.  A conta foi criada sem problemas, mas na hora de criar a aplicação e mudar a permissão de leitura pra escrita...

Uma das coisas que adorava no Twitter era a facildade.  Bastava criar uma conta e usar.  Sem burocracia.  Então começaram com confirmação de e-mail.  Até aí era tranquilo.  Criava um mail a mais em um dos meus domínios de Internet e continuava em frente.

Mas agora é preciso cadastrar telefone.  Um número pra receber... SMS de confirmação?  Até entendo a parte de aumentar a segurança pro usuário com autenticação em 2 passos, mas... complicou.  Não tenho várias linhas de prépago pra ficar cadastrando a cada novo usuário que eu criar pra dar um curso ou coding dojo.

Sim... pra mim isso significa o começo do fim.  Não são os números, não são os investidores, não é o mercado.  É o uso.  É o hacking.  Esse era o diferencial para mim.

Minhas outras aplicações mais antigas ainda funcionam.  Ainda.  Mas não sei por quanto tempo.  Posso simplesmente cadastrar meu celular?  Até poderia, mas não tenho tanto interesse assim que o Twitter ou qualquer outra rede saiba meu celular.  

Então é isso... continuarei usando mas... não tanto.  Nem pra cursos.  Nem pra coding dojos.

É hora de mudar pra outra rede.

Print

Debian consultant

Written by Helio Loureiro on .

Due my current job, I can't offer anymore Debian professional consultant services.  It could conflict to company interestes.  But I can offer it for free.

So if you are a non-profit organization, like schools, and would like to have a Debian server place in your environment, I can give you certain services and/or directions.

Services that I can help you are:

  • Security
    • Firewall configuration.
    • IPS/IDS.
    • System audity.
  • Servers
    • Web Apache.
    • Mail with sendmail or postfix.
    • PBX IP with Asterisk.
    • SAMBA server (windows domain authentication, etc).
  • Monitoring
    • Zabbix.
    • Nagios.
    • Munin.
  • CMS (Content Management Systems)
    • Wordpress.
    • Joomla
  • Networking
    • DHCP.
    • BGP/OSPF/RIP routing via quagga. 

Do you need them?  Or even an install fest?  Or someone to talk about Debian and Linux?  Then just drop me a mail.

Mail: helio-arroba-loureiro-ponto-eng-ponto-br
Twitter: @helioloureiro
Print

Apresentando Jenkins no display com raspberrypi

Written by Helio Loureiro on .

No nosso ambiente de desenvolvimento utilizamos Jenkins pra Continuous Integration, ou seja, a cada "commit" de código, compilar e testar a versão de uma forma automatizada.  Cada um pode conectar no servidor Jenkins e visualizar o status do build, mas deixamos um display aberto para que todos possam ver como as coisas andam (e não deixar um release quebrado parado pra sempre).

Nada melhor que usar um raspberrypi pra essa atividade, já que é um dispositivo pequeno e com baixo consumo de energia.  Aliás é o treco pendurando pra baixo da TV.  O único incoveniente é que pra mostrar mais de um servidor Jenkins, as opções atuais são pra utilizar algum código javascript que faz com que a tela troque de URL.

Essas soluções funcionam muito bem em PCs x86_32 e x86_64, mas em um raspberrypi... as limitações de CPU são grandes.  Como os browsers que suportam isso são chrome/chromium e firefox, o efeito indesejado é essa "lentidão" em renderizar a página, como mostra a imagem.

Outro problema é que seu um dos servidores Jenkins estiver fora do ar, esses javascripts "quebram", não fazendo a transição pra url seguinte.

Pra completar o problema, decidimos mudar de chromium pra epyphany, pois o mesmo usa muito menos memória que o chromium, e menos CPU.  Mas nem tudo é perfeito: o epyphany não suporta script pra trocar entre várias URLs como o chrome.

Durante essas trocas browsers e experimentos, troquei umas mensagens com o Gustavo Noronha, vulgo Kov, que é um dos mantenedores do epyphany, perguntando sobre as possibilidades do mesmo.  Ele disse que epyphany não suportava esse tipo de plugin, mas que eu poderia escrever minha própria aplicação em webkit.  Então...

Demorou.  Acho que trocamos essas mensagens, via twitter, lá pro meio de outubro.  Já é quase Natal.  Mas finalmente escrevi alguma coisa.

Comecei com um pequeno script baseado num código em C++ com Qt:

#include 
#include 
 
 
int main(int argc, char **argv){
  QApplication app(argc, argv);
  QWebView wv;
  QWebPage *page = wv.page();
  QWebSettings *settings = page->settings();
  settings->setAttribute(QWebSettings::JavascriptEnabled, true);
  settings->setAttribute(QWebSettings::PluginsEnabled, true);
  wv.load(QUrl("http://www.youtube.com"));
  wv.show();
  return app.exec();

Acabei trocando o script simples pra uma classe em python, e usando threads.  O que era simples ficou um pouco mais... vamos chamar de "refinado".  Mas está funcionando.  E com menos memória e CPU, que era o objetivo inicial.

Quem quiser dar uma brincada ou mesmo usar, o código está disponível no GitHub:

https://github.com/helioloureiro/raspresenterpy

Print

Removendo um arquivo -C

Written by Helio Loureiro on .

Isso mesmo.  Olhando meus diretórios pra começar um backup, percebi que criei um arquivo com nome "-C".  Provavelmente resultando de alguma comando errado.

O que fazer nesse caso?  Em geral comandos como "rm" e "mv" não funcionam pois interpretam o "-C" como uma opção do comando, não como arquivo.

Existem várias formas de resolver isso, inclusive algumas mais fáceis via interface gráfica usando nautilus/dolphin ou algo do gênero.  Mas vou mostrar a "forma UNIX" de resolver isso.

Primeiramente, onde está o danado do arquivo?

helio@linux:home$ ls
backup -C helio fisl lost+found support

No caso estava no meu diretório "/home".  E o que era o arquivo?

helio@linux$ home# ls -l
total 646124
drwxr-xr-x 2 root root 4096 Nov 21 09:41 backup
-rw-r--r-- 1 root root 661555200 Oct 9 12:05 -C
drwxr-xr-x 367 helio linux 36864 Nov 21 09:43 helio
drwxr-xr-x 6 fisl fisl 4096 Mar 5 2014 fisl
drwx------ 2 root root 16384 Nov 16 2013 lost+found
drwxr-xr-x 5 support admin 4096 May 17 2013 support

Agora vem o truque.  Cada arquivo criado no seu filesystem tem junto um número de i-node, que é onde ele foi efetivamente gravado no disco.  É possível usar a opção "-i" do comando "ls" pra verificar cada número de i-node de cada arquivo do diretório, seja um arquivo, seja um diretório, ou seja qualquer outra coisa (em Unix, tudo é arquivo).

root@linux:home# ls -i
15335425 backup 4741 -C 16252929 helio 14942209 fisl 11 lost+found 15466497 support

Verificado qual o número do i-node, 4741, agora é usar o comando "find" com opção de "-inum" pra mexer nesse arquivo, junto com um "-exec".  Na opção "-exec", o arquivo encontrado é substituído pelo "{}", que é como se fosse uma variável com o que foi encontrado pelo parâmetros anteriores, no caso o "-inum".  

Então basta usar isso pra renomear o arquivo pra qualquer outro nome.

root@linux:home# find . -maxdepth 1 -inum 4741 -exec mv {} arquivo_alien \;

Verificando...

root@linux:home# ls
backup helio fisl lost+found support arquivo_alien

Agora descobrindo o que é esse arquivo.

root@linux:home# file arquivo_alien
arquivo_alien: POSIX tar archive (GNU)
root@linux:home# mv arquivo_alien arquivo_alien.tar
root@linux:home# tar tvf arquivo_alien.tar
drwxr-xr-x root/root 0 2014-10-09 12:05 home/
drwxr-xr-x fisl/fisl 0 2014-03-05 10:16 home/fisl/
drwxr-xr-x fisl/fisl 0 2014-03-05 10:16 home/fisl/.purple/
-rw-r--r-- fisl/fisl 173 2014-03-05 10:16 home/fisl/.purple/blist.xml
drwxr-xr-x fisl/fisl 0 2013-07-04 22:21 home/fisl/.purple/certificates/

Realmente um arquivo do tipo tar.  Provavelmente de algum backup que tentei fazer e passei a opção de forma errado.  Sem stress e problema resolvido.

root@linux:home# rm arquivo_alien.tar
Print

1 mês sem facebook

Written by Helio Loureiro on .

Durante uma conversa na rede social Diaspora (tenho uma conta no joindiaspora.com), aceite um desafio de ficar 1 mês fora do FaceBook.

Qual o motivo da ausência?  Segundo o desafio, era impossível de se ficar fora da rede, que a rede nos obrigava a estar lá.  O desafio também incluia uma ausência conjunta do Whatsapp, mas essa foi fácil, pois já faz algum tempo que substitui pelo Telegram.  Entre as maiores vantagens desse, além da tão falada criptografia e segurança (que não acredito muito, mas vá lá) tem o fato de funcionar como webapp em qualquer browser.  Isso facilita em muito a vida e não entendo as pessoas continuando a usar o Whatsapp.  É tão anos 2010.

Mas voltando ao contro do assunto, e falando mais da ausência do Facebook.  Foi assim, sem mais nem menos.  Sem aviso. Apenas parei de usar.  Como estava num processo de recuperação do meu celular - que eu tinha brickado tentando instalar cyanogenmod, o que consegui depois - então não tinha o app do Facebook no celular.  Restava somente via browser, o que bastou somente não acessar.

Mantive o acesso do Twitter e do Google+, afinal, segundo o desafio, eles não tinham a dominação do Facebook e não fariam diferença.  E claro, continuei com o Diaspora.

No fim até que foi um bom desafio pois pude ficar fora do Facebook justo durante o período das eleições.  Até onde tinha visto, a coisa tinha virado briga de torcida, então foi um lado bom.

No Twitter não foi muito diferente, mas ao contrário do Facebook, Google+ e Diaspora, dá pra usar um aplicativo cliente não oficial, e esses em geral permitem filtrar tipo de posts indesejados.  Então foi só botar algumas palavras-chave pra me ver livre da briga de torcidas das eleições.

No Google+ eu nunca usei muito, nem o Diaspora, mas essa ausência também não me fez aumentar o uso.  Aliás o pouco que entrei em ambas as redes, as eleições davam o tom.  Um tom de lixo não reciclável, que fedia a racismo e difamação, de todos os lados.  Achei melhor assistir mais o Netflix.

Eu mantive meus aplicativos enviando mensagens pra dentro do Facebook, como Flickr e RunKeeper, onde geralmente posto minhas fotos (quase sempre do tempo fechado e frio) e meus passeios de bike.  Não sei se tiveram repercurssão ou não, acho que vou descobrir agora.

O que mudou na minha vida então depois desse 1 mês fora do Facebook?  Na verdade foi mais de 1 mês.  Foram 5 semanas, pois esperei passar o segundo turno das eleições e depois resolvi esperar passar o chororô de quem perdeu.  Apenas uma pausa: acho que ambos os candidatos eram só mais do mesmo.  Ganhar um ou outro não mudará em nada pra onde a coisa está se encaminhando no Brasil e a resposta será amarga.  Voltando ao assunto, senti falta dos grupos.  Eu já não sou muito usuário da timeline, que passava de vez em quando dando <like> em tudo, e depois mudava pros grupos.  Os que mais gosto são:

Tem outros grupos que gosto de participar também, mas nem todos são abertos ou eu participo tanto.  Também perdi contato com os amigos que ficaram no Brasil.

Ainda não entrei com tudo no Facebook, mas foram poucas mensagens em que fui citado (68) e algumas pessoas tentaram conversar comigo (5).  Dessas conversas, 4 foram de assuntos técnicos, com Linux.

Ou seja, em pouco mais de 1 mês fora do Facebook, 5 semanas, perdi 35 dias.  E só.

Premium Free Joomla Templates by MightyJoomla | Design Inspiration NewWPThemes