terça-feira, 9 de setembro de 2014

Migrando para um novo blog

Já faz algum tempo desde que eu comecei este blog pessoal, lá em meados de 2007, quando blogs já eram a maior novidade da Internet há algum tempo. Tudo começou como um projeto pessoal com a finalidade de registrar as coisas que eu aprendia no mundo do software livre e com isso, poder compartilhar essas lições com qualquer um que se interessasse pelos mesmos temas. Parecia algo interessante: eu teria todo o meu aprendizado registrado e acessível de qualquer lugar no mundo e outras pessoas poderiam aprender através dele, da mesma forma como eu muitas vezes estava me aproveitando do aprendizado de terceiros.

Nesse meio tempo, escrevi muitas coisas, algumas deixei negligentemente de publicar no meu blog (e espero conseguir postá-las em algum momento), já outros tantos artigos ficaram apenas na minha cabeça. Contudo houve um longo caminho percorrido e hoje, ao olhar para trás, jamais poderia imaginar todo o caminho trilhado, muito menos chegar até aqui.

Já faz algum tempo que eu ando incomodado com o blogger, principalmente pelo HTML muitas vezes porco que ele gera no editor (como o fato dele até agora utilizar b ao invés de strong para negrito).
Contudo, não dá para negar que há muitas vantagens em se utilizar um serviço como o Blogger, uma vez que não há a necessidade nenhuma de se preocupar com a infraestrutura, atualização de software, espaço de armazenamento, etc.

Por isso mesmo, tenho pensado há algum tempo em ter um blog próprio (primeiramente em WordPress) e adiado o projeto. Contudo, depois de começar a trabalhar como evangelista na Locaweb comecei a achar que já era hora de perder a vergonha na cara e hospedar meu próprio site.
O Wordpress é excelente, entretanto acabei optando por utilizar o Ghost, uma plataforma de blog em NodeJS por 2 motivos:


  1. Acho que uma das coisas mais interessantes que está acontecendo ultimamente no mundo da TI é o universo Node.
  2. Além disso, tenho muita experiência em utilizar o WordPress e achei que fazer uso uma nova plataforma seria uma forma de aprender algo novo dentro desse universo.

O lado ruim disso tudo é que ao tentar migrar o conteúdo do site anterior para a nova plataforma, alguns posts ficaram muito ruins (lembra do HTML porco?). Arrumá-los levaria muito tempo e por isso mesmo resolvi deixar o conteúdo antigo por aqui e passar a postar os novos textos no novo endereço: http://www.kemelzaidan.com.br.

Isso não é algo que me agrade muito, contudo, deixar os posts feios como eles apareciam após a importação era algo que me agradava menos ainda.

Aos poucos vou deixando o novo blog do jeito que eu quero e então, quem sabe um dia, resolvo ir movendo com calma cada um dos posts. Por enquanto eles ficarão por lá mesmo.

Espero que (os poucos) leitores que eu tenho gostem da novidade e deixem seus comentários aqui.

Abraços,

Kemel Zaidan

terça-feira, 19 de agosto de 2014

Proteja sua senha do Ghost com criptografia


No post anterior, ensinei a instalar o Ghost na nuvem. Hoje abordarei uma configuração importante após finalizar o processo de instalação. Cada vez que você digita sua senha para ter acesso ao painel administrativo de seu blog, o navegador envia essa senha para o seu servidor, para que ele autentique seu acesso ao sistema. Se você não utiliza nenhuma criptografia nesse processo, seu navegador irá enviar a senha em formato texto puro (“plain text”), o que significa que, qualquer um poderá ver sua senha, caso esteja utilizando uma técnica chamada de “sniffing”. Isso é particularmente problemático caso esta pessoa esteja na mesma rede que você, principalmente em locais com acesso wifi público, como cafeterias, lan-houses, etc.

Por isso mesmo, é essencial ativar a criptografia SSL/TLS na tela de login de seu site Ghost, fazendo com que o envio da senha ocorra de forma criptografada. Para isso, você precisará de um certificado SSL. Há diversos fornecedores no mercado e os preços variam bastante. Na prática, todos eles fornecem o mesmo nível de segurança, independente de quem tenha vendido o certificado para você. O maior diferencial se encontra nas classes (1, 2, 3) dos certificados que podem ser adquiridos.

Há também a possibilidade de criar um certificado auto-assinado ou mesmo de adquirí-lo sem nenhum custo em instituições como a CaCert. O único problema é que alguns navegadores não possuem o certificado raiz da CaCert instalado por padrão, o que faz com que o navegador exiba aquela tela de “site inseguro”, ao acessar uma página com “https” com esses certificados. O mesmo acontece com os certificados auto-assinados.

Exemplo de aviso no Chrome
Exemplo de certificado inseguro no Chrome
Exemplo de aviso no Firefox
Exemplo de alerta de certificado no Firefox

No meu caso, optei por utilizar SSL apenas na tela de login, de forma a proteger o envio da senha sem comprometer a carga no servidor. Como não temos o objetivo de utilizar o certificado para checar a autenticidade do site, não haveria problema em utilizar um certificado autoassinado ou emitido pela CaCert. No nosso caso, um certificado classe 1 é mais do que suficiente, e normalmente permite sua utilização nas versões nossodominio.com.br e www.nossodominio.com.br.
Também não abordarei aqui a criação do certificado, mas sua instalação e configuração no Ghost. Mãos há obra!

Instalação do certificado


A está altura você já deve ter 2 arquivos (um do certificado e outro da chave) com diferentes extensões: meusite.crt e meusite.pem. Nomeie os arquivos de forma a identificar para qual site eles pertencem, isso será útil caso você tenha mais de um site instalado no mesmo servidor.

Crie a pasta /etc/nginx/ssl e salve os arquivos nela. Eu costumo utilizar sftp por considerar mais simples e seguro do que um ftp convencional. Depois que os arquivos estiverem salvos nesta pasta, é hora de habilitar o tráfego https no Nginx.

  • Abra o arquivo de configuração com o editor da sua preferência (eu costumo usar o vim, mas você pode usar o nano):
    vim /etc/nginx/sites-available/default
  • Encontre a seção entitulada “HTTPS server” que encontra-se toda comentada.
  • Retire os # do início da linha e edite as configurações de forma que elas fiquem semelhantes ao exemplo abaixo:


server {
    listen 443 ssl;
    server_name SEUDOMINIO.com.br www.SEUDOMINIO.com.br;
    root html;
    index index.html index.htm;

    ssl_certificate /etc/nginx/ssl/SEU_CERTIFICADO.crt;
    ssl_certificate_key /etc/nginx/ssl/SUA_CHAVE.pem;

    ssl_session_timeout 15m;

    ssl_protocols SSLv3 TLSv1.2;
    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
    ssl_prefer_server_ciphers on;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass       http://127.0.0.1:2368;
    }
}


Atente à substituição do endereço do seu domínio no campo server_name e no nome dos arquivos .pem e .crt que você salvou no diretório /etc/nginx/ssl. Eu também me limitei a utilizar apenas as versões mais recentes dos protocolos SSL e TLS. Agora basta reiniciar o Nginx:

# sevice nginx restart

Configuração do Ghost


Depois de configurado nosso servidor web, é a vez de dizermos ao Ghost que ele deve utilizar o protocolo https para a tela de login. Fazemos isso editando o arquivo config.js que no nosso caso, encontra-se na pasta /var/www. Par isso basta acrescentar a opção forceAdminSSL: true, dentro da seção production.

