quinta-feira, 26 de setembro de 2013
Evitando o ruído matinal
Este ano descobri o Télématin da TV5 (TV francesa). Não havendo qualquer outro motivo para aprender a língua francesa, ter o prazer de assistir à programação matinal da TV5 já deveria bastar. Os apresentadores são bem-humorados, o conteúdo é leve e informativo. Quando discutem política ou economia, o fazem com seriedade e alguma profundidade (o tempo, é claro, também é exíguo na TV francesa).
Fujo assim do ruído matinal dos noticiários da RBS e da Globo. Eles contêm excesso de violência (quem quer saber de violência durante o café da manhã?), excesso de futebol (mesmo quando não há jogos!) e bobagens como a abertura das bolsas. Se o movimento de fechamento das bolsas informa pouca coisa, que dirá o de abertura! A variação diária da bolsa de valores é apenas ruído: metade dos dias ela sobe e metade dos dias ela desce. Agregar uma explicação é patético, quando não malicioso.
Os apresentadores da TV5 conseguem ser divertidos sem cair no ti-ti-ti que as mocinhas da RBS julgam apropriado para um programa de informação. Os franceses também falam de esportes, mas não se limitam ao futebol e tampouco gastam tanto tempo nele quanto os jornalistas locais. De quando em vez tenho a sorte de assistir às Escapadas de Petitrenault (que segue o Télématin), um programa no qual o Monsieur Petitrenault passeia pela França conversando com as pessoas principalmente sobre a culinária local, mas sempre em lugares interessantes (e nunca dentro de estúdio).
O principal jornal gaúcho, a Zero Hora, é o maior representante da pobreza jornalística do estado. Tem muito mais opinião que análise. Dificilmente as notícias são colocadas num contexto histórico; parece que retórica basta. A seção mais informativa são os classificados. Na última página, para fechar em grande estilo, temos a opinião de um senhor que confessou que lê apenas o jornal para o qual escreve.
A Globo consegue inadvertidamente agregar algum humor quando convoca um correspondente estrangeiro em Buenos Aires para apresentar notícias da Venezuela. Ou alguém em Kuala Lumpur para informar sobre Tóquio (ao vivo!).
Eu tenho sorte, posso usufruir da TV5, da TVE, da BBC e até da DW (que tem programação em espanhol e inglês). É uma pena que muitos de meus compatriotas estejam presos ao mundo pequenino (e um tanto sombrio) das mídias nacionais, porque elas ofercerem muito pouco.
quarta-feira, 11 de setembro de 2013
Respeito
A última palavra do dia foi respite, cuja avó latina é respectus. Em português, respeito descende dessa palavra. A latina respectus significa "ação de olhar para trás".
Consequentemente, quando um rapaz passar por uma moça brasileira, cheia de graça, beleza e ziriguidum e olhar para trás, estará, em realidade, demonstrando respeito no sentido mais latino da palavra.
terça-feira, 10 de setembro de 2013
Suporte e seus padrões
- Terceirização - alguns usuários pedem aos colegas para conversar com o suporte; o grande problema é que os colegas geralmente não conseguem esclarecer nenhuma questão, porque não sabem o que houve (sabem apenas que algo de ruim aconteceu);
- Diagnóstico precoce - talvez baseando-se em sua experiência, muitos usuários gostam de entregar o diagnóstico pronto para o suporte; infelizmente, estão com frequência errados, ou o diagnóstico é insuficiente;
- Informação insuficiente - é comum ver imagens de telas (inclusive BMPs de 3MB com "Page not found - 404"), sem o devido contexto, quando muito mais simples seria um número de documento ou uma URL;
- Atraso - alguns usuários esperam uma ou duas semanas antes de reclamar de um problema; com frequência, o problema torna-se insolúvel (porque os logs já foram apagados) ou impraticável (recuperar um backup do banco de dados, quando teria sido possível executar uma consulta de flashback no momento da falha);
- Dificuldade com o óbvio - não importa quanta informação o sistema oferecer, para certos usuários, todos os avisos são inescrutáveis ("por que o sistema está dizendo que minha senha expirou?").
quarta-feira, 31 de julho de 2013
Garimpando acessos ao Apex
Uma URL do Apex termina sempre com algo assim:
/f?p=10702:1:2602444723283688:::::
O único parâmetro p recebe todos os dados separados por ponto-e-vírgula. O primeiro número é o número da aplicação, o segundo é o número da página e o terceiro é o número da sessão.
Nos logs do Apache, encontrei o seguinte:
180.76.5.93 - - [31/Jul/2013:00:00:21 -0300] "GET /aplicprod/f?p=10702:1:2602444723283688::::: HTTP/1.1" 302 -
E a minha missão era a de descobrir quais IPs iniciaram maior número de sessões distintas. A solução é trivial:
perl -ne 'print "$1 $2\n" if /^(\S+).+p=\d+:\d+:(\d{2,})/' access_log \
| sort | uniq | grep -Po "(\d+\.){3}\d+" | uniq -c | sort -nr
O primeiro passo é extrair o IP e o número da sessão e colocá-los lado-a-lado assim:
180.76.5.93 2602444723283688
Isso resolvemos com o Perl. Depois, ordeno todas as linhas e elimino as repetições (que são linhas com o mesmo IP e mesmo número de sessão). Nesse ponto, cada IP aparece tantas vezes quantas sessões distintas tiver abertas para si. Então, retiro o IP de cada linha (com o grep) e conto as ocorrências com os dois últimos comandos (uniq -c | sort -nr).
A conclusão é que o Perl facilita muito a estrepolias com a linha-de-comando e que há uns engraçadinhos nos Estêites e na China que gostam de iniciar sessões do Apex.
sexta-feira, 5 de julho de 2013
Treze meses
O número treze não é muito querido e talvez por isso nunca se dê muita atenção ao fato de que o nosso ano estaria melhor dividido em treze meses que pelos atuais doze. Ou talvez, como eu, as pessoas simplesmente não pensem muito sobre isso.
Supreendeu-me que treze divida 365 tão melhor que doze. O resto é apenas um para o treze, enquanto é cinco para o doze. Além disso, um ano de treze meses produziria meses de exatamente quatro semanas de sete dias (28 dias, portanto).
Esse dia extra poderia viver fora dos treze meses como um dia especial (no primeiro dia do ano, por exemplo), de forma que os dias das semanas caíssem sempre nos mesmos dias de cada mês. Então, o primeiro dia de Janeiro seria sempre uma segunda-feira. E o última dia do ano seria sempre um domingo. Os anos bissextos teriam um segundo dia especial.
Eu nunca tenho ilusões de ser original, dada a quantidade de gente no planeta, então fui pesquisar se isso já havia sido proposto. Descobri que Augusto Compte propôs um "Calendário Positivista" em 1849. Ele também queria renomear totalmente os meses, mas acho que seria mais fácil que o calendário fosse aceito sem uma alteração tão radical.
Resta, então, achar um novo nome para o décimo-terceiro mês. Penso que Minerva seria um bom nome. Em primeiro lugar, para termos ao menos um nome feminino de mês. Em segundo lugar, para manter a tradição de ter nomes romanos. Em terceiro lugar, a expressão "voto de minerva" refere-se justamente a uma votação envolvendo doze jurados e que foi desempatada pela deusa grega Atena (que corresponde à deusa romana Minerva).
Essa alteração seria, ademais, ecológica! Não haveria necessidade de imprimir calendários novos a cada ano. Com a prática, as pessoas sequer precisariam de um calendário para saber que o dia 16 é uma terça-feira, por exemplo. Talvez as oficinas mecânicas sofram um pouco para achar uma desculpa para colocar mulheres exiguamente vestidas nas paredes.
terça-feira, 2 de julho de 2013
Garimpanho logs com expressões regulares
Depois de analisar os logs do Apache, precisei investigar logs do JBoss. Como são logs de aplicações, as linhas não têm formato uniformizado. Logo, é preciso aplicar expressões regulares.
Com a ajuda do Perl, posso extrair o texto de interesse e depois ordenar com sort e uniq.
Por exemplo, o seguinte comando extrai endereços IPs do arquivo server.log:
perl -ne 'print "$1\n" if /((\d+.){3}\.\d+)/' server.log
Então, para ordenar os IPs por frequência, entram sort e uniq:
perl -ne 'print "$1\n" if /((\d+.){3}\.\d+)/' server.log \
| sort | uniq -c | sort -nr | more
Se a busca não requer mais que uma expressão regular, pode-se usar a opção -o do grep, que indica que deve ser impressa apenas a parte da linha identificada pela expressão regular.
grep -Po "(\d+.){3}\.\d+" server.log
A opção -P indica que a expressão regular é da sintaxe do Perl
sexta-feira, 24 de maio de 2013
Garimpando logs do Apache
Cada linha do log do Apache tem essa aparência:
66.249.75.122 - - [24/May/2013:00:01:17 -0300] "GET /a.html HTTP/1.1" 403 213
Meu objetivo era obter uma lista de IPs organizados por números de acessos. Após lutar com os parâmetros de xargs e grep, descobri que algumas opções do sort e do uniq resolvem o problema.
A solução final foi esta:
cat access_log | cut -d - -f 1 | sort | uniq -c | sort -nr
Os detalhes são estes:- cat imprime o arquivo;
- cut -d - -f 1 corta cada linha em campos separados por "-" e extrai o primeiro deles;
- sort ordena as linhas
- uniq -c elimina as linhas repetidas e adiciona o número de linhas
- sort -nr ordena as linhas numericamente (usando o primeiro número em cada uma) em ordem decrescente.
3149 66.249.75.122
3108 66.249.75.22
2747 66.249.75.143
Para descobrir a quem pertencem esses IPs, posso usar o nslookup adicionando o seguinte:
| sed -n '1,3p' | cut -d ' ' -f 5 | nslookup
As adições foram estas:- sed -n '1,3p' imprime as 3 primeiras linhas (os 3 IPs com mais ocorrências no log);
- cut -d ' ' -f 5 recorta o IP (porque eles estão acompanhados do número de ocorrências);
- nslookup procura os nomes associados aos IPs.
