Arquivo do Autor: andreba

Mulher: cuidados básicos

Recebi o texto abaixo por e-mail, supostamente de autoria do Luiz Fernando Veríssimo. Como achei muito bom, faço minhas suas palavras.


O desrespeito à natureza tem afetado a sobrevivência de vários seres e entre os mais ameaçados está a fêmea da espécie humana.

Tenho apenas um exemplar em casa, que mantenho com muito zelo e dedicação, mas na verdade acredito que é ela quem me mantém. Portanto, por uma questão de auto-sobrevivência, lanço a campanha “Salvem as Mulheres!”

Tomem aqui os meus poucos conhecimentos em fisiologia da feminilidade a fim de que preservemos os raros e preciosos exemplares que ainda restam:

1. Habitat

Mulher não pode ser mantida em cativeiro. Se for engaiolada, fugirá ou morrerá por dentro. Não há corrente que as prenda e as que se submetem à jaula perdem o seu DNA. Você jamais terá a posse de uma mulher, o que vai prendê-la a você é uma linha frágil que precisa ser reforçada diariamente.

2. Alimentação correta

Ninguém vive de vento. Mulher vive de carinho. Dê-lhe em abundância. É coisa de homem, sim, e se ela não receber de você vai pegar de outro. Beijos matinais e um ‘eu te amo’ no café da manhã as mantém viçosas e perfumadas durante todo o dia. Um abraço diário é como a água para as samambaias. Não a deixe desidratar. Pelo menos uma vez por mês é necessário, senão obrigatório, servir um prato especial.

3. Flores

Também fazem parte de seu cardápio – mulher que não recebe flores murcha rapidamente e adquire traços masculinos como rispidez e brutalidade.

4. Respeite a natureza

Você não suporta TPM? Case-se com um homem. Mulheres menstruam, choram por nada, gostam de falar do próprio dia, discutir a relação. Se quiser viver com uma mulher, prepare-se para isso.

5. Não tolha a sua vaidade

É da mulher hidratar as mechas, pintar as unhas, passar batom, gastar o dia inteiro no salão de beleza, colecionar brincos, comprar muitos sapatos, ficar horas escolhendo roupas no shopping. Entenda tudo isso e apoie.

6. Cérebro feminino não é um mito

Por insegurança, a maioria dos homens prefere não acreditar na existência do cérebro feminino. Por isso, procuram aquelas que fingem não possuí-lo (e algumas realmente o aposentaram!). Então, aguente mais essa: mulher sem cérebro não é mulher, mas um mero objeto de decoração. Se você se cansou de colecionar bibelôs, tente se relacionar com uma mulher. Algumas vão lhe mostrar que têm mais massa cinzenta do que você. Não fuja dessas, aprenda com elas e cresça. E não se preocupe, ao contrário do que ocorre com os homens, a inteligência não funciona como repelente para as mulheres.

7. Não faça sombra sobre ela

Se você quiser ser um grande homem tenha uma mulher ao seu lado, nunca atrás. Assim, quando ela brilhar, você vai pegar um bronzeado. Porém, se ela estiver atrás, você vai levar um pé-na-bunda.

Aceite: mulheres também têm luz própria e não dependem de nós para brilhar. O homem sábio alimenta os potenciais da parceira e os utiliza para motivar os próprios. Ele sabe que, preservando e cultivando a mulher, ele estará salvando a si mesmo.

E meu amigo, se você acha que mulher é caro demais, vire GAY.
Só tem mulher quem pode!

De Volta Para o Futuro em 2010

Está circulando um e-mail por aí com uma foto do painel do carro do filme De Volta Para o Futuro Parte II, com a suposta data em que o Marty McFly chegava no futuro, como sendo hoje (06 de julho de 2010).


Esta é a foto que recebi no e-mail:

Foto falsa do painel, mostrando 06 de julho de 2010

De cara estranhei a data… eu tinha 15 anos em 1990 quando vi o filme no cinema, e me lembro que a estória se passava em 1985 (o “presente” no filme), e que ele viajava 30 anos para o futuro, portanto para o ano 2015. Fui conferir minha memória na Wikipedia e não só vi que realmente o ano certo seria 2015, mas que este e-mail que está circulando é lorota. A imagem foi editada. Olha aí embaixo a imagem real, cortesia da Wikipedia:

