Pirataria Vs Software Livre

Posted in Computação, Pessoal, Software Livre on February 2nd, 2010 by fotanus

Visto de fora, o movimento do software livre muitas vezes é diretamente ligado a pirataria. Isso não é verdade. Se você está lendo esse blog, não deve ser nenhuma novidade. O que eu quero discutir aqui é como a pirataria influencia o desenvolvimento do software livre.

Vamos começar com um exemplo. Há pouco tempo o hacker geohot encontrou meios de ter controle total sobre o playstation 3, como pudemos acompanhar no seu blog. Jogos atualmente são programas extremamente complexos, envolvendo várias áreas de conhecimento, como arte, programação e física, só para citar algumas. Temos algum esforço de desenvolvedores produzindo jogos livres, porém é indiscutível que, quando o assunto é jogos, o mercado privado é muito superior. Essa superioridade se deve aos jogos piratas.

Programadores só tem interesse em desenvolver software livre que serão usados. Não há sentido em escrever código que nunca vai ser rodado ou lido. O público, por sua vez, sempre tenta rodar os melhores jogos possíveis, porém, grande parte deles não tem interesse em pagar para isso. Nesse ponto, existem duas alternativas: Jogos piratas ou jogos grátis. Eles acabam escolhendo pela qualidade; Jogos piratas desenvolvidos por grandes empresas são muito superiores em vários aspectos aos grátis (o que inclui os livres). Desse modo, poucos optam por utilizar os jogos livres, e como há poucos usuários, há pouco interesse no desenvolvimento desses jogos. Isso fecha o nosso ciclo de dependências do exemplo.

Como consequência direta disso, temos poucos esforços para desenvolver jogos livres. Um meio de quebrar esse ciclo seria impedindo a pirataria de software; Assim, teríamos menos opções para os usuários não dispostos a investir em jogos, então mais usuários utilizariam jogos livres, e consequentemente, mais desenvolvimento seria direcionado para eles. Seguindo essa lógica, um novo ciclo seria formado: O aumento do numero de usuários de jogos livres geraria um crescimento no número de desenvolvedores, que por vez elevaria a qualidade dos jogos, e que novamente aumentaria o número de jogadores. Após algum tempo, jogos livres estariam sendo escritos com tanta qualidade (se não mais) do que os jogos das grandes empresas de software. Essas empresas, por sua vez, precisariam de bastante criatividade e esforços para manter o seu público, o que conseguiriam, pois trata-se de uma indústria altamente criativa e inovadora.

Esse exemplo dos jogos pode ser generalizado para muitos outros softwares. É só uma questão de explorar o software livre para que ele seja cada vez mais útil.

Tags:

Porque usar vim

Posted in Computação, Desenvolvimento, Software Livre on October 2nd, 2009 by fotanus

Existem muitos editores de código por aí. Muitos mesmo. Vim, no entanto, é um editor diferente. Muitas pessoas acham loucura usar vim para programar, assim como eu mesmo, no passado. Quem raios quer fazer as coisas diferentes do jeito que já se está acostumado a fazer? Outra pergunta: Será que vale a pena aprender coisas muito diferentes do que já se está acostumado? Essa segunda pergunta é decorrente da primeira, e talvez (provavelmente) você tenha se contradito ao responde-las mentalmente.

O fato é que vim é muito diferente dos editores de um editor de código padrão. E essa diferença faz com que muito do que tu saibas sobre outros editores de código não possa ser aproveitado. Porém, com o passar do tempo, você vai começar a achar Vim muito mais produtivo. Se você passou pela transição Windows-Linux, você sabe exatamente onde eu quero chegar. Caso não acredite nisso, peço que pense na seguinte pergunta: Porque tanta gente usa o vim para programar?

Logo do vim

Que a força esteja com você.

O primeiro contato com o vim já é traumatizante para muitos: Um editor que nem abre em uma janela, sendo chamado do terminal. Bom, como muita gente sabe, existe uma versão gráfica do vim, o gvim. Ele conta com todas as vantagens do vim, e utilizá-lo com ou sem essa interface gráfica não importa muito no fundo. Assim como também existe uma versão do vim estilo “bloco de notas”, do Windows, o evim (easy vim). Porém, utilizando essa última, você vai estar jogando fora um dos melhores programas que existem para editar código.

Se o primeiro contato já é um tanto quanto inusitado, o segundo é mais ainda: Ao tentar digitar algo, o texto não aparece na tela, e ainda pode ser ouvido alguns barulhos, como se o computador estivesse brigando com você. É exatamente essa característica que faz o vim ser tão poderoso: Você não escreve texto, você dá comandos. Como programador, você sabe que a maior parte do tempo não é dedicado a escrita propriamente do programa, e sim a edição do código já escrito. É exatamente nesse ponto que o vim facilita: Lidar com o que já existe. A produtividade alcançada utilizando o vim se dá por essa característica, juntamente com todas as vantagens que um editor de código padrão dá ao escrever um código novo.

