Arquivo da categoria: Software Livre

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>

E-books devem ampliar nossa liberdade, não reduzí-la

Li o texto “E-books must increase our freedom, not decrease it” (de Richard Stallman) no boletim da Free Software Foundation de julho/2012. É sobre os livros digitais e os dispositivos (como o Kindle, da Amazon) que estamos usando para lê-los. O texto foi escrito especialmente para o jornal britânico The Guardian, mas achei os problemas que o Stallman levanta bem relevantes e suas ideias para solucioná-los muito interessantes. Por isso, fiz uma tradução livre e descompromissada, que compartilho abaixo. Quem tiver sugestões para melhorar a tradução, por favor entre em contato.


Eu adoro o livro The Jehovah Contract e eu gostaria que todo mundo gostasse dele também. Por isso, eu o emprestei pelo menos seis vezes nos últimos anos. Livros impressos deixam a gente fazer isso.

Porém, eu não posso fazer isso com a maioria dos e-books comerciais. “Não é permitido”. E se eu tentar desobedecer, não vou conseguir porque o programa que roda nos e-readers possui recursos maliciosos chamados Digital Restrictions Management (ou DRM) para restringir minha leitura. Os e-books são encriptados de forma que apenas softwares maliciosos são capazes de abrí-los.

Muitos outros hábitos com os quais nós, leitores, estamos acostumados, “não são permitidos” para e-books. Usuários de Amazon Kindle, por exemplo, não podem comprar um livro anonimamente (com dinheiro). Os livros do Kindle normalmente estão disponíveis apenas pela Amazon e a Amazon faz com que os usuários se identifiquem. Logo, a Amazon sabe exatamente que livros cada usuário leu. Num país como o Reino Unido, onde você pode ser processado por possuir um livro proibido, isso é mais do que hipoteticamente orwelliano.

Além disso, você não pode vender o e-book depois de lê-lo (se a Amazon triunfar, os sebos onde eu passei muitas tardes serão história). E você não pode dá-lo para um amigo também, porque, de acordo com a Amazon, você nunca realmente foi dono dele em primeiro lugar. A Amazon requer que os seus usuários assinem um End User License Agreement (EULA) que diz isso.

Na verdade, você não pode nem mesmo ter certeza de que ele ainda estará na sua máquina amanhã. Há algum tempo atrás, pessoas lendo 1984 num Kindle tiveram uma experiência bem orwelliana: seus e-books desapareceram bem diante de seus olhos. A Amazon usou um recurso malicioso chamado “back door” para deletá-los remotamente (queima de livros virtual! É isso que Kindle significa?). Mas não se preocupe: a Amazon prometeu nunca mais fazer isso. Exceto por ordem do Estado.

Com software, ou o usuários controlam o programa (software livre) ou o programa controla o usuário (software não-livre). As políticas da Amazon para e-books imitam as políticas de distribuição de softwares não-livres, mas não é essa a única a relação entre os dois. Os recursos maliciosos dos softwares descritos acima são impostos aos usuários através de programas que não são livres. Se um programa livre tivesse um recurso malicioso como aqueles, algum usuário hábil em programação o removeria e então disponibilizaria uma versão corrigida para todos os outros usuários. Mas usuários não podem alterar software não-livre, o que o transforma num instrumento ideal para exercer o poder sobre o público.

Qualquer uma dessas usurpações da nossa liberdade é razão suficiente para dizer não. Se essas políticas se limitassem apenas à Amazon, nós as ignoraríamos. Porém, as políticas dos outros negociantes de e-books são bem parecidas.

O que me preocupa mais é o prospecto de perder a opção do livro impresso. O jornal The Guardian anunciou leituras apenas digitais: em outras palavras, livros disponíveis apenas pelo preço da liberdade. Eu não vou ler nenhum livro com esse preço. Daqui a cinco anos, serão cópias não-autorizadas as únicas cópias eticamente aceitáveis para a maioria dos livros?