Foto com a data correta, 21 de outubro de 2015

Pois é gente, eu tô desde 1990 esperando 2015 chegar pra ver se os adolescentes vão mesmo usar a calça jeans do avesso, os carros vão voar, as roupas vão se ajustar e secar sozinhas, vai ter pilhas de laserdiscs de lixo nas ruas (hahahaha), e outras coisas do tipo. Pelo menos eu venho reclamando sobre o não surgimento dos carros voadores desde o ano 2000 🙂

Se bem que essa dos carros voadores é bem mais antiga que este filme; muitas estórias de ficção científica do século passado tinham essa ideia. Talvez os Jetsons tenham sido grandes culpados em propagar a ideia, mas eu lembro de outras… já li uma estória em quadrinhos do Mickey de 1950 (em preto e branco), onde o Mickey viajava no tempo para o ano 2000 e não só os carros voavam, como até mendigo ficava deitado em rede flutuante pedindo esmola. Só não coloco um scan dessa cena online, porque essas revistas ficaram na casa de meus pais, em outro estado.

Filmes atuais como jogos antigos

Não resisti e tive que fazer um comentário desta notícia aqui:
E se os filmes atuais fossem jogos de Atari…


Sinto dizer, mas… o jornalista que escreveu essa matéria tentou comparar os jogos imaginados com jogos antigos de Atari, mas pelo visto ele não entende nada de Atari. Vejamos:

  • O jogo do Lost não parece Pitfall coisa nenhuma. Parece um adventure antigo da LucasArts, acredito que o próprio Monkey Island (assim a ironia é perfeita 🙂 ) (ah, e não era de Atari, era de PC mesmo)
  • O jogo do Avatar foi identificado como sendo mistura de Pitfall com Donkey Kong, mas duvido que seja; deve ser algum outro que não conheço. Quem souber favor comentar. (Mas me lembrou o Macacos me Mordam, do saudoso Odyssey)
  • A pior comparação: o jogo do WALL-E foi identificado como sendo o River Raid… olha bem para aquela imagem e me diga se aquilo parece o River Raid ou o Tetris. Tem até o aviso da próxima peça que vai cair, ali na direita. (e a piada fica completa: Tetris tem conjuntos de bloquinhos caindo para serem empilhados, o WALL-E compactava lixo em bloquinhos e empilhava)

Comentários bônus:

No site da empresa que fez as imagens tem mais alguns outros; tente adivinhar qual é o jogo do monstro de Cloverfield e clique no “more” abaixo para conferir meu palpite.
Continue lendo

CACTI plugin architecture in Debian

Instalando o CACTI plugin architecture no Debian (usando a versão do testing do CACTI, 0.8.7e neste momento). O plugin architecture não faz parte do pacote Debian e precisa ser instalado manualmente, com algumas adaptações à instalação do Debian.
Ao aplicar o patch no diretório do CACTI (/usr/share/cacti/site), seguindo estas instruções, dá erro ao patchear o arquivo include/global.php. Então este arquivo foi copiado manualmente dos arquivos que vêm junto com o patch para /usr/share/cacti/site/include.
Mais algumas alterações são necessárias, conforme eu descobri nesta thread. O que eu fiz:

  • Editei o arquivo /usr/share/cacti/site/include/global.php (na linha 22, nesta versão), trocando
    $config['url_path'] = '/';
    por
    $config['url_path'] = '/cacti/';
  • Ainda no arquivo global.php, (na linha 202, nesta versão) troquei
    include($config["library_path"] ."/adodb/adodb.inc.php");
    por
    include("/usr/share/php/adodb/adodb.inc.php");

Por enquanto foi só isso. Depois vou instalar alguns plugins e ver se está tudo funcionando.
Installing CACTI plugin architecture in Debian (using the testing version, CACTI 0.8.7e at this moment). The plugin architecture don’t come installed in the Debian package, needing to be installed manually, with some adjustments as described below.
I applied the patch in CACTI directory (/usr/share/cacti/site), following these instructions, and got an error when patching file include/global.php. So this file was manually copied from the patch files to /usr/share/cacti/site/include.
Some more adjustments were needed, as I learned in this thread. This is what I did:

  • Edited the file /usr/share/cacti/site/include/global.php (line 22, in this version), replaced
    $config['url_path'] = '/';
    with
    $config['url_path'] = '/cacti/';
  • Still in global.php, (line 202, in this version) replaced
    include($config["library_path"] ."/adodb/adodb.inc.php");
    with
    include("/usr/share/php/adodb/adodb.inc.php");