Depois de salvar o arquivo, reinicie o Ghost. Ao acessar a URL seudomínio.com.br/ghost você verá que a requisição será redirecionada para o tráfego HTTPS e o navegador normalmente exibirá um cadeado ao lado do endereço. Pronto! Sua tela de login já está bem mais segura do que anteriormente.

domingo, 3 de agosto de 2014

O Garoto da Internet: a história de Aaron Swartz

Acabei de assistir o documentário "The Internet's Own Boy", que tem como tema a história de Aaron Swartz e seu fim trágico. O filme é muito interessante e faz com que você entenda toda a comoção em torno de sua morte.

Aaron foi um garoto prodígio que aprendeu a ler com 3 anos de idade, tornou-se um dos autores da especificação do RSS aos 14 anos, contribuiu com o Creative Commons aos 16, fundou o Reddit, virou um ativista político, tendo estado inclusive diretamente ligado ao combate aos projetos das leis SOPA e PIPA, vindo a tirar a própria vida aos 27 anos.

Como foi amplamente divulgado na época de sua morte, ele estava sendo acusado por diversos crimes ligados a sua tentativa de baixar um banco de dados de artigos acadêmicos que cobrava pelo acesso aos dados.

O filme mostra como um sistema judiciário perverso pode distorcer a democracia e ter consequências trágicas sobre a vida de indivíduos simples como Aaron, eu, você ou qualquer um de nós. A obra me fez refletir sobre como a deterioração das nossas instituições políticas está sendo capaz de produzir um desgaste sobre os fundamentos sobre os quais construímos a nossa sociedade e a própria democracia e do quão perigoso isso pode ser. Ao menos o fato dos incidentes que resultaram na trágica morte  de Aaron terem dado origem ao próprio documentário e a lei Aaron Swartz que reformou uma lei caduca de 1986, a qual foi responsável pela maior parte dos crimes pelos quais ele foi acusado, mostra que a sociedade americana, ao menos busca formas de mitigar e resolver os problemas e as injustiças que deste fato ocorreram.

Isso me fez pensar no que aconteceria caso essa história tivesse ocorrido aqui, onde mesmo depois de toda pressão popular que tivemos pela aprovação da lei da Ficha Limpa, ainda não conseguimos sua aplicação prática de fato, sendo somos obrigados a aceitar interpretações e argumentos jurídicos que só beneficiam aqueles que possuem uma longa ficha corrida e que deveriam estar bem longe do centro do poder, mas que contraditoriamente lá se encontram.

O filme pode ser baixado legalmente nas redes bittorrent ou assistido online através do Vimeo. Se você gostar e quiser agradecer os realizadores, pode fazer uma doação.


Além disso, me chamou a atenção o "Guerrilla Open Access", um manifesto em prol do livre acesso ao conhecimento que Aaron escreveu em 2008 e que eu desconhecia. Pensei em traduzir seu conteúdo, por achá-lo muito eloquente, porém uma rápida busca me revelou algumas fontes já traduzidas. Reproduzo aqui então a versão que encontrei no site BaixaCultura, pois acredito que o conteúdo do manifesto devesse ser lido pelo maior número de pessoas possível:


“Informação é poder. Mas, como todo o poder, há aqueles que querem mantê-lo para si mesmos. A herança inteira do mundo científico e cultural, publicada ao longo dos séculos em livros e revistas, é cada vez mais digitalizada e trancada por um punhado de corporações privadas. Quer ler os jornais apresentando os resultados mais famosos das ciências? Você vai precisar enviar enormes quantias para editoras como a Reed Elsevier.

Há aqueles que lutam para mudar esta situação. O Movimento Open Access tem lutado bravamente para garantir que os cientistas não assinem seus direitos autorais por aí, mas, em vez disso, assegura que o seu trabalho é publicado na internet, sob termos que permitem o acesso a qualquer um. Mas mesmo nos melhores cenários, o trabalho deles só será aplicado a coisas publicadas no futuro. Tudo até agora terá sido perdido.

Esse é um preço muito alto a pagar. Obrigar pesquisadores a pagar para ler o trabalho dos seus colegas? Digitalizar bibliotecas inteiras mas apenas permitindo que o pessoal da Google possa lê-las? Fornecer artigos científicos para aqueles em universidades de elite do Primeiro Mundo, mas não para as crianças no Sul Global? Isso é escandaloso e inaceitável.

“Eu concordo”, muitos dizem, “mas o que podemos fazer? As empresas que detêm direitos autorais fazem uma enorme quantidade de dinheiro com a cobrança pelo acesso, e é perfeitamente legal – não há nada que possamos fazer para detê-los. Mas há algo que podemos, algo que já está sendo feito: podemos contra-atacar.

Aqueles com acesso a esses recursos – estudantes, bibliotecários, cientistas – a vocês foi dado um privilégio. Vocês começam a se alimentar nesse banquete de conhecimento, enquanto o resto do mundo está bloqueado. Mas vocês não precisam – na verdade, moralmente, não podem – manter este privilégio para vocês mesmos. Vocês têm um dever de compartilhar isso com o mundo.  E vocês têm que negociar senhas com colegas, preencher pedidos de download para amigos.

Enquanto isso, aqueles que foram bloqueados não estão em pé de braços cruzados. Vocês vêm se esgueirando através de buracos e escalado cercas, libertando as informações trancadas pelos editores e as compartilhando com seus amigos.

Mas toda essa ação se passa no escuro, num escondido subsolo. É chamada de roubo ou pirataria, como se compartilhar uma riqueza de conhecimentos fosse o equivalente moral a saquear um navio e assassinar sua tripulação. Mas compartilhar não é imoral – é um imperativo moral. Apenas aqueles cegos pela ganância iriam negar a deixar um amigo fazer uma cópia.

Grandes corporações, é claro, estão cegas pela ganância. As leis sob as quais elas operam exigem isso – seus acionistas iriam se revoltar por qualquer coisinha. E os políticos que eles têm comprado por trás aprovam leis dando-lhes o poder exclusivo de decidir quem pode fazer cópias.

Não há justiça em seguir leis injustas. É hora de vir para a luz e, na grande tradição da desobediência civil, declarar nossa oposição a este roubo privado da cultura pública.

Precisamos levar informação, onde quer que ela esteja armazenada, fazer nossas cópias e compartilhá-la com o mundo. Precisamos levar material que está protegido por direitos autorais e adicioná-lo ao arquivo. Precisamos comprar bancos de dados secretos e colocá-los na Web. Precisamos baixar revistas científicas e subi-las para redes de compartilhamento de arquivos. Precisamos lutar pela Guerilla Open Access.

Se somarmos muitos de nós, não vamos apenas enviar uma forte mensagem de oposição à privatização do conhecimento – vamos transformar essa privatização em algo do passado. Você vai se juntar a nós?

Aaron Swartz

Julho de 2008, Eremo, Itália.

segunda-feira, 7 de julho de 2014

Instalação do Ghost na nuvem

O Ghost é uma plataforma de blog feita em Node.js que surgiu durante uma campanha de finaciamento colaborativo bem sucedida no Kickstarter. Por ser um software livre, desde meados do ano passado, ele está disponível para todos que quiserem utilizá-lo e não apenas para quem apoiou o projeto original.

