Dump email addresses from files

Suppose you have a lot of .doc, .docx, .xls, .xlsx, .gz, .bz2, .pdf and text in general (.csv, .txt etc.) files and want to dump all the (unique) email addresses from them. How would you do it? Here is a simple solution I’ve just implemented (and probably didn’t test enough, so tell me if you find any bug):

#!/bin/sh
tmp=$(tempfile)
while [ $# -gt 0 ]; do
    if [ -r "$1" ]; then
        ext=$(echo ${1#*.} | tr [A-Z] [a-z])
        case $ext in
            docx | xlsx)
                # requires: http://blog.kiddaland.net/2009/07/antiword-for-office-2007/
                cat_open_xml "$1" >> $tmp
                ;;
            doc)
                # requires: antiword
                antiword "$1" >> $tmp
                ;;
            xls)
                # requires: catdoc
                xls2csv "$1" >> $tmp
                ;;
            gz)
                cat "$1" | gunzip >> $tmp
                ;;
            bz2)
                cat "$1" | bunzip2 >> $tmp
                ;;
            zip)
                unzip -p "$1" >> $tmp
                ;;
            pdf)
                # requires: xpdf-utils
                t=$(tempfile)
                pdftotext "$1" $t
                cat $t >> $tmp
                rm $t
                ;;
            *)
                text=$(file -b --mime-type "$1" | sed -e 's//.*//')
                if [ "z$text" = "ztext" ]; then
                    cat "$1" >> $tmp
                fi
                ;;
        esac
    fi
    shift
done
cat $tmp | grep -o -E '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}\b'
         | tr [A-Z] [a-z] | sort -u
rm $tmp

(the email regexp is explained here: regular-expressions.info/email.html)

HOWTO: Como usar Pandora Radio no Brasil

O projeto Pandora é uma rádio on-line que funciona como um catálogo bem categorizado de milhares de CDs e é capaz de reproduzir músicas parecidas com o tipo que você diz para ele que gosta. Ficou confuso? É assim: eu entro lá e escrevo que gosto de Chico Buarque. Aí ele me diz: vamos tocar uma música do Chico que tem suas características principais como canto em português, violão leve, etc. Responda se você gostou ou não e baseado nessa escolha tocaremos outro estilo ou continuaríamos no mesmo.

É uma idéia muito legal porque no fim você ouve apenas o que gosta, mas também descobre novas músicas (porque ele não fica repetindo artista, álbum, música, mas só as características da música ou do artista que você selecionou a princípio).

Fazia tempo que eu não usava o Pandora porque num esforço comunitário de minha família, digitalizamos algumas centenas de CDs criando uma biblioteca de 35 gb em MP3. Porém, meu desktop (Durion 1.1) que era meu servidor de música (MPD) recentemente morreu (a placa-mãe deu pau) e, cansado de ouvir as poucas músicas que tinha aqui no laptop, resolvi ver como andava o Pandora.

Porém, fui surpreendido por uma mensagem dizendo que por causa de copyright brasileiros não podem mais usar o Pandora. Isso é um problema que eles dizem estar conversando com as autoridades para resolver, mas por hora não podem aceitar IPs brasileiros, o que me levou a buscar uma solução.

A primeira coisa que pensei foi procurar um servidor de proxy nos Estados Unidos. É fácil se você entrar no Public Proxy Servers, mas a velocidade deles realmente não me agrada, ainda mais pra ouvir uma rádio on-line. Então, pesquisei um pouco e depois de algum tempo encontrei a solução: SSH tunneling (túneis de SSH?)

Eu uso SSH todo dia e nunca tinha me dado conta que ele tem uma opção super interessante que é numa dada porta criar um tunelamento que pode ser usado como servidor SOCKS (proxy). Aí você pensa: mas qual a vantagem? De qualquer jeito você terá que usar um servidor proxy e ficar com a internet mais lenta. Sim, é verdade, mas o meu servidor na Dreamhost é sem dúvidas muito mais rápido que um proxy público e eu tenho certeza que minhas informações ficam seguras. Aliás, é por segurança que a maioria das pessoas usa SSH tunneling (ex.: pessoas com laptop numa rede wireless pública)