That’s it. Now I will try adding some plugins and see if it all works well.

Histórias de Usuários

Hoje, organizando uns arquivos velhos que tinha guardado, achei um texto com alguns relatos meus de dez anos atrás, quando comecei a trabalhar na área de informática e a maior parte do tempo eu fazia atendimento a usuários. Isso no tempo dos Windows 95 e 98, e com usuários que não tinham recebido nenhum treinamento de informática.
Os relatos são do final dos anos 90, quando eu trabalhei como administrador de rede em um certo lugar que contava com várias unidades em outras cidades, e por causa disso, a maioria dos atendimentos de suporte a usuário eram feitos via telefone mesmo.
Caso 1
Telefonou uma pessoa dizendo que estava imprimindo, mas na impressora HP só saía “sujeira”. Geralmente isso acontecia porque alguns computadores tinham um chaveador de impressora, e o que devia ir para uma impressora matricial foi para uma jato de tinta. Também haviam computadores com duas portas paralelas (de impressora), então podia ser configuração errada: o driver de HP imprimindo para a LPT2 ao invés da LPT1 ou vice-versa.
Por isso, perguntamos logo de cara se aquele micro tinha chaveador de impressora; “não” foi a resposta. Aí perguntamos: “Tem duas impressoras instaladas nesse micro?”
A usuária pediu um momento, afastou a boca do telefone e gritou:
“Ô fulana, tem duas impressoras nesse micro que eu estou usando?”
Caso 2
Uma usuária estava tomando um curso de um sistema para Windows 95. Só que as máquinas do curso estavam configuradas para trabalhar em rede, portanto ao ligar aparecia a tela de logon, pedindo nome de usuário e senha. Como a usuária nunca tinha visto essa tela (só tinha usado máquinas fora da rede), ela chamou o professor dizendo que tinha uma tela estranha… pedindo uma senha…
O professor, já sabendo o que era, disse: “Tecle ESC pra sair dessa tela”.
A usuária: “Aqui só tem OK e CANCELAR”.
Caso 3
Usava-se o Lotus Notes como sistema de correio eletrônico. De tempos em tempos, os usuários recebiam uma mensagem sobre “renovação do certificado Notes” e que existe uma data limite para a renovação. Geralmente eles ligavam para perguntar o que é isso, e daí o administrador Notes explicava o que fazer.
Acontece que, quando expira a data limite e o usuário não solicitou a renovação do certificado, ele não consegue acessar mais seu correio… e o adm. Notes tem de deletar o usuário e recriá-lo, mas precisa saber da senha do usuário (ou assim me explicaram os administradores do Notes, na época). Uma coisa chata de se perguntar ao usuário, mas enfim… só se chegava a essa situação porque o próprio usuário passou meses recebendo a mensagem sobre o certificado e não o renovou.
Depois de muita conversa o pobre administrador do Notes descobriu que o usuário estava fazendo o seguinte: todas as vezes que via a mensagem do certificado, ele alterava a senha. (existia uma mensagem semelhante, que pede para o usuário trocar a senha dele em um certo prazo — mas isso não tem nada a ver com o certificado).
Finalmente, o usuário foi dizer pro adm. Notes qual era a senha dele, explicando assim pelo telefone: “Fulano, minha senha é o seguinte… zero-nove-zero-nove-zero-nove, mas primeiro eu vou pra esquerda, depois eu vou pra direita”.
Tradução (obtida depois de mais vários minutos de conversa): Sabe qual era finalmente a senha do cara? o90909 (“ó”-nove-zero-nove-zero-nove). Ele chamou a tecla O (“ó”) de zero. E o caso de direita-esquerda era o seguinte: ele digitava a tecla O no lado esquerdo do teclado (parte alfanumérica), depois ia para a parte direita do teclado e digitava o 90909 restantes.
No meio da conversa toda, o usuário tentou explicar assim, para o já confuso administrador Notes: “Esse zero aqui, onde tem no teclado, i-zero-pê…”
Caso 4
Ao perguntar para um funcionária porque os formulários dela eram preenchidos todos à máquina de escrever, ao invés de com o computador, recebi a resposta:
“Minha impressora não tem Word nem Excel.”
Atualização: relendo este caso 4 agora, eu me lembrei porque a usuária deu esta resposta: é que a impressora dela era matricial, ainda muito comum naquela época, e portanto não imprimia documentos feitos em programas para Windows. Ou seja, ela não podia imprimir nada feito em Word ou Excel naquela impressora.