Não precisa ser dessa forma. Com pagamento anônimo na internet, pagar por downloads de e-books sem DRM e sem EULA respeitaria nossa liberdade. Lojas físicas poderiam vender tais e-books por dinheiro, como a música digital em CDs — ainda disponíveis mesmo que a indústria da música esteja incentivando agressivamente serviços restritos com DRM como o Spotify. Lojas físicas de CDs enfrentam os custos de um inventório caro, mas lojas físicas de e-books poderiam apenas escrever cópias dos livros no seu pendrive. Aí o pendrive novo seria o único item físico a ser armazenado e vendido pela loja, para caso você precise.

O motivo que as editoras dão para suas práticas restritivas com e-books é a proibição aos usuários de compartilhar cópias. Eles dizem que isso é para benefício dos autores, mas mesmo que isso fosse de interesse dos autores (de autores bem famosos talvez), não pode justificar DRM, EULA ou o Digital Economy Act (DEA) que persegue leitores por compartilhar. Na prática, o sistema de copyright faz um péssimo trabalho no apoio aos autores a não ser os mais populares. O principal interesse de outros autores é ser mais conhecido, então compartilhar seu trabalho beneficiaria eles assim como os leitores. Por que não mudar para um sistema que funcione melhor e seja compatível com o compartilhamento?

Um imposto sobre conectividade à Internet, junto à linha geral da maioria dos países da União Europeia, poderia funcionar bem se três pontos forem acertados. O dinheiro deve ser coletado pelo Estado e distribuído de acordo com a lei, não dado para uma entidade de gestão privada; ele deve ser dividido entre todos os autores, e nós não devemos deixar as empresas pegarem nada deles; e a distribuição do dinheiro deve ser baseada numa escala móvel, não numa proporção linear à popularidade. Eu sugiro usar a raiz cúbica da popularidade de cada autor: se A é 8x mais popular que B, A recebe 2x o que B recebe (não 8x o que B recebe). Isso ajudaria muitos escritores razoavelmente populares adequadamente em vez de enriquecer poucas estrelas.

Outro sistema é dar a cada e-reader um botão para enviar uma pequena quantia (talvez 25 libras no Reino Unido) para o autor.

O compartilhamento é bom e, com tecnologia digital, o compartilhamento é fácil. (Digo, a redistribuição não-comercial de cópias exatas.) Então o compartilhamento tem que ser legal e evitar compartilhamentos não pode uma desculpa para transformar e-books em algemas para os leitores. Se e-books significam que a liberdade dos usuários precisa ou ser ampliada ou ser reduzida, nós precisamos exigir que ela seja ampliada.

WordPress plugin: Admin Anti-forget Alarm

ATENÇÃO: Este conteúdo foi publicado há 5 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.

I wrote a small WordPress plugin to prevent users from publishing a post without excerpt or thumbnail, or with a too big excerpt, or with a too small thumbnail, or with an uppercase-only title.

This screenshot is showing some of the messages the plugin displays in portuguese.

For some of my websites it’s important to require the editors to fix some stuff before publishing something, and it looks like this is a useful feature for other people as well. There is even a Require Thumbnail plugin in the WordPress Plugin Directory that seems to do one of the things I’ve just implemented.

The plugin works with two different types of requirements: ths first generates errors (i.e., you can’t publish if you don’t fix it) and the second generates warnings (i.e., you will receive a message but you can proceed to publish if you really want to do that).

I thought of not releasing the plugin (because it’s written in Portuguese and you don’t have a cool interface to decide what’s required yet), but in a fashion of overstated bazaar I decided to push the code anyway (without putting in the WordPress plugin directory, of course) so that other people can collaborate if they want to. Take a look :)

Github project home page: https://github.com/tmadeira/antiforget
Git repository to clone: https://github.com/tmadeira/antiforget.git
Code (PHP): https://github.com/tmadeira/antiforget/blob/master/antiforget.php
Download: antiforget.zip (this is pre-alpha: I provide no warranty!)

Como mostrar o último post de cada categoria no WordPress?

ATENÇÃO: Este conteúdo foi publicado há 5 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 WordPress é um dos meus programas preferidos e um dos que mais consome as madrugadas já faz alguns anos. Escrevi inúmeros temas, alguns plugins (um único genérico o suficiente para ser público) e já modifiquei algumas partes do código (embora hoje seja raro isso ser necessário).