Entre as características padrão do vim voltados a programação, temos principalmente:

  • coloração do código para facilitar o desenvolvimento em mais de 200 linguagens (e se não for o suficiente, você pode facilmente criar suas próprias) assim como de alguns erros coumuns como falta de parênteses.
  • folding, que é a capacidade de esconder trechos de código para poder visualizar o programa como um todo mais facilmente, por exemplo, transformar um “if” em apenas uma linha, e expandir esse if quando achar necessário.
  • tabs, que são utilizadas para ler mais de um arquivo com o mesmo vim aberto, exibindo os arquivos abertos em abas
  • framebuffers, que são espécies de tabs primitivas, onde basicamente você não consegue ver os arquivos que estão abertos, apenas circular entre eles.
  • identação automática, que é a capacidade do editor de identar automaticamente a próxima linha
  • Omnicomplete, que é um auto-completar extremamente versátil onde você pode montar sua lista de funções a serem completadas. Esse talvez seja o mais complexo de se explicar, mas com ajuda do programa ctags e alguns comandos, você terá as funções que quiser na lista para auto-completar, não importando se são do OpenGL, Qt, GTK, ou aquele projeto que ninguém nunca ouviu falar. Além disso, ele completa atributos e métodos de classes padrões ou das que você mesmo implementou, para a maioria das linguagens.
  • Vim com  tabs, omnicompletion, taglist plugin

    Vim com tabs, omnicompletion, taglist plugin

    Só isso? Não! Vim pode ser facilmente expandido através de plugins. Como você imagina, existem milhares deles. Alguns muito poderosos, por exemplo, os snippets do textMate são imitados pelo plugin snippetsEMU. Como é tradição dos softwares livres, ele é altamente customizável, desde coisas macro como uma coluna do lado direito com a contagem de linhas e correção gramatical, até como a procura deve se comportar ou combinações de teclas para fazer ações específicas.

    Em suma, além de ter características únicas que auxiliam na programação, vim ainda conta com muitas características (se não todas) dos editores de códigos mais utilizados. Como se não bastasse, é altamente customizável e cross-plataform. Só para deixar a vontade no ar: Digitando d, você ativa o comando delete. Se for digitado, por exemplo, dw, o comando utilizado é delete word, deletando a palavra onde o cursor se encontra. Se você quiser deletar as próximas 3 palavras, pode utilizar o comando d3w, delete 3 words. Características do modo de comando como esses comandos acima são muito difíceis de explicar em um texto que não seja diretamente um tutorial, e são exatamente deles que vem o poder do vim.

    Se você ficou interessado em aprender a usar o vim e não sabe por onde começar, abra um terminal e digite

    vimtutor

    Um tutorial de vim irá abrir no próprio vim, e você vai aprender a usá-lo utilizando ele mesmo. É uma idéia bastante interessante, e costuma ter ótimos resultados. Eu aprendi a usá-lo assim.

    Fica a promessa: Vou fazer um post no blog sobre os plugins do vim que utilizo.

    Tags: , , , ,

    Tutorial: Configurando internet via linha de comando no Linux

    Posted in Computação, Software Livre on September 20th, 2009 by fotanus

    Hoje acabei ajudando duas pessoas a configurar sua internet via linha de comando no IRC, então resolvi fazer um tutorial ensinando como fazer isso de maneira simples e genérica, para qualquer distribuição.

    Esse tutorial estamos assumindo que você tem um modem router, utilizando DHCP para atribuir os IPs. Você vai precisar rodar todos os comandos como root.

    Verificando se sua interface de rede foi reconhecida

    A primeira coisa que você deve fazer é ver se alguma interface de rede foi detectada durante o processo de boot. É muito provável que elas estejam ali, até hoje nunca vi nenhuma placa de rede que não fosse detectada e que não estivesse estragada (exceto wireless). Para fazer isso, você deve rodar o comando

    ifconfig -a

    Cada interface vai gerar um bloco de texto, como por exemplo esse:

    Saída do comando ifconfig

    Saída do comando ifconfig


    Na esquerda podemos ver os nomes das interfaces, e na direita algumas informações sobre elas. A interface lo é uma interface especial, chamada de loopback, e deve ser ignorada nesse processo. Provavelmente terá alguma outra interface de rede, que deve ser identificada como eth0 para rede com fio, ou ath0/wlan0 para wireless. Você vai querer que ela esteja ativa para poder configurá-la, então utilize o comando a seguir, substituindo o eth0 pela interface que você quer configurar.

    ifconfig eth0 up

    Tendo certificado que a sua interface de rede foi conhecida e está ativa, o próximo passo é configurá-la.

    Rede com fios e IP Dinâmico (DHCP)

    Caso você esteja usando DHCP, utilize os comandos abaixo, substituindo eth0 pela sua interface de rede

    dhcpcd eth0

    a internet deve estar funcionando agora.

    Rede com fios e IP estático

    Para utilizar IP fixo, você vai precisar de um IP, de uma máscara de subrede e de ao menos um IP de um resolvedor de nomes. Nesse caso, rode os seguintes comandos:

    ifconfig eth0 address 192.168.1.10 netmask 255.255.255.0
    echo -e “nameserver 200.175.5.139 \nnameserver 200.175.182.139″ > /etc/resolv.conf

    Note que nesse exemplo, estamos tentando configurar a interface eth0 utilizando o ip 192.168.1.10, com máscara de subrede 255.255.255.0 e dois servidores de nome, com ips 200.175.5.139 e 200.175.182.139. Você deve substituir esses campos com suas configurações. Se você não sabe quais são suas configurações, você não deveria estar usando esse método :)

    Rede Wireless

    Para se conectar em uma rede wireless, você precisa primeiramente procurar as redes que estão disponíveis para você entrar. Você pode conferir isso com o comando

    iwlist wlan0 scan | more

    saida do comando iwlist

    Saída do comando iwlist

    A saída desse comando será composta de vários blocos de informação sobre as redes disponíveis. Um exemplo de bloco pode ser visualizado abaixo:

    Nesse exemplo, podemos ver uma rede wireless. São muitas informações sobre a rede, mas básicamente precisamos do nome dela, que é o campo ESSID (no exemplo, “Middle Earth”) e o tipo de encriptação (no exemplo, WPA2).

    Depois de escolher a rede, devemos informar a placa de rede wireless qual rede ela deve tentar se conectar. Fazemos isso através do comando a seguir. Note que estou usando o exemplo anterior; você deve substituir middle earth pelo nome da rede que você escolheu.

    iwconfig wlan0 essid “Middle Earth”

    Após esse passo, devemos fazer um dos a seguir, de acordo com a encriptação da rede.

    Rede wireless sem encriptação

    Essa é a mais fácil. Caso a rede não tenha encriptação, basta pegar um IP exatamente como fazíamos com a placa de rede com fios. O comando abaixo deve deixar tudo arrumado. Lembre-se de substituir wlan0 pela sua interface de rede.

    dhcpcd wlan0

    Rede wireless com encriptação WEP

    Para se conectar na rede WEP, devemos fornecer uma senha. Podemos fornecer essa senha de dois modos: Utilizando o valor hexa-decimal dela, ou então uma string (isso é, uma “frase”). Para fornecer a senha em hexa-decimais, utiliza-se o seguinte comando:

    iwconfig wlan0 key 0123-4567-89

    Para utilizarmos uma string, utiliza-se o comando

    iwconfig wlan0 key s:minhasenhasecreta

    Independentemente do método utilizado para colocar a senha, deve-se fechar a conexão. Para isso, use o comando

    dhcpcd wlan0

    Rede wireless utilizando WPA/WPA2

    Existem algumas variações em como se conectar nesse tipo de rede; vou ensinar o método mais coumum. A primeira parte consiste em informar a senha da rede e algumas configurações, através do comando

    wpa_passphrase “Middle Earth” minhasenhasecreta > /etc/wpa.conf

    Logo em seguida, utilize o comando

    wpa_supplicant -Dwext -B -i wlan0 -c /etc/wpa.conf

    Após isso, você terá que fechar a conexão com o comando

    dhcpcd wlan0

    Note que todas esses comandos devem ser executados como super usuário. Para tornar-se superusuário, basta digitar “su” seguido da senha de super usuário, ou então, caso seu usuário seja um sudoer, “sudo -i” e sua própria senha.
    Essa parte do tutorial ficou um pouco vaga pois esse tipo de conexão é mais complexa. Se não funcionar exatamente desse jeito, recomendo a leitura das páginas do manual dos dois comandos wpa, utilizando o comando man, e tentar entender o que significa cada parâmetro, e o que pode estar dando errado com a sua rede.

    Para simplificar a utilização da rede wireless, recomendo o programa wicd, que além de ter uma versão gráfica, também utiliza uma versão em linha de comando com menus, baseada em ncurses. para utilizar ele em modo texto, use o comando wicd-curses.

    Tags: , , ,