Vamos ao prático:

$ ssh -C -D 666 -N user@host

E configure seu navegador para usar Socks (eu usei V5, mas a V4 deve funcionar também) para o endereço: 127.0.0.1 (isso mesmo, não é o host que você colocou no SSH, é a sua máquina, porque ela que criou o servidor) na porta que você especificou com o parâmetro -D (nesse caso 666)

As opções do SSH que eu utilizei no exemplo são:

  • -C: comprime entrada e saída. Nos exemplos que eu peguei vinha, acredito que seja pras transferências serem mais rápidas.
  • -D [bind:]port: porta (e um endereço opcional) pro servidor rodar
  • -N: não executa nenhum comando (ie não abre um shell)

Esta dica funciona em sistemas operacionais que tem SSH (Linux, FreeBSD e provavelmente qualquer outro Unix-like). Para usá-la no Windows, você deve usar o PuTTy.

Programas indispensáveis no meu computador

O Tiago Celestino me convidou pra esse meme há… mais de três meses. Antes tarde do que nunca, então lá vamos nós.

Pra começar, a definição de programa é complicadíssima. Pra mim, não adianta ter Firefox se não tenho ifconfig. Da mesma forma, será que uma biblioteca é um programa? Para ter Firefox eu tenho que ter várias libs, que talvez eu não possa nessa brincadeira. E se eu puder escolher um programa sem pensar em nada disso, será que posso escolher o apt-get?

Bem… Parti do princípio de que tenho todas as libs do mundo que eu quiser, não vale apelar pro apt-get e não vale baixar outros programas. Nesse caso, eu escolheria os seguintes três programas pra viver:

Bash

Página oficial

A vida sem terminal não tem graça. Se bem que não sei se vou conseguir usar 1/10 dos recursos do Bash sem programa nenhum, isso é, sem ls, grep, sed… Quem se importa? Ao menos pra chamar o Vim e o Ruby preciso de um shell, e escolho o Bash.

Vim

Página oficial

Editor de texto de macho, sem frescuras. Esse programa me acompanha há anos, não consigo me ver longe dele, suas utilidades são infinitas.

Ruby/IRB

Página oficial

Minha nova linguagem. Tem que vir com documentação, senão eu tô ferrado. Mas já que tenho todas as libs e tempo do mundo, posso desenvolver o que eu quiser e dessa forma depois de algum tempo terei muitos outros programas.

Um navegador talvez até seja indispensável, mas acho que é algo sacrificável, já que tenho o Ruby pra fazer requisições HTTP e que dá pra se virar na unha.

Algo indispensável que eu me esqueci é o SSH. É sempre uma das primeiras coisas que faço questão de ter nas minhas instalações, com ele conecto na Dreamhost e de lá eu governo o mundo. O Wget também faria muita falta assim como um leitor de PDF e um programa pra ouvir música (mpd, sem sombra de dúvidas). Mas acho que nenhum desses é mais importante que os três primeiros.

Respondido?

Passo esse meme para o Ilmo. Sr. Rev. Ibrahim Cesar, Ilmo. Sr. John Artmann Jr. e para o Ilmo. Sr. Vinicius de Figueiredo.

Linux NÃO é Windows

Linux não está interessado em market share. Linux não tem clientes. Linux não tem acionistas, ou uma responsabilidade no rodapé. Linux não foi criado para fazer dinheiro. Linux não tem a meta de ser o sistema operacional mais popular e espalhado do planeta.

O que toda a comunidade do Linux quer é criar um sistema operacional realmente bom, cheio de recursos e livre. Se isso resultar em Linux ser um sistema bem popular, então isso é ótimo. Se isso resultar em Linux ter a interface mais intuitiva e amigável já criada, então isso é ótimo. Se isso resultar em Linux se tornar a base de uma indústria multi-bilionária, então isso é ótimo.