HTML hates Regexp

English version below.

This probably should get HTML tags out of a string...

This probably should get HTML tags out of a string...

Visto no http://www.codinghorror.com/:

You can’t parse [X]HTML with regex. Because HTML can’t be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML.
Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions.
Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes.

Artigo completo: http://www.codinghorror.com/blog/archives/001311.html
Nunca cheguei a fazer nenhum parsing sério de HTML com expressões regulares, mas pelo visto não é uma boa idéia. A menos que você queira apenas checar algumas tags simples.
Este comentário no artigo esclarece um pouco mais:

For the brave of heart: Write a regular language to recognize all strings of balanced parens.
Actually, don’t, because this is provably impossible.
Why? Because regular expressions recognize *regular languages*, a specific, well-defined class of languages. HTML, like the balanced parens problem above, doesn’t conform to this pattern.
Every once in a while, I’m reminded of why studying bona fide computer science in college was the right idea. It won’t necessarily make you a better programmer, but it has saved me from doing really stupid things from time to time, like trying to parse html with a regex.
David R. Albrecht on November 16, 2009 10:23 AM

Realmente, regexps não podem ser usadas para nada além de checar tags simples, e nunca para um texto HTML inteiro: (http://www.perlmonks.org/?node_id=8624)

you cannot write a regexp that will match any level of nested balanced parentheses. You can always write one to match a specific number of balanced ones, but not one that can match a non- fixed number of these. I think there is an explaination in the Friedl book.

Um comentário retirado do Regular Expression HOWTO que resume bem a situação:

(Note that parsing HTML or XML with regular expressions is painful. Quick-and-dirty patterns will handle common cases, but HTML and XML have special cases that will break the obvious regular expression; by the time you’ve written a regular expression that handles all of the possible cases, the patterns will be very complicated. Use an HTML or XML parser module for such tasks.)

Portanto… não faça isto.


This probably should get HTML tags out of a string...

This probably should get HTML tags out of a string...

Visto noSeen at http://www.codinghorror.com/:

You can’t parse [X]HTML with regex. Because HTML can’t be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML.
Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions.
Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes.

Full article: http://www.codinghorror.com/blog/archives/001311.html
I never used regular expressions to do any serious HTML parsing, but thinking about it it doesn’t looks a good idea. Unless you just want to check some simple tags.
This comment in the article is interesting:

For the brave of heart: Write a regular language to recognize all strings of balanced parens.
Actually, don’t, because this is provably impossible.
Why? Because regular expressions recognize *regular languages*, a specific, well-defined class of languages. HTML, like the balanced parens problem above, doesn’t conform to this pattern.
Every once in a while, I’m reminded of why studying bona fide computer science in college was the right idea. It won’t necessarily make you a better programmer, but it has saved me from doing really stupid things from time to time, like trying to parse html with a regex.
David R. Albrecht on November 16, 2009 10:23 AM

Indeed, regexps cannot be used to anything else beyond checking simple tags, and never for a full HTML text: (http://www.perlmonks.org/?node_id=8624)

you cannot write a regexp that will match any level of nested balanced parentheses. You can always write one to match a specific number of balanced ones, but not one that can match a non- fixed number of these. I think there is an explaination in the Friedl book.

A comment taken from the Regular Expression HOWTO that sums it up well:

(Note that parsing HTML or XML with regular expressions is painful. Quick-and-dirty patterns will handle common cases, but HTML and XML have special cases that will break the obvious regular expression; by the time you’ve written a regular expression that handles all of the possible cases, the patterns will be very complicated. Use an HTML or XML parser module for such tasks.)

So… don’t do this.

Shell script e cacls

O problema: um colega de trabalho queria checar as permissões de acesso de uma grande árvore de pastas em um servidor Windows. Muitos níveis de subpastas e permissões diferentes em cada uma. Por grande árvore de pastas, entenda por volta de umas 43000 pastas.
Eu não sei dizer se tem ferramenta mais fácil pra fazer o que ele queria, ou se um script VBS poderia resolver; eu até sugeri VBS, mas nenhum de nós dois conhecíamos o suficiente e aprender para resolver o problema iria tomar algum tempo. Então, ele e eu tomamos rotas usando ferramentas já conhecidas. Ele queria gerar uma saída de texto de cada pasta, usando o comando cacls do Windows, que permite listar e alterar as permissões via linha de comando. A saída desse comando é similar a isto:

Os nomes foram trocados para preservar os personagens.

Os nomes foram trocados para preservar os personagens.


Ou seja: o nome completo da pasta em questão, seguido das permissões. Havendo mais de uma permissão, elas aparecerão nas linhas seguintes, identadas com espaços para ficarem na mesma coluna que a primeira permissão listada (cuja coluna dependerá do tamanho do nome da pasta/arquivo listado).
Meu colega me perguntou se tinha alguma forma de rodar estas saídas em um script de forma a acrescentar o nome de pasta a cada uma das permissões subsequentes, de forma a facilitar a verificação; por exemplo, a listagem acima ficaria assim (usando : para separar nomes de pasta, de usuário/grupos e permissões):
\\stgreceita1\rfoc$\compartilhamentos\OC\DIESP\DIJUT\18 Controle de PL:BUILTIN\Administradores:(OI)(CI)F
\\stgreceita1\rfoc$\compartilhamentos\OC\DIESP\DIJUT\18 Controle de PL:RFOC\Domain Admins:(OI)(CI)R
\\stgreceita1\rfoc$\compartilhamentos\OC\DIESP\DIJUT\18 Controle de PL:RFOC\LS_COMP_DIESP_R:(OI)(CI)R
\\stgreceita1\rfoc$\compartilhamentos\OC\DIESP\DIJUT\18 Controle de PL:AUTORIDADE NT\SYSTEM:(OI)(CI)F

Solução: tentei fazer de cara com o sed, tentando descobrir uma forma de pegar tudo o que aparecia na linha antes do último espaço e repetir nas demais linhas, substituindo os espaços da linha; mas acabei ficando com este two-liner que deu conta do recado:
caminho=$(cat arq.txt | awk '(NR==1) { printf $1; for(i=2; i<nf ; i++) { printf " "; printf $i } }' | tr '\\' '/')
cat arq.txt | sed 's/acesso especial/acesso_especial/' | awk "{ print \"$caminho\:\"\$NF }" | tr '/' '\\' >> saida.txt

Sendo arq.txt o arquivo que contém a saída do cacls para uma pasta, e saida.txt o arquivo de saída. Depois bastou criar um loop para executar esses dois comandos para cada arquivo de entrada e pronto.
O primeiro comando pega o caminho da pasta, lendo apenas a primeira linha do arquivo e capturando tudo até o último espaço; depois esse caminho é acrescentado pelo segundo comando no começo de cada linha, retirando os espaços de identação. O sed da segunda linha está lá apenas para tratar o caso do texto “acesso especial”, que contém um espaço e atrapalhava o funcionamento do awk seguinte.
Como disse, pode ser que uma linguagem de script já própria do Windows como VBS ou Powershell resolvesse o problema de forma mais simples, mas como meu colega queria uma solução rápida resolvemos desta forma. Conhecer um pouco de shell e ter um cygwin instalado na máquina Windows ajudou bastante 😉

Licenças de Software Livre e de Código Aberto

Ontem dei uma palestra no Serpro, onde trabalho, na Regional Brasília. sobre o tema Licenças de Software Livre e de Código Aberto. O conteúdo está disponível para download na página aulas e palestras.
UPDATE: pode-se assistir ao vídeo da apresentação e baixar o vídeo aqui.