C: Programar é uma arte

Posted in Computação, Desenvolvimento on September 28th, 2009 by fotanus

C é uma linguagem de programação de baixo nível. Por essa natureza, ela te dá muito mais liberdade ao codificar, e não lhe dá tantos recursos padrões como outras linguagens, remetendo muitas vezes a pensamentos na linha “uma linguagem para programadores iniciantes”, “uma linguagem que não permite a construção de um bom projeto” ou ainda “uma linguagem que não possui recursos”. Ela já foi até mesmo considerada uma linguagem de programação amadora no nosso passado, onde no topo das linguagens de programação estava o glorioso FORTRAN. Esses pensamentos são os mais errados que se pode ter sobre C.

Por ser uma linguagem que te dá mais liberdade para codificar, ela não serve para programadores iniciantes; A liberdade que C provém ao programador deve ser usada com o maior cuidado possível. Escrever um código legível em Java é o básico, agora escrever um código legível em C muitas vezes é uma arte. É exatamente essa arte que um programador precisa dominar em C para ter um código de qualidade, e esse talento só se dá programando. E não programando somente em C, mas programando em muitas linguagens. Quanto mais diferentes essas linguagens, melhor. Ninguém quer ler um código escrito em C por um programador amador; ele é horrível e obscuro. Logicamente, quando se tem um projeto para ser escrito nessa linguagem, se procura os melhores programadores disponíveis.

Nessa parte, geralmente surge as brilhantes perguntas “Mas outras linguagens não requerem tanto dos programadores. Por que programar em C?”. A resposta a essa pergunta é um tanto óbvia. Pense na linguagem que você acha que seria melhor de ser usada do que C, e reponda a segunte pergunta: “Em que linguagem foi implementado o interpretador/compilador da linguagem que pensei?”. Obviamente, para várias tarefas, uma linguagem de maior nível de abstração é preferida, mas nem para todas as tarefas podemos nos dar ao luxo de programar em linguagens de alto nível; e é para essas tarefas, menos numerosas na vida real, que mais precisamos nos preocupar com a qualidade do código – e consequentemente, a qualidade do programador.

O mais intrigante na minha opinião é a afirmação que C não permite desenvolver bons projetos, modulados e concisos. Pois, C é uma linguagem de baixo nível. Tudo o que tu pode fazer nas outras, tu também pode fazer em C (ou emular o comportamento delas). O fato é que a produtividade de realizar um projeto em C é realmente muito menor do que realizar em outra linguagem, pois várias vezes tu tem que implementar coisas que já existem de uma forma ou de outra. Porém, com isso tu ganha performance, o que pode ser crucial dependendo da aplicação. Se desenvolver um código legível em C já é uma arte, para fazer um projeto modulado e bonito, então, nem se fala. É exatamente essa arte que faz brilhar os olhos de muito programador bom. Você ainda pode pensar “Programa bem modulado em C não existe”. Pense de novo.

O mais facilmente refutável é exatamente o pensamento “C não tem muitos recursos”. Por ser uma linguagem antiga, considerada padrão para baixos níveis, em projetos que envolvam baixo nível você pode (e vai) encontrar *muita* coisa pronta em C. Algumas com a possibilidade de fechar o código (projetos que usam licença BSD e MIT, por exemplo), e muitas outras licenciadas para open source.

Alguns livros indicados para quem gostaria de aprender/se aprofundar em linguagem C podem ser encontrados aqui. Tirei esse link do canal de irc #C, no servidor freenode, que por sinal, é muito bom :)

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: , , ,

Hello World

Posted in Pessoal on September 16th, 2009 by fotanus

Desde momento em diante, por divina providência, eu declaro inaugurado esse blog! :)