Isso é ótimo, mas não é o ponto. O ponto é fazer do Linux o melhor sistema operacional que a comunidade é capaz de fazer. Não para outra pessoa: para si mesmo. As tão comuns ameaças de “Linux nunca vai dominar os desktops a não ser que seja de tal maneira” são simplesmente irrelevantes: a comunidade do Linux não está tentando dominar o desktop. Eles realmente não se importam se ele ficar bom o suficiente para rodar em cima do seu desktop, desde que ele continue bom o suficiente para estar nos deles. Os gritões que odeiam a Microsoft, invejosos fanáticos pró-Linux, e fornecedores de software livre que fazem isso pra ganhar dinheiro podem falar alto, mas eles ainda são minoria.

Isso é o que a comunidade do Linux quer: um sistema operacional que pode ser instalado por qualquer pessoa que realmente o queira. Então, se você está considerando migrar pro Linux, primeiro pergunte a si mesmo se é isso mesmo que você quer.

Se você quer um sistema operacional que não seja seu motorista, mas que lhe dê as chaves, coloque você no banco de motorista, e espera que você saiba o que fazer: use Linux. Você vai ter que dedicar algum tempo para aprender como usá-lo, mas depois que você tiver aprendido, você terá um sistema operacional que você pode fazer sentar e dançar.

Se você realmente só quer Windows sem malware e problemas de segurança: leia sobre boas práticas de segurança; instale um bom firewall, detector de malware e anti-vírus; troque o Internet Explorer por um navegador mais seguro; e mantenha-se atualizado com atualizações de segurança. Há pessoas por aí (eu, inclusive) que têm usado Windows desde os tempos de 3.1 até o XP sem nunca terem sido infectados com um vírus ou malware: você pode fazer isso também. Não use Linux: ele vai falhar miseravelmente em ser o que você quer que ele seja.

Se você quer a segurança e a performance de um sistema operacional baseado em Unix, mas com uma atitude focada no cliente e uma interface famosa no mundo inteiro: compre um Mac. OS X é ótimo. Mas não use Linux: ele não vai fazer o que você quer que ele faça.

Não se trata apenas de “Por que eu deveria querer Linux?”. Se trata também de “Por que Linux deveria me querer?”

Tradução livre feita por mim da conclusão do Linux is NOT Windows, que é licenciada e pertence a Dominic Humphries.

Muito interessante o artigo do cara. Pensei em traduzir tudo, mas não tenho tempo pra isso nesse momento. Se vocês gostarem, quem sabe em janeiro eu traduza um item de cada vez e escreva vários artigos sobre isso…

Lembram que eu perguntei por que você usa o seu sistema operacional? Não foi uma pergunta pra mandar você usar algum sistema operacional específico, porque você é livre, mas para que você use o que você achar melhor sabendo fazer essa escolha.

Eu não quero usar um sistema operacional igual o Windows XP, com aqueles recursos chatos como fazer uma ação sempre que eu pluggo qualquer coisa no computador (meu pai, que usa Windows 98, sempre reclama: esse Windows XP fica abrindo um monte de coisa sem eu pedir nada!) e onde eu não controle. Eu não quero um motorista; Eu quero dirigir! E eu uso Linux porque ele me permite muitas coisas que o Windows não permite.

Quero aproveitar o artigo para citar o excelente Falcon Dark:

Nos últimos tempos os desenvolvedores dos vários sabores de GNU/Linux decidiram que era hora de desbancar o Microsoft Windows onde ele era forte: desktops domésticos e aplicações e desktops de pequenas e médias empresas. E o desenvolvimento do GNU/Linux e seus correlatos (como interfaces gráficas, programas, drivers, aplicações) passou então a seguir os passos do próprio Windows.