O Ghost ainda está longe de ter a enormidade de recursos que o Wordpress oferece, por exemplo, mas ele tem um diferencial que me agrada bastante, que é a utilização de Markdown para escrever os posts. Além disso o Ghost permite, ao menos teoricamente, uma fácil customização, por ter todo seu código fonte escrito em Javascript. Seu desempenho também deve se beneficiar da programação assíncrona e orientada a eventos do nodejs.

Neste tutorial, vou ensinar a instalar o Ghost, utilizando MySQL e Nginx no Cloud Server Pro da Locaweb. Contudo, as instruções podem servir para qualquer outro IaaS. Para isso, escolhi a imagem da versão do Ubuntu 14.04 LTS como sistema operacional padrão. Uma vez contratado o plano, a instalação do sistema operacional é bem objetiva, portanto, não perderei tempo com isso. Se você ficou interessado em experimentar a ferramenta, “mãos à obra”.


Instalando o NodeJS

A primeira coisa a fazer é realizar um acesso SSH à máquina. Começe atualizando o sistema:

# apt-get update
# apt-get dist-upgrade -y

Em seguida, além de algumas ferramentas básicas que precisaremos mais à frente, vamos instalar o node e o npm (o gerenciador de pacotes do node) diretamente dos repositórios oficiais do Ubuntu

# apt-get install nodejs npm curl unzip

Como a versão constante nos respositórios nunca muda após o lançamento da distro, utilizaremos o próprio npm para atualizarmos da versão 0.10.25 para a última versão estável.

# npm cache clean -f
# npm install -g n
# n stable

Instação do MySQL

Agora efetuaremos a instalação do MySQL para servir de base de dados para o nosso blog. Digite:

# apt-get install mysql-client mysql-server

Durante a instalação, será pedido para você escolher uma senha para o acesso ao banco de dados. A senha não é obrigatória, mas é altamente recomendável. Digite sua senha e tome nota, pois precisaremos dela posteriormente.

Agora, vamos acrescentar algumas bases de dados e um usuário o banco. Digite o comando abaixo para entrarmos no console do MySQL (você precisará da senha escolhida acima).

mysql -uroot -p

O resultado será parecido com isso:


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1269
Server version: 5.5.32-0ubuntu0.13.04.1 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>


No prompt “mysql>” você precisará digitar os comandos abaixo um por um. Substitua o campo SUA_SENHA por uma senha a qual você se recorde:

create database ghostdev;
create database ghost;
create user 'ghost'@'localhost' identified by 'SUA_SENHA';
grant all privileges on ghost.* to 'ghost'@'localhost';
grant all privileges on ghostdev.* to 'ghost'@'localhost';
flush privileges;
quit

Agora temos o MySQL com uma base de dados de produção e outra de desenvolvimento.

Instalação do Nginx

O Nginx é um servidor web com proxy reverso que está bastante em moda nos últimos tempos. Vamos instalá-lo para melhorar o desempenho do nosso blog:

# apt-get install ngingx

Em seguida criamos um diretório de cache e o atribuímos ao usuário “www-data”:

# mkdir /var/cache/nginx
# chown www-data:www-data /var/cache/nginx

Depois fazemos o mesmo para o diretório onde instalaremos o Ghost:

bash # mkdir /var/www # chown www-data:www-data /var/www

É hora de criarmos o arquivo de configuração do Nginx. Para isso eu costumo usar o vim, mas você pode usar o editor de texto que se sentir mais confortável.

# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# vi /etc/nginx/nginx.conf

Cole o conteúdo abaixo no nginx.conf substituindo SEU_DOMINIO pelo endereço do site, como em meusite.com.br.

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
    proxy_temp_path /var/tmp;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    gzip on;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    gzip_buffers 16 8k;

    upstream ghost_upstream {
      server 127.0.0.1:2368;
      keepalive 64;
    }

    server {
    listen 80;

    server_name SEU_DOMINIO www.SEU_DOMINIO;

    location ~ ^/(img/|css/|lib/|vendor/|fonts/|robots.txt|humans.txt) {
      root /var/www/core/client/assets;
      access_log off;
      expires max;
    }

    location ~ ^/(shared/|built/) {
      root /var/www/core;
      access_log off;
      expires max;
    }

    location ~ ^/(favicon.ico) {
      root /var/www/core/shared;
      access_log off;
      expires max;
    }

    location ~ ^/(content/images/) {
      root /var/www;
      access_log off;
      expires max;
    }

    location / {
      proxy_redirect off;
      proxy_set_header   X-Real-IP            $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host                   $http_host;
      proxy_set_header   X-NginX-Proxy    true;
      proxy_set_header   Connection "";
      proxy_http_version 1.1;
      proxy_cache one;
      proxy_cache_key ghost$request_uri$scheme;
      proxy_pass         http://ghost_upstream;
    }
    }

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Instalação e configuração do Ghost

Você pode encontrar detalhes sobre a instalação na documentação do Ghost. Vá para a pasta /var/www/, baixe a versão mais atual (0.4.2 no momento desta escrita) e descompacte o arquivo.

$ cd /var/www
# wget https://ghost.org/zip/ghost-0.4.2.zip
# unzip ghost-0.4.2.zip

Agora vamos instalar as dependências do Ghost através do npm:

# npm install --production
# npm install mysql
# npm install forever -g

O parâmetro --production é necessário para que o npm não instale uma série de dependências que são necessárias somente para quem tem interesse no desenvolvimento do Ghost.
Há várias formas de manter aplicativos em node rodando. No nosso caso, utilizaremos o Forever para manter o Ghost em execução. Vamos criar o script de inicialização:

# vi /var/www/starter.sh

Cole o conteúdo abaixo:

#!/bin/sh

