Arquivo da categoria: Dicas

Script para baixar documentos do Issuu no GNU/Linux

Tive necessidade de baixar um documento do Issuu. Segue um script simples que escrevi para baixar as páginas, convertê-las para PDF e mesclá-las. Ele não tem checagem de erros, mas pode ser útil para mais pessoas:

#!/bin/bash
 
if [ $# -lt 1 ]; then
    echo "Uso: $0 <endereco_do_documento_no_issuu>"
    exit
fi
 
tmp=$(mktemp -d)
 
echo "Baixando pagina HTML..."
wget -q "$1" -O $tmp/html
 
pageCount=$(cat $tmp/html | grep -o '"pageCount":[0-9]*' | sed 's/.*://')
model=$(cat $tmp/html | grep 'image_src' | sed 's/.*href="//; s/".*//')
title=$(cat $tmp/html | grep '<title>' | sed 's/.*<title>//; s/<\/title>.*//')
 
echo "-> Encontrado documento de $pageCount paginas"
echo "-> Primeira pagina: $model"
 
for i in $(seq 1 $pageCount); do
    download=$(echo $model | sed "s/page_1/page_$i/")
    echo "Baixando pagina ${i}..."
    wget -q "$download" -O "$tmp/page_${i}.jpg"
done
 
echo "Convertendo paginas JPG -> PDF..."
for i in $(ls $tmp/*.jpg); do
    convert "$i" "${i}.pdf"
done
 
echo "Mesclando paginas..."
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="${title}.pdf" $tmp/page_*.pdf
rm -rf $tmp
 
echo "-> Pronto: '${title}.pdf'"

O script requer Bash, wget, GhostScript e ImageMagick. A maioria das distribuições de Linux já tem esses aplicativos, mas por via das dúvidas cheque se você tem o ImageMagick instalado.

Download do script: issuu_download.sh (932 bytes)

Para instalar, é só baixar o arquivo, torná-lo executável e movê-lo para alguma pasta do seu $PATH:

$ wget http://tiagomadeira.com/wp-content/uploads/2014/09/issuu_download.sh
$ chmod +x issuu_download.sh
$ sudo mv issuu_download.sh /bin

Para usar, é só digitar:

$ issuu_download.sh <endereco_do_documento>

Como copiar textos da Folha e outros sites que não deixam

Alguns sites começaram a abusar de um recurso super interessante do JavaScript para acabar com uma das características mais importantes da Internet: a capacidade de copiar/colar.

O tratamento dos clipboard events (oncut, oncopy e onpaste) deveria servir para permitir que os programadores façam coisas legais quando você copia/cola um texto (por exemplo, um processador de textos online pode inserir/remover formatação), mas tenho visto cada vez mais ele ser usado para adicionar uma mensagem de copyright no final de um texto copiado, impedir usuários leigos de copiarem textos na web e evitar que se cole coisas que você copiou em formulários.

O que mais me incomoda (e que me levou a escrever esta postagem) é que, hoje, quem copia um trecho de uma reportagem da Folha (para guardar, compartilhar numa rede social ou o que quer que seja) acaba colando:

Para compartilhar esse conteúdo, por favor utilize o link http://www1.folha.uol.com.br/fsp/bla-bla-bla ou as ferramentas oferecidas na página. Textos, fotos, artes e vídeos da Folha estão protegidos pela legislação brasileira sobre direito autoral. Não reproduza o conteúdo do jornal em qualquer meio de comunicação, eletrônico ou impresso, sem autorização da Folhapress (pesquisa@folhapress.com.br). As regras têm como objetivo proteger o investimento que a Folha faz na qualidade de seu jornalismo. Se precisa copiar trecho de texto da Folha para uso privado, por favor logue-se como assinante ou cadastrado.

Não é incrível (e sintomático) que o grupo que gerencia o portal mais importante da Internet no Brasil (UOL) tenha uma concepção tão atrasada da rede? Ok, não dá nem pra dizer que isso nos surpreende depois da censura da Falha e do paywall.

Sem mais delongas: isso merece ser hackeado. Neste post, proponho algumas soluções simples para você poder voltar a copiar e colar no seu navegador como sempre fez. Minha preferida, como sempre, é a última.

Solução trivial para quem usa Linux

Antes de sugerir soluções de verdade, convém observar que quem usa Linux (X11) pode copiar selecionando um texto (sem apertar Ctrl+C ou qualquer outra combinação esdrúxula de teclas) e colar apertando o botão do meio do mouse. Quando se copia/cola dessa forma, o navegador não emite os temidos eventos oncopy/onpaste (ou seja, tudo funciona normalmente).

Rodolfo Mohr também observou que você pode copiar um texto selecionando-o, clicando com a tecla direita na seleção e em “Pesquisar no Google”. Uma aba vai abrir com a pesquisa no Google e você pode copiar o texto lá. É um hack válido, embora incômodo.

Somente Firefox: usando about:config

Se você usa Firefox, pode desabilitar os clipboard events digitando, na barra de endereços, em about:config. Talvez ele diga que é perigoso e peça para você clicar num botão dizendo que sabe o que está fazendo. Pode confiar. Em seguida, procure a chave dom.event.clipboardevents.enabled e clique duas vezes nela para mudar seu valor para false. Reiniciando o navegador, o recurso copiar/colar estará funcionando normalmente (ou talvez nem precise reiniciá-lo).

Extensões (para Firefox, Chrome e Opera)

Não tem o que explicar. Simplesmente clique no nome do seu navegador e instale: Firefox, Chrome, Opera.

Editado em 01/04/2014, 22:30: A extensão que eu havia colocado para Chrome só desabilita o tratamento de eventos onpaste em formulários. Se você conhecer alguma extensão similar a do Firefox ou a do Opera, me avise pelos comentários.

Desabilitando sob demanda via JavaScript

É muito importante ter em mente que aplicações web como processadores de texto podem usar os eventos oncut/oncopy/onpaste para coisas úteis. Por isso, é desejável desabilitar esses eventos somente em sites específicos.

Não encontrei nenhuma extensão que faça isso, mas um código simples em JavaScript para recuperar o comportamento padrão dos eventos em um determinado site (testei no Firefox e no Chrome) é:

all = document.querySelectorAll("*");
fn = function(e) {
    e.stopPropagation();
    return true;
}
for (var i = 0; i < all.length; i++) {
    all[i].oncut = fn;
    all[i].oncopy = fn;
    all[i].onpaste = fn;
}

Se digitarmos isso no console (Shift+Ctrl+J), as funções copiar/colar devem voltar a funcionar.

Userscript

A solução anterior nos permite criar um userscript para desabilitar o tratamento dos eventos apenas no site da Folha:

// ==UserScript==
// @name Permite copiar textos da Folha
// @include http://*.folha.uol.com.br/*
// ==/UserScript==
 
window.onload = function() {
    all = document.querySelectorAll("*");
    fn = function(e) {
        e.stopPropagation();
        return true;
    }
    for (var i = 0; i < all.length; i++) {
        all[i].oncut = fn;
        all[i].oncopy = fn;
        all[i].onpaste = fn;
    }
}

Portanto, se você quiser copiar do site da Folha sem preocupações (e sem desabilitar os eventos em outros sites), pode instalar as extensões GreaseMonkey (Firefox) ou TamperMonkey (Chrome), e então esse userscript clicando neste link: falha.user.js.

Bookmarlet

Acho o método acima (do userscript) o melhor para copiar da Folha. No entanto, é conveniente ter um método mais genérico. Por isso, criei um bookmarklet, isso é, um pequeno script que podemos executar clicando num botão na barra de favoritos (neste caso, para restaurar o comportamento padrão das funções copiar/colar).

Aqui está ele: Restaurar copiar/colar

Para instalar, arraste esse link para sua barra de favoritos. Para usar, clique sempre que precisar copiar um texto e então copie normalmente.

Viva a Internet!

Como baixar vídeos de Deutsche Welle (dw.de) e outros sites que usam RTMP

RTMP (Real Time Messaging Protocol) é um protocolo desenvolvido pela Macromedia para fazer streaming de áudio e vídeo de um servidor para um Flash player.

Vou mostrar uma forma genérica para baixar vídeos de sites que usam RTMP usando como exemplo um vídeo do Deutsche Welle. Escolhi esse site porque ele não é suportado pela extensão Video DownloadHelper do Firefox. Porém, a dica funciona para vários outros sites que também usam esse protocolo.


Para começar, você vai precisar instalar dois programas livres: Wireshark e RTMPDump.

O primeiro serve para analisar os pacotes que estão passando na rede (quem manda para quem, que protocolo está sendo usado, qual seu conteúdo etc). O segundo baixa vídeos que estão disponíveis através do protocolo RTMP.

Para instalá-los no Ubuntu, basta escrever num terminal: sudo apt-get install wireshark rtmpdump. Em outras distribuições de Linux, use seu gerenciador de pacotes preferido.

No Windows ou outras plataformas onde é mais difícil instalar programas, você pode baixar esses programas (e seus códigos) em wireshark.org e rtmpdump.mplayerhq.hu.

Antes que reclamem nos comentários, há muitos programas mais simples que poderiam substituir o Wireshark nessa dica, mas decidi usar o Wireshark porque ele permite muitas outras coisas que podem ser úteis no futuro. Com efeito, usando o Wireshark é fácil encontrar o endereço de vídeos de sites que usam Flash mas não usam RTMP, como por exemplo Globo.com (que usa HTTP mesmo). Além disso, o Wireshark pode ajudar você a capturar e analisar pacotes que estão passando pelo ar mas teoricamente não deveriam ser lidos por você numa rede WiFi. Porém, isso já foge do escopo deste post.


O vídeo que usarei como exemplo é o que aparece quando você clica na foto do Brasil (Organize a sua indignação) na reportagem Alle Macht dem Volk? Clique nessa imagem e deve aparecer uma tela como esta:

reportagem

Neste momento, espere um pouco antes de clicar no botão Play para começar a tocar o vídeo. Primeiro abra o Wireshark e comece a capturar na interface que você usa para acessar a Internet (ou escute em todas caso não saiba qual escolher). Para não ter que ficar vendo muitas coisas desnecessárias, filtre apenas mensagens do protocolo RTMP: escreva no campo Filter o valor rtmpt (não é erro de digitação, tem um “t” no final mesmo) e pressione Enter.

Agora você pode começar a tocar o vídeo. Porém, não é de seu interesse assistí-lo no navegador e você não quer que o Wireshark fique muito sobrecarregado capturando todos os milhares de pacotes que passam na rede para transferir um vídeo desse tamanho. Portanto, inicie o vídeo e, assim que ele começar a tocar, feche a aba para parar de baixá-lo.

Se tudo correu bem, você pode parar a captura no Wireshark (clicando no ícone vermelho com um X lá no seu menu). Na sua tela, você deve estar vendo alguns pacotes RTMP filtrados:

wireshark

Lendo o conteúdo desses pacotes, você consegue descobrir qual é o endereço do vídeo no protocolo RTMP e então usar o RTMPDump para baixá-lo. Esse endereço está dividido em duas mensagens.

Na mensagem connect enviada pelo cliente ao servidor para iniciar o handshake, você encontra o parâmetro tcUrl, que neste caso aponta para rtmp://tv-od.dw.de/flash/:

tcurl

Um pouco abaixo, na mensagem play, você encontra o resto do endereço (neste caso, vdt_de/2013/bdeu131028_004_rioprotest_01i_sd_avc.mp4):

play

Juntando as duas partes, temos o endereço completo: rtmp://tv-od.dw.de/flash/vdt_de/2013/bdeu131028_004_rioprotest_01i_sd_avc.mp4. Com ele, é hora de usarmos o RTMPDump. Essa parte é trivial. Basta abrir um terminal e digitar rtmpdump com os parâmetros -r (endereço) e -o (arquivo de saída). O resultado é este:

$ rtmpdump -r rtmp://tv-od.dw.de/flash/vdt_de/2013/bdeu131028_004_rioprotest_01i_sd_avc.mp4 -o a.mp4
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO:   duration              242.58
INFO:   moovPosition          28.00
INFO:   width                 1280.00
INFO:   height                720.00
INFO:   videocodecid          avc1
INFO:   audiocodecid          mp4a
INFO:   avcprofile            66.00
INFO:   avclevel              31.00
INFO:   aacaot                2.00
INFO:   videoframerate        25.00
INFO:   audiosamplerate       48000.00
INFO:   audiochannels         2.00
INFO: trackinfo:
INFO:   length                6064000.00
INFO:   timescale             25000.00
INFO:   language              eng
INFO: sampledescription:
INFO:   sampletype            avc1
INFO:   length                11643904.00
INFO:   timescale             48000.00
INFO:   language              eng
INFO: sampledescription:
INFO:   sampletype            mp4a
46239.482 kB / 242.56 sec (99.9%)
Download complete
$

O vídeo usado no exemplo, para quem se interessar e entender alemão, foi parar no YouTube e agora pode ser incorporado em qualquer site:

Como ler documentos do Scribd

Depois de ouvir esse improviso do André Mehmari sobre Odeon e Choro pro Zé, fiquei com vontade de encontrar a partitura desse belo choro do Guinga. Porém, descobri que infelizmente é extremamente difícil encontrar o songbook “A música de Guinga”.

Procurando na rede, encontrei um torrent com um PDF com qualidade ruim e um documento do Scribd com qualidade boa. O problema é que o Scribd tem um paywall para não deixar as pessoas baixarem ou lerem os documentos que seus usuários colocam lá:

free-preview

Percebi que ele passa todas as imagens corretamente para o navegador e só no lado do cliente muda a opacidade das páginas para elas ficarem semitransparentes. Então escrevi um userscript bem simples (usando jQuery por comodidade) para o Greasemonkey (uma dessas extensões indispensáveis do Firefox) para recuperar a opacidade das páginas do texto e, se necessário, remover essa mensagem “You’re reading a free preview”.

// ==UserScript==
// @name Suppress Scribd Paywall
// @include http://*.scribd.com/doc/*
// @require http://code.jquery.com/jquery-2.0.3.min.js
// ==/UserScript==
 
(function($) {
    $(document).ready(function() {
        window.setInterval(function(){$(".absimg").css("opacity", "1")}, 1000);
        $(".autogen_class_views_read_show_page_blur_promo").on("click", function(e) { $(this).hide(); });
    });
})(jQuery);

Para usar, é só instalar o Greasemonkey no Firefox e depois baixar o userscript scribd.user.js. Resultado:

choro-pro-ze

Como ler notícias ilimitadas de Folha, Estadão e Globo sem cadastro

TL;DR: Instale o Adblock Plus em seu navegador, entre nas suas opções, peça para adicionar seu próprio filtro e adicione o filtro: *paywall*. Você agora deve ser capaz de ler notícias de Folha, Estadão e Globo sem cadastro. Caso tenha interesse em saber o caminho que levou a solução até aqui, continue lendo o post.




A mídia tradicional mudou a forma como publica na internet. A regra agora é que sem cadastro você só pode acessar um determinado número (pequeno) de notícias. O nome do sistema é paywall. Ao chegar no limite, você recebe mensagens como as seguintes:

folha estadao globo
Folha, Estadão e Globo quando você lê muitas reportagens

No caso da Folha, só o cadastro pago dá acesso ilimitado. Nos outros, aparentemente um cadastro gratuito é suficiente. De qualquer forma, por que dar seus dados para esses sites saberem quem você é, como navega e o que gosta de ler? Para quem esses sites vão dar essas informações?

Para além da preocupação com privacidade e anonimato, esse sistema funciona como um bloqueio para que as pessoas não possam ler e disseminar as notícias da internet. Torna a circulação de informações mais difícil e o espaço internético mais privado e menos democrático. Por isso, compartilho aqui um pouco sobre o funcionamento do paywall e algumas formas de contorná-lo.


Os sites não querem que buscadores tenham dificuldade de acessar e indexar seu conteúdo. Tampouco querem bloquear endereços de IP, já que a quantidade de pessoas que usa internet via NAT (compartilhando o mesmo endereço de IP com outras pessoas numa mesma rede) é enorme. Por isso, eles fazem todo o controle não no computador deles (servidor), mas no seu computador (cliente).

Para fazer isso, eles contam com a ajuda do seu navegador. Eles mandam a página sempre da mesma forma e o seu navegador é que faz o trabalho sujo. Roda um programa escrito em JavaScript para olhar pros dados que ele mesmo já tinha registrado anteriormente (os chamados cookies). Baseado nesses dados, redireciona você para outra página (no caso de Folha e Estadão, simplesmente coloca um fundo preto semi-transparente em cima do conteúdo do site).

Isso torna não só possível, como trivial contornar o bloqueio. Basta dizer para o seu navegador não registrar cookies, desativar a execução de JavaScript ou rodar outro programa para anular a ação do programa da grande mídia. Abaixo vou mostrar diversas formas de fazer isso usando o Mozilla Firefox, mas em outros navegadores há formas semelhantes de fazer o mesmo. Como sempre, a última forma é a que eu considero melhor.

Usar janela de navegação privada

A forma mais simples de acessar um conteúdo bloqueado é acessar a página numa janela de navegação privada. Para abrir tal janela, basta usar o atalho Ctrl+Shift+P no Firefox (ou Ctrl+Shift+N no Chromium). Como essa janela não vai usar os cookies que seu navegador tem registrado na janela principal, você vai conseguir acessar o conteúdo proibido normalmente (como se nunca tivesse acessado nenhuma notícia antes). Há pessoas que usam só o modo de navegação privada o tempo todo (uma opção razoável para evitar rastreamento).

Remover cookies individuais

No Firefox, você pode usar Editar → Preferências → Privacidade → Remover cookies individuais para remover cookies registrados no seu computador. Se você remover todos, vai sair automaticamente de todos os sites onde está logado. Como seu objetivo é contornar o paywall, você pode remover cookies somente dos sites que deseja acessar (no caso, procurar globo, folha e estadao na barra de busca da remoção de cookies).

Desativar JavaScript

É possível desativar a execução de programas enviados pelos sites que você acessa no Firefox desmarcando a caixa Permitir JavaScript no menu Editar → Preferências → Conteúdo do Firefox. Dessa forma, você vai perder muitas funcionalidades dos sites, mas navegar mais rápido e não ter que encarar paywall algum.

A extensão NoScript do Firefox torna mais fácil ativar/desativar scripts de determinados domínios.

Desativar CSS

Se você não se importar com leiaute e diagramação da página, Exibir → Estilos da página → Nenhum estilo vai fazer tudo ficar feio, mas o texto legível.

Usar extensão Web Developer

Instalar a extensão Web Developer no Firefox torna ainda mais simples remover cookies de um determinado domínio e desativar JavaScript ou CSS (aparece uma barra embaixo da barra de endereço com botões pra executar essas ações).

Remover lightbox

No caso de Folha e Estadão (que sobrepõe um fundo preto semi-transparente e uma lightbox na página ao invés de redirecionar você para outra página como faz o Globo), é possível fazer a lightbox desaparecer (sem mexer nos cookies ou no JavaScript) usando o modo de inspeção (Ctrl+Shift+I), selecionando os elementos que quer remover e adicionando o CSS display:none; neles. Por meio de um userscript do Greasemonkey seria possível automatizar isso.

Forma definitiva (minha preferida): filtros no Adblock Plus

Adblock Plus é uma extensão do Firefox extremamente eficiente para bloquear publicidades e scripts não desejados. Os seguintes filtros bloqueiam os scripts de paywall de Folha, Estadão e O Globo:

||paywall.estadao.com.br^
||estadao.com.br/paywall/*
||www1.folha.uol.com.br/folha/furniture/paywall/*
||static.folha.com.br/paywall/*
||oglobo.globo.com/servicos/inc/payWall.Conteudo.js
||oglobo.globo.com/plataforma/js/*/minificados/paywall/registraConteudosLidos.js

(Depois de escrever, fiquei pensando que talvez seja razoável bloquear simplesmente *paywall* de uma vez.)

Para usar, basta ter instalado o Adblock Plus, copiar essas regras (todas juntas) e colá-las em Ferramentas → Adblock Plus → Preferências de filtros → Filtros personalizados.

Mostrando uma agenda do Google Calendar no seu site

Escrito em PHP. Pode ser usado no tema do seu WordPress. Requer CURL. Faz cache do calendário para não ter que baixá-lo sempre que alguém entra no seu site. Desenvolvido para um site que vai sair nos próximos dias. Use, modifique e distribua como quiser. (Não me responsabilizo por qualquer problema. Fiz pra um caso específico. A checagem de erros é meio porca.)

<?php
date_default_timezone_set('America/Sao_Paulo');
$events = Array();
$dom = new DOMDocument();
 
$file = "cached_calendar.xml";
 
$last = -1;
if (file_exists($file)) {
    $last = filemtime($file);
}
// Mude 3600 para o tempo (em segundos) que você quiser que o cache expire
if (time() - $last > 3600) {
    $fp = fopen($file, "w+");
    if (!$fp) {
        die();
    }
    // Substitua o e-mail do calendário do Google CodeJam pelo e-mail do seu calendário (público)
    $ch = curl_init("https://www.google.com/calendar/feeds/google.com_jqv7qt9iifsaj94cuknckrabd8%40group.calendar.google.com/public/full");
    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}
 
$dom->load($file);
$feed = $dom->getElementsByTagName("feed");
$entries = $feed->item(0)->getElementsByTagName("entry");
foreach ($entries as $entry) {
    $children = $entry->getElementsByTagName("*");
    $day = "";
    $start = "";
    $end = "";
    foreach ($children as $child) {
        switch ($child->tagName) {
        case "title":
            $title = $child->nodeValue;
            break;
        case "gd:when":
            if ($child->hasAttribute("startTime")) {
                $st = strtotime($child->getAttribute("startTime"));
                $time_to_sort = $st;
                $day = date_i18n("l, d/M", $st);
                $start = date("H:i", $st);
            }
            if ($child->hasAttribute("endTime")) {
                $et = strtotime($child->getAttribute("endTime"));
                $end = date("H:i", $et);
            }
            break;
        }
    }
    if ($title != "" && $day != "") {
        $events[] = Array(
            "time_to_sort" => $time_to_sort,
            "day" => $day,
            "start" => $start,
            "end" => $end,
            "title" => $title
        );
    }
}
function cmp($a, $b) {
    $a = $a["time_to_sort"];
    $b = $b["time_to_sort"];
    if ($a == $b) {
        return strcmp($a["title"], $b["title"]);
    }
    return ($a < $b) ? -1 : 1;
}
usort($events, "cmp");
 
$n = count($events);
if ($n > 0) {
    $lastDay = "";
    for ($i = 0; $i < $n; $i++) {
        $day = $events[$i]['day'];
        $title = $events[$i]['title'];
        $start = $events[$i]['start'];
        $end = $events[$i]['end'];
        if ($lastDay != $day) {
            if ($i != 0) {
                echo "</ul>\n\n";
            }
            echo "<h3 class="day"><span>$day</span></h3>\n";
            echo "<ul>\n";
        }
        echo "\t<li>\n";
        if ($start != "") {
            // Você pode modificar aqui para mostrar o horário de término ($end).
            echo "tt<span class="time">{$start}</span>\n";
        }
        echo "\t\t<strong>{$title}</strong>\n";
        echo "\t</li>\n";
        $lastDay = $day;
    }
    echo "</ul>\n";
} else {
    echo "<p>Nenhum evento cadastrado.</p>\n";
}
?>

Como baixar fotos dos álbuns da UOL

Se você não é nerd, não tem tempo, não tem coração e não tem curiosidade, recomendo que ignore todo o texto e leia somente o item 3.

Por causa da forma como os álbuns de fotos do UOL são feitas, copiar suas fotos é uma tarefa difícil para a maioria dos usuários. Não acho que a UOL faça assim de propósito, mas por uma questão de usabilidade mesmo: há dois botões enormes em cima das fotos para você avançar para a próxima foto ou voltar para a anterior, e é por causa deles que você não consegue ver o “Copiar endereço da imagem” quando clica com a tecla direita na área da imagem (porque você não está realmente clicando na imagem, mas num botão transparente).

No entanto, há várias formas de copiar fotos dos álbuns da UOL. Neste post apresento algumas. Para testar, você pode tentar aplicar essas ideias neste álbum.

0. Soluções toscas

Como eu disse no início, os webmasters do UOL aparentemente não fazem os álbuns se comportarem assim de propósito, mas por causa de botões gigantes. A maneira mais fácil de copiar uma foto de um álbum do UOL é clicar bem na coluna exatamente no meio dela, evitando as duas setas. Você pode passar o mouse devagar pelo meio da foto até que o seu cursor deixe de ser uma mãozinha e seja uma seta. Pra saber se você deve ir pra esquerda ou pra direita é só ir na direção da seta que você não está vendo.

Outra solução também tosca é simplesmente tirar um screenshot da tela em que você está (apertar a tecla PrintScreen na maioria dos computadores deve funcionar) e recortar a imagem. Eu imagino que essa seja a solução mais usada, mas pessoalmente acho ela terrível.

Não pare de ler! Prometo que as próximas soluções vão ser mais legais.

1. Somente para o Firefox: desativar estilos

Desativar o CSS da página é uma forma fácil de acabar com todo seu leiaute e dessa forma copiar a imagem sem se preocupar com perfumarias. Você provavelmente pode fazer isso em qualquer navegador usando plugins (e nos navegadores que não suportam CSS é até mais fácil: você nem precisa fazer nada!) e no Firefox em particular há um botão no menu (Exibir » Estilos » Sem estilos).

2. JavaScript na barra de endereço

Em geral, você pode escrever um script na barra de endereço para executá-lo na página em que você está. Há um tempo atrás todos os navegadores aceitavam isso, mas aparentemente muitos têm desativado esse recurso por questões de segurança, inclusive o Firefox. De qualquer maneira, se seu navegador suportar, você pode simplesmente digitar:

javascript:document.getElementById("setaEsq").style.width=document.getElementById("setaDir").style.width="50px";void(0);

na barra de endereço quando estiver na página do álbum do qual quer baixar fotos.

Isso vai reduzir o tamanho dos botões, fazendo com que a área clicável seja bem maior.

Exercício para quem souber ou quiser aprender JavaScript: Escreva um script que abra a foto numa nova aba em vez de simplesmente deixá-la clicável. Transforme-o num bookmarlet (veja o próximo item).

3. Bookmarlet

A solução anterior nos incentiva a criar um botão que execute esse script para não termos que decorá-lo nem copiá-lo sempre. Eis aqui esse botão para você: Aumentar área clicável das fotos dos álbuns da UOL. Clique com a tecla direita nesse link e adicione-o aos seus favoritos. Quando você estiver num álbum, clique nesse favorito e a imagem vai se tornar magicamente clicável :)

4. Firefox e GreaseMonkey

Se você usa Firefox e tem instalada a extensão GreaseMonkey, instale o seguinte user script (que executa o mesmo código que colei no item 2) e sempre que você abrir um álbum as fotos serão clicáveis: Download do userscript

// ==UserScript==
// @name Copiador de fotos UOL
// @description Torna mais fácil copiar fotos de álbuns da UOL
// @author  Tiago Madeira <contato@tiagomadeira.com>
// @include http*://*.uol.com.br/album/*
// @version 0.9
// ==/UserScript==
 
(function(){
    window.onload = (function() {
        document.getElementById("setaEsq").style.width = "50px";
        document.getElementById("setaDir").style.width = "50px";
    });
})();

Mas estou lendo este post em 2020 e o UOL mudou! Ou eu quero baixar fotos do site X, não do UOL!

A solução 1 (desativar estilos) funciona em 99% dos casos. Não quer ver sites sem estilo? Continue lendo.

5. Se você não quiser utilizá-la e se você estiver usando Firefox, pode clicar no ícone ao lado do endereço do site na barra de endereço e aí no botão “Mais informações”. Isso vai abrir uma tela com uma seção “Mídia” onde é possível ver e salvar imagens, ícones e vídeos que seu navegador baixou para mostrar a página. Esse método funciona também para copiar vídeos HTML5, inclusive do YouTube:

6. Se você não quiser procurar uma imagem no meio de um monte de mídias, a última versão do seu navegador deve ter um botão “Inspecionar elemento” no menu de contexto sempre que você clica com a tecla direita em qualquer lugar da página. Usando essa ferramenta é possível ver o código HTML do que você está vendo (ela é diferente e melhor do que simplesmente ver o código-fonte da página porque usando a inspeção de elementos você vê o código do momento atual, depois dos scripts mudarem as coisas). Se você pedir para inspecionar alguma coisa transparente em cima da imagem, em geral não vai ser difícil achar a própria imagem. Este screenshot é do Chrome:

Há inúmeras soluções mais nerds, mas quis manter a lista com sugestões fáceis e que não precisam de nada além do seu navegador. Alguma outra ideia simples, criativa e divertida? Blogue por aí ou me conte pra eu aumentar a lista!

Como baixar e assistir filmes completos na internet

ATENÇÃO: Este conteúdo foi publicado há 9 anos. Eu talvez nem concorde mais com ele. Se é um post sobre tecnologia, talvez não faça mais sentido. Mantenho neste blog o que escrevo desde os 14 anos por motivos históricos. Leia levando isso em conta.

Todo mundo gosta de assistir filmes, principalmente durante férias ou feriados chuvosos. Se você não tem dinheiro para comprar filmes, acha caro e chato sair para alugar um filme, seus problemas acabaram: ao fim deste artigo você estará qualificado para ser capaz de baixar e assistir qualquer filme (inclusive ainda não lançados aqui no Brasil) sem levantar da sua confortável cadeira de computador.

P2P

Disponibilizar um filme na internet é crime, violação de direitos autorais. Então se você quisesse baixar algum filme que não está disponível sob uma licença livre, você não encontraria o filme que quer baixar simplesmente procurando no Google por “Baixar filme do Harry Potter” ou “Baixar Shrek 3”. Ao invés de procurar na internet convencional, você teria que aprender a se conectar a outras pessoas. Isso é feito através de P2P, peer-to-peer, e existem vários programas neste ramo: Napster (um dos primeiros – acho que o programa não existe mais, mas a rede OpenNap ainda existe), Kazaa (bastante popular, sua rede FastTrack tem um bom conteúdo), Gnutella (rede livre – GNU – onde funcionam vários programas: Limewire, Frostwire, gtk-gnutella, entre vários outros), OpenFT, Ares, etc, etc, etc

Depois de usar durante bastante tempo o giFT, que já foi capaz de se conectar ao mesmo tempo nestas cinco redes (OpenNap, FastTrack, Gnutella, OpenFT e Ares), descobri um novo protocolo, novo e bem mais eficaz: o Bittorrent.

Bittorrent

Segundo a Wikipedia, BitTorrent é um protocolo que permite às utilizadoras e aos utilizadores fazerem download de arquivos indexados em websites. Essa rede introduziu o conceito “partilhe o que já descarregou” maximizando muito o desempenho e possibilitando downloads rápidos e imediatos. Foi criado por Bram Cohen em 2003 e tem sido o alvo nº1 de empresas que lutam em defesa da propriedade intelectual, devido a alegações de violação de copyright de alguns arquivos transmitidos pela rede.

O Bittorrent é provavelmente o mais inteligente dos partilhadores de arquivo da internet. Ele fragmenta os arquivos em pequenos pedaços e você ao mesmo tempo baixa e compartilha o seu arquivo (chamado torrent, com extensão .torrent).

Existem diversos clientes de Bittorrent, entre quais posso recomendar os três que eu já usei: Bittorrent (o original, de Bram Cohen), Azureus (provavelmente o mais pop. Multiplataforma, feito em Java, muitos sites partem do princípio de que você usa ele para distribuir seu torrent) e Deluge (parecido com o Azureus, mas em GTK)

Para baixar seu filme, você deve baixar um destes clientes (programas que abrem os arquivos .torrent).

Encontrando o filme e escolhendo a versão

Existe uma porção de sites que arquivam os .torrent disponibilizados internet a fora. Eu costumo usar o Mininova, mas ao fim deste artigo você encontra outros links interessantes.

Entre no Mininova e procure por “harry potter and the order of the phoenix” em filmes (movies). Sua busca retornou 74 resultados.

Como escolher qual baixar? Seeders são pessoas que estão compartilhando o arquivo, leechers são os que estão baixando. O mais importante é baixar um que tenha bastante seeders, para que seu download não falhe (não acabe de baixar) por falta de partilhadores. Em segundo lugar, veja que existem vários formatos diferentes de vídeo e tamanhos. Você pode optar por um vídeo que caiba num CD, por exemplo (700mb).

Escolhido seu torrent, clique nele, faça download do .torrent e abra com o seu cliente que você baixou no passo anterior. Em algumas horas, dias, meses, anos ou décadas (dependendo da velocidade da sua conexão e do número de seeders e de leechers) o seu filme estará baixado.

Também é bastante fácil baixar livros, seriados americanos, softwares e outros materiais ilegais em redes de torrent.

Encontrando e baixando a legenda

Existem vários sites para baixar legendas (subtitles) dos vídeos que você baixa na internet. Um deles é o Opensubtitles e outro é o Legendas.TV (em geral, é o que eu uso). Crie uma conta lá e procure pelo filme que você quer.

Procure pela mesma versão que você baixou o filme (o nome completo, exemplo nome-Xvid-aXXo-mavericK…), porque aí não há risco da legenda ficar mal sincronizada. Se não achar, não se preocupe: o player pode ressincronizar a legenda.

Usando o MPLAYER para assistir o vídeo

% mplayer [ARQUIVO DO FILME]

» Legenda

Para adicionar a legenda ao seu filme basta usar a opção -sub [ARQUIVO DA LEGENDA] ao comando do mplayer:

% mplayer -sub [ARQUIVO DA LEGENDA] [ARQUIVO DO FILME]

O mplayer é um programa muito mais versátil do que parece. É possível mudar a fonte, a cor e a posição da legenda, ente muitas outras coisas. A maioria dessas opções de legenda são alteradas usando o ASS. Eu costumo assistir os filmes com uma legenda grande amarela embaixo da área do filme widescreen (na faixa preta, porque a leitura torna-se mais fácil):

% mplayer -ass -ass-color FFFF0000 -ass-font-scale 1.2 
-ass-force-style FontName=Arial,Default.Bold=1 -ass-use-margins 
-ass-bottom-margin 80 -sub [ARQUIVO DA LEGENDA] 

[ARQUIVO DO FILME]

Se a legenda estiver fora do tempo do filme, use as teclas x e z dentro do mplayer para alterar o delay.

» Tela cheia

Adicionando -fs -zoom ao comando mplayer você executa o vídeo em tela cheia:

% mplayer -fs -zoom [ARQUIVO DO FILME]

» Meu comando completo

% mplayer -fs -zoom -ass -ass-color FFFF0000 -ass-font-scale 1.2 
-ass-force-style FontName=Arial,Default.Bold=1 -ass-use-margins 
-ass-bottom-margin 80 -sub [ARQUIVO DA LEGENDA] 

[ARQUIVO DO FILME]

Dicas para uma melhor sessão de cinema

  • Tem um amplificador ou um aparelho de som? Compre adaptadores pra ligar a saída da sua placa de som neles. São baratos e o som fica muito melhor.
  • Se você tiver um laptop ou um computador com uma placa de vídeo que tenha saída S-VIDEO, ligue o computador na TV. A imagem fica ótima e você se sente assistindo a um DVD de verdade.

Links úteis relacionados

  • Cinecombo (site brasileiro com vários torrents para legenda e um sistema de pedidos de filmes)
  • Bittorrent.com (site do cliente oficial e também busca torrents)
  • Mininova (indexador de torrents)
  • TorrentSpy (outro bom indexador e buscador de torrents)
  • Legendas.tv (baixe legendas em português do Brasil)
  • Mplayer (player de vídeo para Linux)

Importante! Não seja um fora-da-lei.

Não use o que eu escrevi neste artigo para baixar ilegalmente filmes, livros e outros conteúdos protegidos por copyright.

Como recuperar a inicialização do Linux depois de instalar Windows

ATENÇÃO: Este conteúdo foi publicado há 9 anos. Eu talvez nem concorde mais com ele. Se é um post sobre tecnologia, talvez não faça mais sentido. Mantenho neste blog o que escrevo desde os 14 anos por motivos históricos. Leia levando isso em conta.

Esse é um problema super comum que já resolvi para dezenas de pessoas e resolvi escrever aqui pra não ficar tendo que repetir a resolução toda vez que alguém me perguntar.

O caso é o seguinte: você tem Linux numa das suas partições e por algum motivo estranho instala Windows (ou reinstala) na outra. O Windows, como todo sistema operacional para idiotas, simplesmente limpa sua MBR (master boot record do HD) sem lhe perguntar nada e com isso deleta seu gerenciador de boots (neste post estarei tratando o Grub e o Lilo).

Aí você se vê triste, desiludido e em muitos casos resolve reinstalar o Linux só pra recuperar o boot. Péssimo, não? Mas não se preocupe: seus problemas acabaram.

Tudo o que você precisará para recuperar sua MBR (com Grub ou Lilo) é:

  1. Um livecd (não precisa ser um daqueles pesadões, um disco 1 do Slackware ou Gentoo Minimal resolve) com a mesma arquitetura do seu Linux. Se você não tem, sugiro o Gentoo Minimal porque é leve: o download você faz aqui. Se você não sabe o que é arquitetura, você provavelmente usa x86.
  2. Saber em que partição se encontra seu Linux (tipo: /dev/hda1, /dev/sda1, ou algo do gênero) e em que HD ele se encontra (tipo: /dev/hda, /dev/sda… é só tirar o número da partição)

Se você não sabe em que partição/hd está seu Linux, é fácil descobrir através do comando fdisk -l

Boote o livecd (considerarei que você sabe fazer isso, do contrário não teria conseguido instalar o Windows) e abra um terminal se seu livecd for gráfico (é aquela telinha preta, também pode ser chamado de Console).

Agora o que vamos fazer é montar a partição root do seu Linux (e considerarei que /boot não está numa partição separada, se estiver monte ela também), entrar nela e reinstalar o Grub ou o Lilo.

Se o seu terminal terminar com um caractere $ (cifrão), digite “sudo su” para virar root. Agora pode digitar o que segue:

# mkdir linux
# mount /dev/hda1 linux
# mount -o bind /dev linux/dev
# mount -t proc none linux/proc
# chroot linux /bin/bash
# source /etc/profile
# cat /proc/mounts > /etc/mtab

Não se esqueça de substituir /dev/hda1 pela partição do seu Linux.

Agora, se você usa Grub (se não, provavelmente esse comando não dará problema, então se você estiver na dúvida pode chutar esse):

# grub-install --recheck /dev/hda

(substituindo /dev/hda pelo device do seu hd)

Ou se você usa Lilo:

# lilo

E pronto! Limpando a sujeira…

# exit
# umount linux/proc
# umount linux/dev
# umount linux

E pode rebootar pro seu velho Linux.

Se você não tinha Windows antes, o Windows não vai por mágica aparecer nas suas opções de boot. Então, no seu velho Linux, é só editar o arquivo /boot/grub/menu.lst (pra quem usa Grub) ou /etc/lilo.conf (pra quem usa Lilo) e colocar linhas para bootar o Windows, respectivamente:

title Windows
rootnoverify (hd0,1)
makeactive
chainloader +1

e

other=/dev/hda2
label=Windows

(assumindo que seu Windows está em /dev/hda2)

É importante que você note que o Grub inicia suas contagens a partir do 0. hda1 é (hd0,0), hda2 é (hd0,1), hdb1 é (hd1,0), hdc2 é (hd2,1). Deu pra entender? Letra antes da vírgula (a = 0, b = 1, c = 2, …) e número depois da vírgula (1 = 0, 2 = 1, 3 = 2, …)

Para editar um arquivo como root, escreva “su” para virar root e use “vim”, ou, se você não sabe fazer isso, sua distribuição provavelmente permite que você digite algo como: “sudo gedit arquivo” ou “sudo kwrite arquivo”.

Se você usa Lilo, é necessário que depois de salvar o arquivo você entre no terminal como root e digite:

# lilo

… para salvar suas alterações na MBR.

É isso. Reinicie seu computador e divirta-se com seu gerenciador de boots funcionando novamente. Qualquer dúvida, escrevam comentários.

HOWTO: Como usar Pandora Radio no Brasil

ATENÇÃO: Este conteúdo foi publicado há 9 anos. Eu talvez nem concorde mais com ele. Se é um post sobre tecnologia, talvez não faça mais sentido. Mantenho neste blog o que escrevo desde os 14 anos por motivos históricos. Leia levando isso em conta.

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.