Gnome e KDE apresentam interfaces com funcionamento e look & feel semelhantes ao Windows. Os programas como navegadores de web (Firefox), office (OpenOffice) desenvolvimento (Eclipse, etc.) ainda que apresentem funcionalidades que seus competidores não possuam inspiram-se nas interfaces concorrentes para tratar o usuário. Tenho a impressão que isso dê-se pela idéia de que se o Firefox parecer bastante com o Internet Explorer o usuário migrará com mais facilidade, idem para o OpenOffice que em sua versão 2 abandonou sua identidade visual anterior para buscar uma identificação maior com o Microsoft Office.

Mesmo que isso proporcione uma maior facilidade de migração, traz consigo um problema. Ao seguir os passos de alguém, você está sempre atrás. Enquanto a Apple é conhecida por inovar nas interfaces de seus produtos e usa isso como seu grande diferencial as interfaces de GNU/Linux parecem sempre ser uma adaptação do desenho da última interface adotada no Windows. Fica a impressão que junto com os acertos repetiremos também todos os erros dos outros sistemas. Ser uma alternativa ao que já está implementado significa antes de tudo ser diferente do que já está implementado. As pessoas tendem a não enxergar diferenças entre coisas que são muito similares. E acabam por concluir que é igual.

E assim vai ser com tudo que os desenvolvedores Linux esperarem sair em outro sistema antes para ter certeza que dará certo. Seja com EFI, seja com novos sistemas de arquivos, com uma nova abordagem para a organização e uso do desktop, seja com um novo método de instalar programas. Se você quiser ser reconhecido por algo diferente e inovador, você deve fazer algo diferente e inovador.

O maior ponto fraco do GNU/Linux enquanto alternativa ao Windows hoje é esse: estar mais preocupado em implementar coisas que o Windows implementa do que implementar coisas novas que a Microsoft nem tenha avaliado ainda. Há muito o que fazer nessa área. Coisas como Personal Clustering ou Desktops Remotos, são coisas que em um futuro podem ser desejáveis para muitos usuários e que o GNU/Linux não poderia esperar o Windows trazer para também decidir implementar. A inovação deve estar sempre em prineiro lugar para que o Linux possa apresentar-se com um diferencial forte ao ser considerado alternativa ao Windows. E aí me dá uma saudade da Conectiva… ;-)

Tenho certeza que o Linux não decepcionará quem estiver disposto a perder um tempo pra aprender a dirigir. E para quem precisar de ajuda sempre haverá uma grande comunidade disposta a ajudar (eu inclusive). Vamos inovar! Vamos fazer o melhor sistema operacional do mundo, pra nós! Usuários não-preguiçosos de todo mundo, uni-vos!

Diálogo entre programas

Continuando a falar das facilidades do Linux, eu ia escrever um post para mostrar como é sensacional a conversa que os programas têm um com o outro no Linux e em outros sistemas baseados em Unix.

Quando eu estava começando, lembrei que o Elcio já escreveu um artigo muito interessante sobre isso há um mês. Então, não vou reinventar a roda. Leiam o artigo dele e vejam se é possível fazer algo parecido no Windows: Streamming e download ao mesmo tempo

Nas palavras do Elcio:

Colocamos para trabalhar juntos três programas diferentes, escritos por pessoas diferentes, e tudo funcionou. As coisas geralmente são assim no Linux, porque os programas Unix são feitos para que você possa usá-los juntos.

Como diz o Falcon, a gente não deve fazer ninguém usar Linux por ser parecido com Windows. O Linux é diferente do Windows e os usuários que vão migrar precisam saber disso e estar cientes de que vão ter que aprender um pouco. Mas é um marketing excelente mostrar as vantagens desse sistema operacional e deixar as pessoas livres para optarem.

Eu acredito na filosofia do Linux, mas, se ele fosse uma merda, eu continuaria usando Windows. Eu uso Linux, porque com ele eu trabalho muito mais rápido e faço uma série de coisas que eu não consigo fazer no Windows.

E quem usa Windows… Por que usa Windows?

© 2005–2020 Tiago Madeira