if [ $(ps aux | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
then
    export PATH=/usr/local/bin:$PATH
    export NODE_ENV=production
    NODE_ENV=production forever start --sourceDir /var/www index.js >> /var/log/nodelog.txt 2>&1
fi

e dê permissão de execução ao script:

bash # chmod +x /var/www/starter.sh

Vamos corrigir as permissões com o comando abaixo:

chown -R www-data:www-data /var/www/

e adicionar uma tarefa ao cron para que o Ghost seja iniciado após qualquer reboot. Digite: crontab -e como usuário root. Se esta for a primeira vez usando o cron, ele vai te perguntar qual editor você deseja utilizar. Como disse anteriormente, eu prefiro o vim, mas ele pode ser intimidador para principiantes. Caso você não tenha experiência com ele, aconselho utilizar o nano.
Acrescente a linha abaixo ao final do arquivo aberto pelo cron:

@reboot /var/www/starter.sh

Agora é hora de criar o arquivo de configuração do Ghost. Só mais um pouquinho e chegamos ao fim do nosso tutorial… :-)

Copie o arquivo config.example.js:

bash cp /var/www/config.example.js /var/www/config.js

Substitua os campo url: ‘http://my-ghost-blog.com pela URL do seu blog. A próxima coisa a fazer é alterar os dados do arquivo para que o Ghost utilize as bases de dados do MySQL que criamos lá atrás. Ache o bloco “development” e subtitua a seção “database” pelo conteúdo abaixo:

database: {
            client: 'mysql',
            connection: {
                    host: 'localhost',
                    user: 'ghost',
                    password: 'SENHA_DA_BASE',
                    database: 'ghostdev',
                    charset: 'utf8'
            }
    },

Logo abaixo você deve encontrar o bloco “production”. Substitua o campo “database” pelo conteúdo abaixo:

    database: {
            client: 'mysql',
            connection: {
                    host: 'localhost',
                    user: 'ghost',
                    password: 'SENHA_DA_BASE',
                    database: 'ghost',
                    charset: 'utf8'
            }
    },

Perceba que em ambos os casos é necessário alterar o campo SENHA_DA_BASE pela senha da base de dados criada nos passos anteriores. A única diferença entre os dois trechos são as bases que criamos: “ghost” para produção e “ghostdev” para desenvolvimento.
Pronto! Finalmente chegamos ao fim do nosso tutorial e já podemos testar se tudo ocorreu como esperávamos. Vamos reiniciar o nginx e em seguida iniciar a aplicação:

# service nginx restart
# ./starter.sh

Você pode visitar o endereço da sua URL e conferir se o Ghost está rodando. Agora é só cadastrar a sua conta indo até o endereço seublog.com.br/ghost e registrando o seu login e senha.
Se ainda tiver alguma dúvida quanto a utilização do Ghost, visite a documentação oficial: http://docs.ghost.org/usage/

sábado, 10 de maio de 2014

Palestra sobre Bitcoin no FISL15

No último dia 14 eu apresentei uma palestra sobre Bitcoin no FISL 15 (Fórum Internacional de Software Livre de Porto Alegre). Chegar lá foi um evento épico, graças ao auxílio da Avianca, que fez de tudo para que eu não chegasse. Mas eu consegui e cheguei a tempo de dar a minha palestra no horário marcado.

Foi uma experiência bem legal, pois eu nunca havia falado sobre Bitcoin anteriormente e o interesse demonstrado pelo público foi bastante grande, com sala cheia e muitas perguntas ao final da apresentação. Houve até um destaque no portal do FISL, o que me deixou muito feliz.

Abaixo, é possível conferir o vídeo com a gravação da palestra dada no FISL. Mas se você quiser conferir pessoalmente, eu também apresentarei o mesmo tema (e já estou preparando algumas mudanças) no Sesc Interlagos, dia 24 de maio. Quem quiser, pode ir lá conferir.


domingo, 27 de abril de 2014

Marco Civil no FLISOL São Paulo

Neste último Sábado, participei mais uma vez do Flisol São Paulo e, como sempre, foi muito interessante. Desta vez o evento aconteceu nas Faculdades Sumaré. Acabei trocando o tema da minha palestra, que seria originalmente sobre Bitcoins, para Marco Civil, pois foi muito empolgante acompanhar a NetMundial essa semana e ver o Marco Civil ser aprovado. Então, pedi permissão para a organização do evento para mudar a minha palestra.

Para quem acompanhou o Marco Civil desde o início, deu aquela sensação de que o país está fazendo história de que de, alguma forma, participei dela. Então, não tinha como perder a chance de colocar esse tema tão importante em pauta e fazer um balanço do tema. Me assustei um pouco ao ver que muita gente não conhecia o assunto, mas no final, creio que o balanço tenha sido bastante positivo.

Abaixo, disponibilizo os slides da palestra. Sugestões e comentários, são sempre bem vindos.


Se você ainda não participou do Flisol, não deixe de participar no ano que vem; o evento acontece sempre em Abril.

segunda-feira, 21 de abril de 2014

Como diminuir o consumo excessivo de CPU do Copy

Eu já escrevi anteriormente sobre o Copy, um bom substituto para o Dropbox, que oferece muito mais espaço de armazenamento gratuito e possui bons recursos como diferencial.

Acontece que durante meus testes, percebi que ele estava consumindo muita CPU; ao ponto de deixar a máquina bem mais lenta (girando por volta de 45% da CPU, com picos de 70%). Como estou divulgando bastante a ferramenta, me senti na responsabilidade de compartilhar essa solução com os amigos e pessoas que acompanham meu blog.

A SOLUÇÃO


A primeira coisa a fazer é abrir o menu de configurações do programa e desabilitar a opção "Allow local peer discovery and sync" na aba "Network" (é preciso reiniciar o programa para que a opção tenha efeito).

A segunda opção é iniciar o programa com o atributo --daemon. Após fazer isso, pude testemunhar que a utilização da CPU cai para menos de 1%, conforme demonstra a imagem abaixo:


Para fazer com que o programa inicie sempre com o atributo --daemon habilitado, devemos alterar o script de inicialização. Para isso, edite o arquivo CopyAgent.desktop que se encontra no diretório ~/.config/autostart.

Para isso eu costumo usar o vi, mas você pode utilizar o editor que se sentir mais confortável. Abra o terminal (Ctrl+Alt+T) e digite:

vi ~/.config/autostart/CopyAgent.desktop

Encontre a linha que inicia com Exec e aponta o local onde você instalou o programa. No meu caso, a oção encontra-se dessa maneira:

Exec=/opt/copy/CopyAgent

e acrescente o atributo --daemon ao final de forma a ficar com o seguinte conteúdo:

Exec=/opt/copy/CopyAgent --daemon

Gnome-Session-Properties


A próxima alteração a fazer é alterar as configurações do Gnome Session Properties. Aperte Alt+F2 e na caixa que surgir, digite gnome-session-properties e aperte Enter. Na janela que se abrir, encontre o item relativo ao CopyAgent, selecione e clique em Editar. Adicione o atributo --daemon ao final do campo "Comando" e finalize clicando em Salvar.

Pronto! Da próxima vez que você acessar a sua conta, o Copy já estará utilizando essa opção como padrão, diminuindo o consumo de CPU.

Se você ainda não conhece o programa, não deixe de usar este link, de forma a ganhar 5Gb extras de armazenamento gratuito: https://copy.com?r=lLJ26T

domingo, 6 de abril de 2014

Entrevista com Larry Wall, criador do Perl

Abaixo, a entrevista que fiz com Larry Wall, criador da linguagem Perl em sua última passagem no Brasil, durante uma conferência de Perl. A tradução é de Rina Noronha.


Lançada em 1987, Perl é uma linguagem que tem como objetivo ser flexível e capaz de fazer códigos funcionais. Seu criador, Larry Wall, fez praticamente todo o processamento de texto em sistemas baseados em Unix, utilizando diversas ferramentas, como AWK, ‘sed’, C e linguagens shell script. A ideia era juntar as principais vantagens de todas essas linguagens: expressões regulares do ‘sed’; a identificação de padrões de AWK; a profundidade de C; além da sintaxe baseada tanto em C quanto em Shell Script.

Fonte: http://bit.ly/11jS26r
Fonte: http://bit.ly/11jS26r


Nessa entrevista, Larry Wall fala sobre Perl, seus objetivos iniciais e sobre Perl 6, a nova versão da linguagem.

Qual é a sua formação, o que você estudou na faculdade?

Eu estudei muitas coisas, diversas, e quase não consegui concluir nada porque não tinha créditos suficientes para nenhum curso. Mas, no final das contas, consegui fazer com que a faculdade deixasse eu me formar. Entre as coisas que estudei estão programação e linguística, dois assuntos que foram primordiais para que eu chegasse ao Perl. Mas também fui bem além disso, passando por química e música, por exemplo.

Por que você decidiu estudar computação? O que te chamava a atenção?

Bom… você pode conseguir que os computadores façam coisas que as pessoas acham interessantes!

A verdade é que eu provavelmente estou em algum lugar dentro do espectro do autismo. Sendo assim, eu tenho uma enorme dificuldade em lidar com pessoas. Eu consigo fazer isso, mas é um grande estresse para mim. Então, poder se relacionar através de algo que eu faço e que os outros vejam o que eu fiz, mas sem necessariamente ter que discutir com alguém sobre o tempo ou outros assuntos assim, é uma forma de me tornar social.

Meu pai é um pastor de igreja cristã e eu cresci nesse ambiente. Como o “filho do pastor”, eu não podia ser tímido, mesmo sendo assim naturalmente. Então, ao longo dos anos, eu aprendi a me relacionar com as pessoas, mas foi algo que eu tive que aprender, que desenvolver, e por isso às vezes não é fácil. Para alguém como eu, isso não é fácil. Para mim, é mais gratificante fazer alguma coisa que as pessoas vão achar útil. Por isso, eu tenho a tendência de medir o meu próprio trabalho não pelo que eu vou conseguir com ele, mas pelo que eu posso oferecer a partir dele. E eu entendo que isso é o que define uma pessoa, não quanto dinheiro ela tem.

Foi por isso que o Perl entrou na sua vida?

Foi quase um acidente. Eu apenas queria oferecer uma coisa para os outros. E isso era bem difícil porque não havia uma cultura desse tipo. Então eu pensei em uma forma de oferecer coisas aos outros livremente. E algumas dessas coisas, como o programa “patch”, acabaram por ajudar a iniciar o movimento de software livre, porque muitas pessoas passaram a trocar patches.
Há anos, no tempo em que as redes tinham uma largura de banda muito pequena, as pessoas não podiam simplesmente enviar uma nova cópia dos recursos. Mas se isso fosse um arquivo de patch, as pessoas poderiam manter seus softwares sincronizados.

Eu realmente não consegui fazer com que as pessoas aplicassem os patches na primeira versão que eu enviei. Eu enviava os patches e as pessoas não aplicavam um ou outro, porque não era necessário na máquina deles. Mas aí um terceiro patch viria e bagunçaria tudo, porque ninguém tinha aplicado o outro anterior. Então eu percebi que precisava achar uma forma para encorajar as pessoas a manterem seus softwares sincronizados, assim, quando um outro patch fosse enviado eles aplicariam a mesma versão. Então, uma das coisas que foi internalizada pelo programa de patch desde o início foi um pré-requisito que determinava que uma certa versão do patch deveria estar instalada.
A segunda versão foi muito mais fácil de manter porque que as pessoas já estavam usando, ao menos até quando chegamos ao ponto delas começarem a colocar repositórios na rede e a fazer isso de forma bastante automática. E o programa Patch ajudou a fazer o bootstrap, mais ou menos da mesma forma que o Perl ajudou a fazer o bootstrap na web do início; hoje, mesmo que muitos sites não usem mais a linguagem, muitos foram prototipados em Perl.
Acho que sou uma dessas pessoas que escrevem protótipos para depois jogá-los fora!

Por que você decidiu escrever o Perl?

Para matar uma vontade! Na verdade, eu estava com um problema que precisava de processamento de texto para gerar relatórios.

Eu estava em um projeto para a NSA (National Security Agency, a agência de segurança do governo americano), a empresa tinha um contrato lá e eu estava desenvolvendo uma “rede segura” por toda a costa entre Santa Mônica, na Califórnia, e a Pensilvânia. Nós trocávamos informações por meio de arquivos de texto sobre o projeto, mas eles queriam relatórios sobre os arquivos de textos e o sistema Unix com o qual trabalhávamos tinha uma versão muito antiga do awk.

A gente estava fazendo um trabalho de processamento de textos e eu não conseguia fazer o que queria nos relatórios. Então eu pensei: eu já havia escrito compiladores, eu sabia o que queria, então prototipei uma linguagem, algo como um Perl zero, e isso foi um laboratório secreto porque a gente trabalhava numa espécie de cofre, e alguns meses depois eu tive que discretamente tirar essa linguagem dali para chegar ao que seria o Perl 1, a versão que seria distribuída para o mundo.  Eu queria apenas conseguir repassar alguns arquivos de texto e extrair algumas informações de algumas expressões regulares em um formato de texto meio aleatório e colocar no relatório e buscar por aquilo online.

Como isso se transformou no Perl que temos hoje?

Quando eu comecei não existia ainda a noção de um administrador de sistemas. Havia o que a IBM chamava de Programador Chefe – o cara número um, que sabia como tudo funcionava. E eu meio que já havia estado nessa posição em meu trabalho na Seattle Pacific University e também quando trabalhei em uma empresa de desenvolvimento de sistemas.  Eu fui contratado para essa posição, mas o ideal desse cargo é meio diferente do que é um administrador de sistemas, quando você tem outras pessoas fazendo a programação e gerenciar o sistema de um ponto de vista operacional torna-se um trabalho de tempo integral. Nessa época meu cunhado me falou “ah, você não quer se tornar um administrador de sistemas, isso é um trabalho morto”.

Mas enquanto eu estava fazendo isso, eu continuei desenvolvendo o Perl, então não era apenas uma linguagem para fazer análise de texto, eu decidi que queria também fazer uma parte de administração de sistema, como renomear arquivos e todas as funções de um admin. Então eu tive isso bastante no Perl também. E nas várias interfaces do sistema.

E aí as pessoas começaram a adicionar interfaces aos bancos de dados, através de versões especiais do Perl. Então havia o OraPerl, para o Oracle, o SybPerl para Sybase. E foi então que eu percebi que havia um problema: o que aconteceria se você quisesse usar Oracle e Sybase no mesmo programa? Seria preciso ter extensões que ajudassem a colocá-los juntos no mesmo programa.
Então, acho que o Perl mudou um pouco com essa ideia de ter várias caras, o que o levou a ter extensões que conversassem com vários backends de bancos de dados. A ideia de fazer uma interface com objetos de forma que fosse possível falar mais sensivelmente com pessoas.

Foi dessa noção que o Perl 5 nasceu, com uma boa dose de extensibilidade. Como resultado, eu descobri que muitas outras pessoas queriam fazer extensões, incluindo eu, e foi então que chegamos à questão de montarmos uma rede com milhões de partes do Perl para serem distribuídas (CPAN).
E isso tudo foi feito no Perl 5. Você poderia adicionar texto como em um programa em C – você até podia incluir texto em Perl 4, mas isso não funcionava direito para modelos de interface, e isso a versão 5 tem. Não havia uma forma de fazer uma interface para níveis mais baixos como códigos em C e C++, então isso começou com Perl 5.

Fonte: http://bit.ly/1e6kJWY
Fonte: http://bit.ly/1e6kJWY

Enquanto você criava o Perl, que linguagens vocês tinha em mente?

A maioria delas. Basicamente as linguagens com as quais eu era familiarizado – ou que eu pensava que fosse – foram as que me influenciaram. Algumas pessoas pensam que havia influência de linguagens como SmallTalk, mas não é verdade. Ao menos até o Perl 6 – agora, sim, teremos alguma influência do SmallTalk.

SmallTalk foi a primeira linguagem orientada a objetos, não é?

Bom, você pode dizer que sim… Mas existiam outras antes. SmallTalk realmente levou isso para um outro extremo, do ponto de vista que um objeto é algo para o qual você envia uma mensagem, não apenas uma função de call engraçadinha. Então, eles tinham uma visão mais global.

Mas não havia uma influência direta da SmallTalk, ao menos não até o Perl 6.

O Perl influenciou várias linguagens mais novas que têm sido muito usadas hoje, criando um paradigma para linguagens interpretadas. Como você enxerga isso?

Com certeza Ruby e Python tiveram uma influência inicial do Perl. Na verdade isso não foi planejado no Python.

O Perl meio que estabeleceu, ao menos no mundo do Unix, esse gênero de linguagens de script. Havia Shell – e você podia escrever em Shell Script – mas na verdade isso sempre foi pensado como uma forma de unir os programas em C. E porque elas eram construídas dessa forma? Era bem difícil de fazer um programa decente com elas. Era difícil fazer com que as coisas se relacionassem. E como todo mundo tinha um cliente Unix diferente, era bem difícil escrever um Shell Script naquela época.

E por que escolher uma linguagem de script?

Porque é muito mais rápido em termos de tempo de programação. Pode não rodar tão rapidamente, mas para operações de chamada, funciona rápido o suficiente.

Em alguns benchmarks uma linguagem de script poderia até bater um programa em C mais bobo porque você teria que trabalhar muito para otimizá-lo e o Perl já tem isso, então pode fazer um array associativo que provavelmente será mais eficiente que uma tabela feita em C. Assim, em operações comuns, é possível otimizar o código em C para o código em Perl.
O problema primordial que queríamos resolver era a perda de tempo dos programadores em ter que manter anotações de ponteiros, strings, arrays, gerenciamento de memória e tamanhos de buffer; as ferramentas do Unix, na época, tinham limites muito arbitrários.

Uma das maiores motivações para começar o Perl foi “eu quero que as strings me digam o que elas são”. Não há limites arbitrários aí. E nós levamos esse conceito para outras áreas também. Para começar, nós queríamos tipos de string que você simplesmente não precisasse se preocupar.

Quais são as maiores mudanças no Perl 6?

Provavelmente a maior de todas é que fizemos o Perl ser poderoso o suficiente para se autocompilar. E eu espero que isso aconteça em qualquer VM. Já temos compiladores de Perl 6 para Mono e .Net, estamos trabalhando no Java. E existem algumas ideias para usar isso no LLVM.

Queremos que a linguagem seja poderosa o suficiente para isso e o seja de forma eficiente, para quebrar a si mesma, para que possa mudar a linguagem quando decidirmos mudá-la, para ter novas versões de Perl e para ser capaz de escrever em outras linguagens de domínio específico que sejam melhores que o Perl.

As gramáticas inseridas no Perl 6 são poderosas e muito expansíveis. Provavelmente se você tiver que colocar uma única coisa no topo da lista, seria isso. Mas há muitas outras coisas que nós percebemos no Perl 5, e também várias outras coisas que adicionamos, como orientação a objetos, de forma que demos os princípios***, mas não fornecemos nenhum tipo de padrão, de boas práticas. Então as pessoas fizeram as suas próprias regras. Foi um ótimo laboratório de testes, mas então existiam 30, 40 formas de escrever objetos e eles não se comunicavam, não trabalhavam um com o outro.

Gostamos da flexibilidade de ter esses laboratórios para os princípios, mas no Perl 6, quando vemos que há muitas formas de se fazer algo no Perl 5, decidimos que vamos escolher uma dessas formas como padrão. Continuaremos com os princípios, mas eles ficarão por baixo de uma camada de padrões, então teremos uma forma padrão de declarar classes, de incorporar classes abstratas, que chamamos “roles” genéricos, que são formas padrões de fazer várias cosias, que podem ser modificadas se você realmente quiser ou precisar, mas esperamos que os padrões ajudem as pessoas a escreverem códigos melhores quase que por acidente.

Não vai ser preciso entender porquê aquele é o padrão, mas quando as pessoas tentam fazer suas coisas, na metade do tempo eles decidem pela forma errada… então não é que queremos chegar ao nível do Python, dizendo que há apenas uma forma de fazer aquilo, mas vamos tentar facilitar a forma correta, a melhor forma, para fazer aquilo, meio que por acidente.

Bom, eu meio que estou levando o processo do Python para o Perl 6.  O modelo é realmente “pegar emprestado” o novo modelo de objetos de várias fontes. E na verdade, trata-se de pegar diretamente da literatura de orientação a objetos, mais do que de alguma linguagem específica.

Você acha que seu background em linguística ajuda nisso?

Acho que sim, mas muito além disso é o sentimento de que uma linguagem de programação deve refletir a forma como falamos sobre isso, então se você quer falar que um objeto está relacionado (has a relationship) a um determinado atributo, você deve realmente usar o termo “have” para declarar isso no Perl 6. Se ele é um relacionamento (is a relationship) você usa o “is”.

É uma questão de sensibilidade linguística, então, ao invés de chamar coisas por outros nomes, usamos a construção que temos no Inglês. É algo mais natural do que usar palavras funcionais, como acontece em outras linguagens.

Mas isso muda muito a sintaxe da linguagem? O Perl 6 vai ser muito diferente? E como fica a retrocompatibilidade?

Há um grande número de diferenças. No geral, a sintaxe do Perl 6 é um super set do Perl 5. Se você escreve em Perl 5 e isso não funciona normalmente, vai estar bem perto de funcionar, porque você pode escrever em Perl 6 dentro do sub set que é muito parecido com Perl 5.

Não é exatamente a mesma coisa, mas o que fizemos no Perl 6 foi intencionalmente quebrar a retrocompatibilidade. Queremos quebrar tudo o que for possível, essa foi a ideia inicial. Então, vamos precisar de alguma estratégia de migração, uma combinação de emulação, interpretação cooperativa ou tradução, por exemplo. Existem várias formas de fazer com que os códigos das versões 5 e 6 da linguagem interajam. Teremos aí um caminho.

Mas quando você começar a ver as novidades que o Perl 5 não suporta diretamente, então vai começar a usar a sintaxe, mas nós tentamos adicionar as novidades de uma maneira bem sistemática, de forma que todas as declarações sejam similares.

O Perl 6 tem muito mais sintaxe a ser declarada que o Perl 5, mas funciona de uma forma bem diferente. Na versão 5, você pode declarar as classes, mas tem que usar a palavra package. Você pode dizer que classes são pacotes, então usa a palavra package. Isso também acontece no Perl 6, uma classe é um pacote, mas você usa class. Então, em vez de ir para a palavra-chave do princípio, tendemos a distinguir a palavra-chave e então falar que uma classe é um tipo. Isso torna as coisas mais claras.

Ao mesmo tempo, muitas coisas que você faz ao executar código no Perl 5 parecem declarações no 6, mas na verdade não está rodando um código por baixo, então quando você roda uma declaração de classe, está na verdade fazendo uma chamada do protocolo do meta objeto enquanto compila, e pode até fazer um hook se quiser.

Portanto, você ainda tem toda a flexibilidade, mas nós a escondemos sob um nível de declaração. Assim, há um mapeamento mais natural entre o que as pessoas pensam e o que a sintaxe se parece.
 
Nesse nível, é uma linguagem mais complicada, sintaticamente, mas em termos de conceito não é, porque exitem os mesmos conceitos.

Então, o estado da arte da programação em Perl 5 tem um conjunto de conceitos que se encontram muito bem no Perl 6, mas na nova versão eles estão mais bem elaborados, como em “aqui temos um padrão que você deve usar, a não ser que você realmente saiba o que está fazendo”.

Qual a importância de Perl hoje, e como você espera que a linguagem esteja no futuro?

Bom, é claro que eu quero que Perl domine o mundo! Eu adoraria ver Perl 6 se tornar poderoso o suficiente de forma que o Google algum dia dissesse “ah, nós não precisamos mais de Python ou algo assim”. Mas é claro que isso é um objetivo a longo prazo. E provavelmente nunca chegaremos lá, mas, ainda assim, é bom ter objetivos impossíveis contanto você entenda que eles são impossíveis. Eu quero continuar trabalhando neles de qualquer forma. Mesmo que você saiba que o que está fazendo irá, de alguma forma, falhar, você deve fazer tudo o que puder para isso. O mundo está cheio de coisas uteis que tiveram grandes falhas e eu acho que Perl 6 vai ser muito útil!
 
Mas estamos realmente pensando no longo prazo. Desde que começamos, pensamos em fazer parte do progresso no início. Mas o Perl 5 estava reconhecidamente estável e tinha muito apoio da comunidade, o que nos permitiu gastar um bom tempo no redesenho.

 Como é o relacionamento da comunidade de desenvolvedores brasileiros com Perl?

Os brasileiros são envolvidos com Perl há bastante tempo. Temos muita gente contribuindo com Perl 5 e 6 no Brasil. E os brasileiros têm a grande vantagem do fuso horário: vocês estão entre EUA e Europa, o que facilita muito o trabalho!

Texto de minha autoria, publicado no portal iMasters: http://imasters.com.br/linguagens/perl/entrevista-larry-wall/

quinta-feira, 3 de abril de 2014

Copy, um ótimo substituto para o UbuntuOne: igual ao Dropbox, só que melhor

Dropbox, o pioneiro


Quase todo mundo já deve ter ouvido falar do Dropbox, o programa que sincroniza facilmente os seus arquivos entre múltiplos dispositivos e com a nuvem. Se você não ouviu, deveria, pois ele facilita muito o trabalho em grupo e o compartilhamento de arquivos com conhecidos.

Da próxima vez que precisar enviar aquele vídeo de 78Mb para o seu amigo, pense duas vezes antes de anexar o arquivo por email. Enviar pelo Facebook pode ser uma alternativa melhor, mas também está longe do ideal.

Enfim, programas como o Dropbox são utilizados por milhões de pessoas diariamente e fica difícil até mesmo pensar em como vivemos tanto tempo sem isso: facilidade para acessar seus arquivos via web ou de ter a última versão do documento magicamente disponível em todos os seus dispositivos, sejam eles laptops, desktops, smartphones ou tablets.

Contudo, parece que todo mundo quer ter um programa deste tipo: Google Drive, Microsoft OneDrive, SugarSync, Box.com e alternativas livres como o ownCloud e o SparkleShare surgiram para fazer frente à liderança do Dropbox. Até mesmo a brasileira Locaweb possui um serviço semelhante, o GoDrive.


UbuntuOne, meu favorito (até agora)


Contudo, um dos serviços que eu mais gostava será extinto em breve. Trata-se do UbuntuOne. Os motivos para isso eram simples:
  • assim como o Dropbox, ele tem clientes para múltiplas plataformas incluindo Windows, Android, iOS, Mac OS e obviamente, GNU/Linux.
  • ele tem a vantagem de fazer streaming das suas músicas salvas no serviço.
  • as músicas compradas na loja do Ubuntu One Music Store eram salvas no seu Ubuntu One, ficando assim automaticamente disponíveis sem que isso fosse descontado do seu espaço de armazenamento
  • o cliente tem o código fonte aberto.
Mas além de tudo isso, o que eu mais gostava nele era a possibilidade de escolher quais seriam as pastas do sistema seriam sincronizadas, sem que todas elas estivessem que estar dentro de uma pasta específica, como acontece com o Dropbox.

Contudo, foi anunciado recentemente que o serviço UbuntuOne será descontinuado. As justificativas são de que o mercado se tornou muito competitivo para esse tipo de produto e que para continuar no jogo, a Canonical teria que fazer investimentos pesados na área, coisa que eles parecem não estar dispostos a fazer neste momento.

A notícia boa disso tudo é que eles anunciaram que vão liberar o código fonte do programa. Uma vez que o cliente já é aberto, isso só pode se tratar do server-side, o que seria bastante interessante.


Copy, a alternativa peso-pesado

Logo do Copy
Por coincidência, soube recentemente de um serviço que tem tudo que o Dropbox tem, com uma vantagem muito importante: mais espaço gratuito. Trata-se do Copy da fabricante de discos rígidos Barracuda. Com ele, além do acesso web e de aplicativos para as diversas plataformas, você já começa com 15Gb logo de cara e recebe mais 5Gb por recomendação. É três vezes mais do que oferece o Dropbox e no caso de indicações, 10 vezes mais.

Não é a toa que eu passei a usá-lo e estou bastante contente. Vendo essas e outras características, não é a toa que a Canonical decidiu parar de competir nesse mercado.

Se você ficou curioso e resolver dar uma chance ao programa, utilize esse link https://copy.com?r=lLJ26T e ganhe os 5Gb extras após instalar o programa, de forma a começar já com 20Gb. Depois, não se esqueça de deixar um comentário aqui e dizer o que achou da experiência.

Editado 09/04/2014: algo que eu havia deixado de fora e que considero importante, é dizer que o Copy também roda no Raspberry Pi, algo que eu sempre quis que o Dropbox fizesse.

domingo, 30 de março de 2014

Alfabetização digital: desafios e perspectivas para um mundo em transformação

Eben Upton, Rob Mullins, Jack Lang e Alan Mycroft, pesquisadores do Laboratório de Computação da Universidade de Cambridge, no Reino Unido, estavam preocupados com o declínio que presenciavam ano a ano no número e na qualidade das habilidades computacionais dos alunos que ingressavam para o primeiro ano do curso de Ciência da Computação. Desde os anos 90, quando a maioria dos ingressantes já chegava sabendo programação por hobby, o cenário a partir dos anos 2000 começou a ficar bem diferente, com o calouro típico tendo apenas alguma experiência em web design.

Para eles, alguma coisa havia mudado a forma como as crianças interagiam com os computadores. Alguns problemas foram identificados: a propagação de lições sobre como usar Word, Excel e a criação de páginas web nos currículos das aulas de informática do ensino básico, o fim da bolha ponto-com, a ascensão dos computadores pessoais e dos consoles de videogame que substituíram as máquinas Amigas, BBC Micros, Spectrum ZX e Commodore 64, nas quais a geração anterior havia aprendido a programar.

Com o diagnóstico feito, havia pouca coisa que esse pequeno grupo de pesquisadores pudesse fazer para resolver o problema de um currículo inadequado nas escolas ou do fim da bolha financeira. Mas eles acharam que poderiam agir em relação ao fato de os computadores terem se tornado tão caros e obscuros, a ponto de os pais chegarem a proibir “experiências” com programação neles. Tentaram então encontrar uma plataforma que, da mesma forma como faziam aqueles computadores antigos, permitisse um ambiente de programação para experimentações com linguagens de programação e que os jovens se divertissem ao mesmo tempo?



Casos e projeto

Talvez você nunca tenha ouvido a história acima, mas muito provavelmente já ouviu falar do resultado prático que toda essa experiência resultou: trata-se das motivações por trás do Raspberry Pi, o computador de 35 dólares que anda revolucionando o mundo.

Agora, caso você ainda não tenha ideia do que é o Raspberry Pi, então isso só vem confirmar aquilo que eu vou dizer a seguir: estamos perdendo a oportunidade de educar nossas crianças e de estar entre os países que liderarão a próxima geração mundial.

Lá fora, há uma infinidade de projetos destinados a facilitar os primeiros passos dos jovens no universo mágico da programação, universo este onde seres humanos são capazes de “dobrar” os computadores, essas máquinas capazes de feitos maravilhosos, ao sabor de sua própria vontade.

O Media Lab do MIT (Massachusetts Institute of Technology), um dos departamentos de pesquisa mais respeitados de uma das instituições mais reconhecidas da área, já dedicou alguns projetos nesse sentido. É de lá que se originou uma das tentativas mais audaciosas no sentido de levar o conhecimento tecnológico às crianças, principalmente àquelas do terceiro mundo, que possuem proporcionalmente menos acesso à tecnologia do que as que se encontram em países desenvolvidos: o OLPC (ou One Laptop Per Child) teve início em 2005 com o objetivo de criar um laptop de 100 dólares, e crianças sem acesso algum a computadores poderiam ter o seu primeiro contato com a tecnologia.

É de lá também que veio o Scratch, linguagem de programação especialmente desenvolvida para crianças, mas, que ao contrário do Logo e de outras linguagens que a antecederam, tornou fácil a compreensão da lógica computacional e de outros fundamentos essenciais de programação sem que os pequenos tenham que se preocupar com detalhes tão comuns em outras linguagens como o uso de chaves, colchetes e pontos e vírgulas.

Computadores nas escolas e universidades

A introdução dos computadores como ferramentas de auxílio ao ensino se deu nas escolas públicas dos EUA ainda em meados dos anos 70, ganhando maior força na década seguinte. Aqui, o ensino de computação nos currículos escolares ainda engatinha e, quando já existe, reproduz a mesma lógica do aprendizado de Word, Excel e jogos (quando muito, jogos educacionais), coisas que as crianças de hoje aprendem sozinhas em casa.

Artigo fac-símile de jornal americano de janeiro de 197, relatando o uso de computadores como ferramentas de ensino em escolas públicas. Veja em http://bit.ly/1ipVRMj
 Se antigamente o computador era encarado como uma simples ferramenta de auxílio à aprendizagem, hoje já é possível ver valor no ensino da própria ferramenta computacional em si, através da introdução de alguma linguagem de programação, permitindo uma melhor compreensão do funcionamento da máquina e o exercício do gosto pela resolução de problemas.

Uma simples busca por livros sobre o tema em lojas online estrangeiras e brasileiras ou por artigos acadêmicos evidencia o enorme abismo que está se abrindo entre os países que estão adaptando seus sistemas educacionais para acompanhar as recentes mudanças ocasionadas pelo advento das tecnologias digitais e aqueles que ainda carregam o fardo de erros anteriores, como parece ser o nosso caso. Lá fora, é fácil ver a proliferação de livros sobre programação para crianças ou mesmo de teses que abordam a importância e as metodologias para a introdução do ensino de programação para os mais jovens.

Por outro lado, a situação do ensino superior de tecnologia no Brasil não é muito diferente e reflete a falta de discussão acerca do tema. De um lado, temos o ensino superior privado meramente mercantilista e que tem como objetivo final a inclusão do aluno no mercado de trabalho. Dessa forma, essas instituições adotam de maneira “cega” as soluções empurradas pelas grandes empresas do setor, na esperança de que isso ofereça a seus alunos alguma vantagem competitiva quando formados.

No entanto, apesar da inserção profissional ser um objetivo louvável, ela deveria ter como foco a capacitação das novas gerações para conseguirem criar as novas tecnologias, impulsionando o desenvolvimento tecnológico do próprio país como um todo, e não pela nossa eficiência em nos tornarmos excelentes consumidores de uma tecnologia que não entendemos e que nos é fornecida.

Já nas universidades públicas o problema é outro: currículos obsoletos, instalações e laboratórios inadequados e professores desatualizados são a fórmula para alunos desestimulados, o que resulta em uma elevada taxa de evasão nos cursos de tecnologia, desperdiçando o dinheiro público que foi investido na formação desses alunos até o momento em que eles abandonam o curso.

O problema se agrava com o acesso às plataformas de ensino à distância de grandes universidades dos países desenvolvidos, como Coursera, EdX e Udacity, que permitem antever o quanto estamos longe do ideal. Essas instituições utilizam o enorme volume de dados gerado pelos milhares de estudantes que acessam o conteúdo online para aprimorar ainda mais suas técnicas e metodologias de aprendizagem. Da forma tradicional, através do ensino presencial, seriam necessárias décadas de alunos formados para se obter a mesma quantidade de dados.

Problemas e caminhos para o Brasil

O resultado de tudo isso no Brasil é que falta mão de obra no mercado. Aliás, o que gera ainda mais preocupação ao nos depararmos com esse panorama é que os desafios e as dificuldades estão se acumulando; precisamos dar conta das expectativas de inclusão digital e ensino de programação nas escolas, ao mesmo tempo em que não resolvemos por completo os erros do passado. Estamos, hoje, tentando incluir os computadores no ensino ao mesmo tempo em que poucas são as escolas que possuem uma biblioteca, por exemplo.

Sem falar na questão da língua inglesa. Ainda hoje o ensino do idioma é bastante deficiente nas escolas brasileiras, o que se torna um grande entrave para uma maior inserção do país nas comunidades, fóruns e comissões mundiais de padronização tecnológica.

Nesse contexto, debates ultrapassados, que já foram superados há muitos anos em outros países, como o medo de que os professores sejam substituídos por computadores, ainda ecoa nos corredores dos círculos educacionais brasileiros pelos simples fato de que não ultrapassamos totalmente as barreiras da etapa inicial de inclusão dos computadores no cotidiano dos ambientes educacionais. Falta uma política pública para o tema, e os poucos exemplos que podemos contabilizar constituem-se de iniciativas isoladas, cujo impacto é bastante localizado.

A situação passa a ser mais alarmante quando comparamos a evolução que outros países dos BRICs – Rússia, China e Índia, alcançaram nos últimos 20 anos. Mesmo na América Latina, parece que estamos atrás de nações como Chile, México e até mesmo a Argentina.

Não há fórmula mágica para solucionar os problemas aqui expostos, mas parece ser urgente e necessário que os setores organizados da sociedade passem a se preocupar com questões desse tipo, incorporando a discussão do tema ao seu cotidiano e exercendo pressão sobre os meios políticos para que, a partir de uma ação efetiva, políticas públicas bem definidas sejam aplicadas ao setor. Só assim poderemos ter alguma chance de evitar que o inevitável aconteça e nos tornemos obsoletos, como 386s em um mundo Quad-core.

_________________________

Programação para crianças de todas as idades

Programas Open Source

  • KidsRuby: aprenda a programar usando Ruby;
  • Scratch: Ferramenta desenvolvida para a criação de pequenas animações e jogos a partir de programação;
  • Etoys: ambiente de programação visual e multimídia baseado no Squeak.

Aprenda a fazer páginas na web

Tutoriais online

  • Hackety Hack: ambiente gratuito com o objetivo de tornar fácil o ensino de Ruby a iniciantes;
  • Codecademy: lições práticas de Python, Ruby, HTML, CSS e APIs.

Faça robôs e apenda um pouco de eletrônica

  • Arduino: para qualquer um interessado em criar de objetos à ambientes interativos.
Artigo publicado no portal iMasters: http://imasters.com.br/gerencia-de-ti/tendencias/alfabetizacao-digital-desafios-e-perspectivas-para-um-mundo-em-transformacao/

Comente clicando!