Acho muito simples e me divirto ao programar em PHP para a web (talvez porque eu faça isso há uns dez anos). Gosto muito da forma como o WordPress é escrito e, com efeito, seu lema é Code is poetryCódigo é poesia. Sua documentação e seu código são muito didáticos e foram, assim como seus temas e as tabelas no banco de dados, evoluindo de acordo com o tempo: as atualizações sempre têm novas features e formas mais genéricas e mais elegantes de fazer as coisas.

O WordPress é um software livre usado por mais de 15% da web (um número incrível!) e tem uma comunidade que produz várias extensões (temas e plugins). Gosto tanto dele que certa vez (no final de 2007) escrevi um plugin só para ganhar uma camiseta (que é tamanho G e ainda assim uso de vez em quando).

Propaganda e blogagem a parte, me deparei com um problema interessante em um dos sites que administro com ele no último fim de semana (a gente sempre se depara com problemas interessantes no WordPress também): dado uma categoria com várias subcategorias, gostaria de mostrar um link para o último post de cada uma de suas subcategorias na página inicial.

Uma solução trivial seria fazer uma query pedindo os filhos de uma dada categoria (usando a tabela wp_term_taxonomy) e uma query por categoria para descobrir seu último post (usando as tabelas wp_posts e wp_term_relationships). Suponha (até o final desse post) que a categoria-mãe de todas as categorias que eu quero mostrar na página seja a de ID 33. Então, essa solução seria algo como:

<?php
$query = mysql_query("SELECT term_id FROM wp_term_taxonomy
                      WHERE parent = 33 AND taxonomy = 'category'");
while (list($cid) = mysql_fetch_row($query)) {
    $posts_query = mysql_query("SELECT p.ID, p.post_name, p.post_title
                                FROM wp_posts AS p,
                                     wp_term_relationships AS r
                                WHERE p.ID = r.object_ID AND r.term_taxonomy_id = '$cid'
                                ORDER BY p.post_date DESC
                                LIMIT 1");
    if (mysql_num_rows($posts_query)) {
        list($id, $permalink, $title) = mysql_fetch_row($posts_query);
        // Faça o que quiser com o post aqui
    } else {
        echo "A categoria $cid não tem posts.\n";
    }
}
?>

Não deve ser difícil de entender, mas dá pra resolver de forma ainda mais simples que essa. O WordPress é fantástico e usar as funções dele próprio é bem mais simples, genérico e resolve o problema. A função get_categories aceita um monte de parâmetros, mas só precisamos do child_of:

<?php
foreach (get_categories('child_of=33') as $cat) {
    list($post) = get_posts("numberposts=1&category={$cat->term_id}");
    // Faça o que quiser com o post aqui
}
?>

(quem entrou no post procurando a solução pro problema pode parar por aqui se não for nerd)

Porém, eu queria resolver o problema com uma única query. Achei que seria mais elegante resolver o problema todo no banco de dados sem escrever em PHP e achei que poderia ficar mais rápido. Acho que não ficou mais elegante e não faço ideia se fica mais rápido (fiquei com a impressão de que seja pior porque faço JOIN de quatro tabelas enormes), nem acho que tenha volume de dados (ainda) no site em que implementei isso pra realmente me preocupar, mas me diverti fazendo. Então segue o resultado:

SELECT p.ID AS id,
       CASE WHEN (p.post_date > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) THEN
           p.post_title
       ELSE
           ''
       END AS title,
       GROUP_CONCAT(c.slug) AS cat
FROM wp_posts AS p
INNER JOIN
    (
        SELECT MAX(p.post_date) AS post_date, c.term_ID AS cid, COUNT(p.ID) AS count FROM
            wp_posts AS p,
            wp_term_relationships AS r,
            wp_terms AS c
        WHERE
            p.ID = r.object_ID AND
            c.term_ID = r.term_taxonomy_ID AND
            p.post_status = 'publish' AND
            p.post_type = 'post'
        GROUP BY c.term_id
    ) AS last ON p.post_date = last.post_date
INNER JOIN wp_term_relationships AS r ON p.ID = r.object_ID
INNER JOIN wp_terms AS c ON c.term_id = r.term_taxonomy_ID
INNER JOIN wp_term_taxonomy AS t ON t.term_id = r.term_taxonomy_ID
WHERE
    c.term_id = last.cid
    AND t.parent = 33
    AND t.taxonomy = 'category'
    AND p.post_status = 'publish'
    AND p.post_type = 'post'
    # AND last.count >= 3
GROUP BY p.ID ORDER BY p.post_date DESC, last.count DESC;

A query (que na verdade é duas) ordena o resultado por data, retorna o título vazio caso o post seja de mais de um mês atrás, junta as categorias (separando-as por vírgula) se um mesmo post for o último de mais de uma categoria e neste caso ordena as categorias por ordem decrescente de número de posts na mesma.

(A parte comentada seria para caso eu só quisesse mostrar o último post de categorias com três ou mais posts.)

Usei o resultado da query da seguinte forma:

$q = mysql_query($query); // $query é a string com aquele SQLzão
$print_final_li = false;
$first = true;
while ($a = mysql_fetch_array($q, MYSQL_ASSOC)) {
    echo "\t\t<li>";
    $permalink = get_permalink($a["id"]);
    $title = $a["title"];
    if ($title == "") {
        $print_final_li = true;
        echo "Veja também: ";
    } else if ($first == true) {
        echo "<a href="$permalink" title="$title">";
        echo get_the_post_thumbnail($a["id"], "home-thumbnail",
                                    Array("title" => get_the_title()));
        echo "</a> ";
        $first = false;
    }
    $cats = explode(",", $a["cat"]);
    foreach ($cats as $low) {
        $up = strtoupper($low);
        echo "<a class="cat" href="http://$low.juntos.org.br/"
                 title="Juntos! $up">$up</a> ";
    }
    if ($print_final_li) break;
    echo "<a class="post" href="$permalink" title="$title">$title</a>";
    echo "</li>\n";
}
while ($a = mysql_fetch_array($q, MYSQL_ASSOC)) {
    $cats = explode(",", $a["cat"]);
    foreach ($cats as $low) {
        $up = strtoupper($low);
        echo "<a class="cat" href="http://$low.juntos.org.br/"
                 title="Juntos! $up">$up</a> ";
    }
}
if ($print_final_li) {
    echo "</li>\n";
}

(e se você quiser vê-lo em prática, entre em juntos.org.br e procure por “Juntos pelo Brasil”)

Não ficou bonitinho? Se por um lado gostei da solução, por outro fiquei imaginando que deva ser um SQL tremendamente ingênuo e digno da minha inexperiência com grandes bancos de dados. O que você acha? Consegue pensar numa forma mais simples, mais eficiente e mais elegante de resolver o mesmo problema? Ou ao menos sem subqueries?

Acho que as relações necessárias já ficaram explícitas na query que eu escrevi, mas segue o diagrama do banco de dados do WordPress pra quem precisar:

Retrospective: new plugin for WordPress

ATENÇÃO: Este conteúdo foi publicado há 5 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.

I’ve just wrote my first WordPress public plugin, that I’m licensing under GPL v3. This post is to make it public. I’m writing in English because the WordPress plugin directory asks me to provide a plugin page to host the files there and I’ll provide the URL of this post. Update: The plugin is now in the WordPress plugin directory: wordpress.org/extend/plugins/retrospective/


The website of the brazilian newspaper O Estado de São Paulo has a nice way to display news in a retrospective-style (check this screenshot or this link — Flash required).

Wouldn’t it be nice if we could display WordPress posts in our pages and categories in the same way just by using a shortcode? The possibilities are many. That’s why I wrote the Retrospective plugin for WordPress.

It has at least two advantages over the version you just saw:

  1. Does not require Flash (its implementation uses only CSS and JavaScript/jQuery)
  2. Has a option to respect the (time-)scale of the posts.

Its use is very simple. Wherever you add the shortcode [retrospective] the plugin will draw that cool retrospective. The shortcode supports several attributes:

  • count — limit the number of posts to be displayed (default = 10; use -1 to display all)
  • cat — display posts with category IDs comma-separated (default = display all posts)
  • width — the width of the timeline in pixels (default = 600)
  • delay — the time of the focus change animation in milisseconds (default = 1000)
  • scale — if set, respect the time scale in the distances between the points in the timeline (default = false)
  • image_width, image_height — the dimensions of the thumbnail images in pixels (default = 300×180)
  • image_border_size — the size of the image’s border in pixels (default = 7)
  • image_border_color — the color of the image’s border in hexa RGB (default = 000000)
  • image_margin — the space between the images (default = 5)
  • date_format — the date format in PHP format (default = d/m/Y)

For example, here is a [retrospective count=5 cat=20 image_border_color=2F5971] call:


Some screenshots

Here is a screenshot from juntos.org.br with scale=true (in the link you can see it working):

And here is a screenshot from a fresh WordPress install (TwentyEleven theme without modifications):


Customizing

Post thumbnails

For better results, I suggest always adding post thumbnails to your posts and using registered image sizes in image_width and image_height attributes.

Styling retrospectives

The generated HTML is very easy to style (but just be careful with margins and paddings, they’re set with !important attribute — I did it to try not to break with any theme). Here is a sample:

<div id="retro-uniquehash" class="retrospective">
    <!-- TIMELINE -->
    <ul class="time">
        <li rel="0"><a href="permalink" style="left:0px;"><span>date</span></a></li>
        <li rel="1"><a href="permalink" style="left:300px;"><span>date</span></a></li>
        <li rel="2"><a href="permalink" style="left:600px;"><span>date</span></a></li>
    </ul>
 
    <!-- PHOTOS -->
    <div class="photos">
        <ul>
            <li rel="0"><a href="permalink" title="title">
                <img src="file" class="wp-post-image" /></a></li>
            <li rel="1"><a href="permalink" title="title">
                <img src="file" class="wp-post-image" /></a></li>
            <li rel="2"><a href="permalink" title="title">
                <img src="file" class="wp-post-image" /></a></li>
        </ul>
    </div>
 
    <!-- POSTS -->
    <ul class="posts">
        <li rel="0"><a href="permalink" title="title"><h2>Title <span>(date)</span></h2>
            <p>Excerpt</p></a></li>
        <li rel="1"><a href="permalink" title="title"><h2>Title <span>(date)</span></h2>
            <p>Excerpt</p></a></li>
        <li rel="2"><a href="permalink" title="title"><h2>Title <span>(date)</span></h2>
            <p>Excerpt</p></a></li>
    </ul>
</div>

Styling a specific retrospective

The generated hash takes in consideration all the attributes sent to the shortcode and also how many retrospectives appeared before in the parsing of the actual page. I made it that way to allow users to set up two exactly equal retrospectives in the same page. Because of that, I don’t recommend setting styles for #retro-uniquehash. I think a reasonable solution for this issue is to make something like

<div id="something_that_makes_sense">[retrospective]</div>

when inserting the shortcode and then styling #something_that_makes_sense .retrospective.


Download

Here is the code for download:* retrospective.zip
* Warning: Please consider I’m using a bazaar approach here. Be aware that the plugin probably has a lot of bugs (and please tell me if you catch any).

I hope you enjoy it. Have fun and please let me have your feedback! :)

A palestra do Chris Hofmann (Mozilla) e outros destaques do 2º dia do 12º FISL

ATENÇÃO: Este conteúdo foi publicado há 6 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.

A palestra do Chris Hofmann, da Mozilla Foundation, superou minhas expectativas. Acho que não esperava muito por causa de traumas com gringos que vem falar em nome de programas grandes/populares e acabam decepcionando. Mas é claro que com a Mozilla tinha que ser diferente. Chris contou a história do Firefox justificando a necessidade de sua existência desde que foi criado (época em que o Internet Explorer representava mais de 95% dos navegadores e parecia impossível inovar a web) até hoje, quando as empresas (e os navegadores escritos por elas) cada vez mais ignoram a privacidade de seus usuários. Comprovou esse ponto com duas citações, uma do CEO do Google e outra do CEO do Facebook (Eric Schmidt e Mark Zuckerberg, respectivamente), que mostravam seu total desprezo pelos dados que compartilhamos nesses sites.

Prosseguindo nesse sentido, ele fez o paralelo entre uma proposta do congresso dos Estados Unidos em 2001 (que propunha que o governo controlasse e-mails, documentos, cartão de crédito e sites acessados pelos usuários) com o Google de hoje (Google Mail, Google Docs, Google Checkout, Google Analytics — respectivamente). A partir daí, falou do funcionamento do Firefox Sync, que, diferentemente do sincronizador do Chrome, criptografa as informações antes de mandar para o servidor (portanto, deixando a Mozilla sem acesso aos dados dos usuários) e também fez um apelo para que usemos a checkbox “I do not want my data to be tracked” dos novos Firefox para que ao menos mandemos uma mensagem para os sites dizendo que não estamos de acordo com a forma como elas estão nos vigiando nesses tempos. Sua fala foi um bom complemento ao que o Alexandre Oliva (da Free Software Foundation) colocou ontem, sobre a violação de privacidade que tem aumentado muito também nos sistemas operacionais de telefones celulares.

Chris concluiu agradecendo e incentivando os presentes a continuar espalhando o Firefox ajudando seus parentes e amigos a migrarem, usando versões beta, reportando bugs, ajudando com traduções e se envolvendo mais com a comunidade Mozilla.

Outros destaques, curiosidades e citações aleatórias

  1. O Irmão Pedro Ost definiu software livre de uma forma legal: “Em vez de eu me adaptar ao programa que vem, o programa tem que se adaptar à minha realidade.”
  2. Jacob Appelbaum falaria sobre o projeto Tor e sobre censura na internet. Provavelmente teria sido uma palestra interessantíssima — eu esperava que fosse uma das melhores deste FISL, ainda mais pelas coisas recentes que aconteceram no mundo –, mas infelizmente seu avião atrasou. Por conta disso, Jeremy Allison, do Samba e do Google, fez uma palestra sugerindo cloud computing para substituir sistemas de arquivos em rede (NFS, Samba). Eles seriam baseados em busca (no lugar de sistemas de arquivos baseados em árvores de diretórios). A ideia de basear sistemas de arquivos em buscas é divertida, mas a sugestão de manter seus dados longe é preocupante, ainda mais vinda de um funcionário do Google.
  3. Esperava muito mais da mesa sobre ética hacker com Sérgio Amadeu, Alexandre Oliva e Nelson Pretto. Pelos nomes e pelo tema, esperava que fosse um dos grandes eventos deste FISL, mas não foi nada demais. Uma fala curiosa do Sérgio: “O hacker é um individualista, mas não é o individualista que a cultura de massa criou. É um individualista colaborativo. Se realiza quando consegue enfrentar o desafio e compartilhar com os outros.”
  4. Foi bastante interessante a palestra do Deivi Lopes Kuhn sobre software livre no governo federal. Anotei algumas coisas e vou deixar pra sistematizar e publicar comentários em breve, num post a parte (devido à densidade do conteúdo).

Destaques do 1º dia do 12º Fórum Internacional do Software Livre

ATENÇÃO: Este conteúdo foi publicado há 6 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.

Seguem alguns registros aleatórios do que vi no primeiro dia (29/06) deste FISL em Porto Alegre.

Software livre

“Debater software livre não é discutir trocar Windows pra Linux. Isso é o de menos. Debater, e mais importante, militar pelo software livre, é criar redes para transformar o mundo.”

(Wilkens Lenon)

“A liberdade de software não é útil só pra quem escreve o programa, mas para todos, da mesma forma que a liberdade de imprensa não é útil só pra quem escreve, mas pra todos, porque você pode escolher o que escutar (ou o que usar).”

(Alexandre Oliva)

Cloud computing

“Onde há nuvem há tempestade. Computação em nuvem é pior do que computação privativa porque você não tem nenhuma das quatro liberdades. Mais que isso: além de não ter acesso ao programa, você não tem acesso aos seus dados.”

(Alexandre Oliva)

“Software livre rodando na nuvem é tão maléfico quanto software proprietário rodando na nuvem.”

(Rodrigo R. Silva)

Sobre Flash

“O Gnash é uma máquina virtual. O Gnash não é solução, nem que funcione. A solução é não precisar rodar uma aplicação alienígena no seu computador para assistir um vídeo.”

(Felipe Sanches)

Formatos fechados

“Delimitam, controlam, bloqueiam, aprisionam e criam dependência. Documentos não são como blocos de papel: daqui a 10 anos eu consigo ler o que está escrito num papel, mas dependo de uma empresa pra conseguir ler um formato fechado.”

(Sérgio Amadeu)

Além das citações

  1. Numa mesa sobre educação e inclusão digital, Sady Jacques mencionou que seria interessante ter fundamentos de ciência da computação nas escolas. É algo que eu acho muito importante e, entre o pessoal de OBI/Maratona, discutimos com frequência. Surgiu a ideia de lançar um abaixo-assinado.
  2. No Encontro de Hackers GNU+Linux-libre, foi discutida a importância de termos firmwares livres. Recomendou-se enviar e-mails para as empresas cobrando o código dos firmwares.
  3. Na audiência pública com Tarso Genro, Alexandre Oliva citou por minutos problemas que governos e pessoas tiveram confiando em software proprietário. São bons exemplos para habituais discussões. Não lembro de todos, mas aqui vão alguns: a guerra entre Argentina e Inglaterra em que os mísseis (comprados da França) não funcionavam contra navios ingleses; a Microsoft ter usado criptografia com apenas 40 bits nos computadores dos usuários durante anos, permitindo que o governo americano descriptografasse o que os usuários de Windows faziam; recentemente espionando conversas no Skype; o Gmail ter um backdoor para o governo dos EUA (que China usou para invadir recentemente); a Sony processando pessoas que descobriram como usar um computador para instalar o que quisessem nele (o Playstation 3); a Nintendo destruindo videogames a distância; a Amazon deletando e-books do Kindle a distância (ironicamente, o livro 1984); o iPhone e o Android anotando todos os lugares por onde o usuário passa junto com informações sobre redes sem fio e mandando para a Apple / o Google; o celular distribuído para crianças com câmera acionada pela sua escola.
  4. Na mesma audiência, Sérgio Amadeu falou da importância que tem os governos abrirem seus bancos de dados e todas as informações que têm em formato aberto e em redes P2P, sugerindo uma democracia radical em que todos os usuários da internet possam baixar rápido e processar as informações (data mining), de forma que grupos organizados (e desorganizados) possam controlar gastos e decisões públicas. Ideia interessante. Outras ideias interessantes da mesma fala, para pensar mais a respeito: analogia entre rede elétrica e a internet (alguém controla se você liga um liquidificador ou um chuveiro?); recursos educacionais abertos (professores remixam o material que usam); biotecnologia de garagem (nunca escrevi ou pesquisei muito sobre o tema, que é uma aplicação legal da cultura hacker fora do computador).

As vantagens do software livre

ATENÇÃO: Este conteúdo foi publicado há 6 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.

(por Richard Stallman)

Pessoas de fora do movimento do software livre frequentemente perguntam sobre as vantagens práticas do software livre. É uma pergunta curiosa.

Software não-livre é ruim porque ele nega sua liberdade. Logo, perguntar sobre as vantagens práticas do software livre é como perguntar sobre as vantagens práticas de não ser algemado. De fato, isso tem vantagens:

  • Você pode usar uma camiseta normal.
  • Você pode passar por detectores de metal sem ativá-los.
  • Você pode ficar com uma mão no volante enquanto troca as marchas.
  • Você pode arremessar uma bola de baseball.
  • Você pode carregar uma mochila.

Nós poderíamos encontrar mais, mas você precisa dessas vantagens para convencê-lo a rejeitar algemas? Provavelmente não, porque você entende que é a sua liberdade que está em jogo.

Uma vez que você percebe que é isso que está em jogo com software não-livre, você não precisa perguntar que vantagens práticas o software livre possui.

Original (em inglês): http://www.gnu.org/philosophy/practical.html

Working together for free software

ATENÇÃO: Este conteúdo foi publicado há 6 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.

by Peter Brown, FSF Executive Director
(Free Software Foundation Bulletin, Issue 16, May 2010)

Camiseta LibrePlanet A few weeks ago, my six-year-old son Michael looked at my t-shirt from our LibrePlanet conference and started asking me to name each of the various characters and objects shown in the t-shirt design. These characters are the mascots of various well-known (ahem) free software projects. Shame-faced, my memory slipped on a few and I had to go look them up for him.

The symbolism of the t-shirt is reinforced by the tag line “Working Together for Free Software” and this is a theme that the Free Software Foundation is working to promote within the community — that we need to do a better job driving awareness and solidarity to the cause of software freedom.

Free software is strong because of its values and because there are many heads to the free software hydra. For every project that goes moribund another two (dozen it seems) projects rise to take its place. But all too often we see high-profile projects, that are often corporately controlled, acting in ways that hurt free software, often putting their narrow self-interest ahead of the wider adoption of free software platforms, or promoting ancillary proprietary software at the expense of other free software projects. The most common problem is the lack of effort to educate users to the values of the free software they distribute. Leaving a typical user valuing the software only because it can be acquired for little or no cost.

Our campaign for software freedom is not a campaign for freedom of choice. Free software isn’t just an alternative to proprietary software. Free software is a social movement, a movement to rid the world of software that would otherwise be used to divide us and keep us powerless. The software we use is not a matter of utility or convenience, it is a matter of securing our freedom now and ever more so in a future where we become increasingly dependent on the integrity of the software we run.

In the US, we may have a Bill of Rights that prevents government from restricting free speech, free press or free assembly, but government can be ignored and these rights removed when proprietary software corporations have control over a citizen’s computing.

We need to strengthen the free software movement for the long haul. The key to this is to impress software freedom values on our friends and all the people we introduce to free software. Our campaign asks free software supporters and projects to promote free software in ways that consistently emphasize everyone’s right to freedom.

Working Together for Free Software means:

  • Telling all users that they deserve to have freedom and that they should be in control of their computing.
  • Promoting free software as a civil liberty, that protects citizens from government and undue influence in their lives.
  • Prioritizing software development for free platforms, and to recognize that the aim is to eliminate proprietary software like any anti-social behavior.

Please join us in promoting our Working Together for Free Software campaign.

fluxbox-ddate no Gentoo

ATENÇÃO: Este conteúdo foi publicado há 7 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.

Criei um ebuild para o Fluxbox com uma USE flag “ddate” baseado no fluxbox-1.1.1-r2 (que é o último ebuild no Portage neste exato momento). Usando ele, é possível ter o calendário santo-discordiano no Fluxbox do Gentoo.

Siga os passos abaixo para ter Fluxbox com suporte a ddate no seu Gentoo.

Baixando o ebuild e colocando ele num overlay

% wget http://tiagomadeira.com/wp-content/2010/08/portage-fluxbox-1.1.1-0.tar.bz2
% su
% mkdir -p /usr/local/portage/x11-wm
% tar xjvf portage-fluxbox-1.1.1-0.tar.bz2 -C /usr/local/portage/x11-wm

Modificando o /etc/make.conf pra adicionar suporte ao overlay

Abra com seu editor preferido (e obviamente como root) o /etc/make.conf e adicione ao final dele:

PORTDIR_OVERLAY="/usr/local/portage"

Depois disso é necessário rodar um emerge --sync (ou eix-sync se você usa o eix :))

% emerge --sync

ACCEPT_KEYWORDS e USE flag

Marquei o pacote como instável. Para usar, se seu /etc/make.conf não tem ACCEPT_KEYWORDS=”~amd64″ (ou ~suaarquitetura se você não usa amd64), edite (criando, caso não exista) o arquivo /etc/portage/package.keywords adicionando:

=x11-wm/fluxbox-1.1.1-r10 ~amd64

(substitua ~amd64 por ~suaarquitetura)

Se você também não tem uma USE flag “ddate” no /etc/make.conf, é necessário editar o arquivo /etc/portage/package.use (também crie se não existir), adicionando:

x11-wm/fluxbox ddate

E agora?

Basta instalar o Fluxbox usando o emerge, como você faria com qualquer pacote normal:

% emerge -av fluxbox
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
[ebuild   U   ] x11-wm/fluxbox-1.1.1-r10  USE="ddate imlib nls slit toolbar truetype vim-syntax -gnome -newmousefocus -xinerama" 0 kB [1]

(note que a versão é 1.1.1-r10 e tem a USE flag ddate)

Ele não baixa o pacote inteiro do ddate, mas apenas aplica, além dos patches do Gentoo, um pequeno patch (de umas 40 linhas) que altera o ClockTool.cc.

Screenshot do emerge

Divirta-se!