Legacy tiagomadeira.net

Archive for the ‘Software Livre’ Category

Flick com XGL e Beryl

Tuesday, January 30th, 2007

Não sabe o que é o Flick? É o meu Acer Aspire 5050-3205. Não sabe o que é XGL e Beryl? Google it! ;)

Por sugestão do Schneider, instalei Xgl e Beryl no laptop. Demorou um pouco e tive alguns problemas emergindo tudo, mas agora estou sob KDE+Beryl+Aquamarine com a minha ATI Radeon Xpress 1100.

Constatações pra quem nunca viu isso: É bonito. Existem muitos mais recursos do que aqueles mostrados nos vídeos da internet e é difícil usar todos. O computador fica um mais devagar, mas a diferença é pouca. Você impressiona qualquer usuário Windows sem dificuldade. É complicado instalar, configurar e usar. E agora eu ainda tenho que encontrar coisas bonitas pra combinar com os efeitos loucos 3D dele.

Queria gravar um videozinho também como todos esses caras na internet fazem, mas eu acho que o VNC deixaria tudo muito lerdo. Como que os caras gravam? Usando uma câmera de verdade? Alguma sugestão?

[BL]laptop, notebook, linux, xgl, acer, radeon[/BL]

[tags]gentoo, linux, xgl, beryl, aquamarine, kde, laptop, ati[/tags]

Linux NÃO é Windows

Thursday, December 21st, 2006

Linux não está interessado em market share. Linux não tem clientes. Linux não tem acionistas, ou uma responsabilidade no rodapé. Linux não foi criado para fazer dinheiro. Linux não tem a meta de ser o sistema operacional mais popular e espalhado do planeta.

O que toda a comunidade do Linux quer é criar um sistema operacional realmente bom, cheio de recursos e livre. Se isso resultar em Linux ser um sistema bem popular, então isso é ótimo. Se isso resultar em Linux ter a interface mais intuitiva e amigável já criada, então isso é ótimo. Se isso resultar em Linux se tornar a base de uma indústria multi-bilionária, então isso é ótimo.

Isso é ótimo, mas não é o ponto. O ponto é fazer do Linux o melhor sistema operacional que a comunidade é capaz de fazer. Não para outra pessoa: para si mesmo. As tão comuns ameaças de “Linux nunca vai dominar os desktops a não ser que seja de tal maneira” são simplesmente irrelevantes: a comunidade do Linux não está tentando dominar o desktop. Eles realmente não se importam se ele ficar bom o suficiente para rodar em cima do seu desktop, desde que ele continue bom o suficiente para estar nos deles. Os gritões que odeiam a Microsoft, invejosos fanáticos pró-Linux, e fornecedores de software livre que fazem isso pra ganhar dinheiro podem falar alto, mas eles ainda são minoria.

Isso é o que a comunidade do Linux quer: um sistema operacional que pode ser instalado por qualquer pessoa que realmente o queira. Então, se você está considerando migrar pro Linux, primeiro pergunte a si mesmo se é isso mesmo que você quer.

Se você quer um sistema operacional que não seja seu motorista, mas que lhe dê as chaves, coloque você no banco de motorista, e espera que você saiba o que fazer: use Linux. Você vai ter que dedicar algum tempo para aprender como usá-lo, mas depois que você tiver aprendido, você terá um sistema operacional que você pode fazer sentar e dançar.

Se você realmente só quer Windows sem malware e problemas de segurança: leia sobre boas práticas de segurança; instale um bom firewall, detector de malware e anti-vírus; troque o Internet Explorer por um navegador mais seguro; e mantenha-se atualizado com atualizações de segurança. Há pessoas por aí (eu, inclusive) que têm usado Windows desde os tempos de 3.1 até o XP sem nunca terem sido infectados com um vírus ou malware: você pode fazer isso também. Não use Linux: ele vai falhar miseravelmente em ser o que você quer que ele seja.

Se você quer a segurança e a performance de um sistema operacional baseado em Unix, mas com uma atitude focada no cliente e uma interface famosa no mundo inteiro: compre um Mac. OS X é ótimo. Mas não use Linux: ele não vai fazer o que você quer que ele faça.

Não se trata apenas de “Por que eu deveria querer Linux?”. Se trata também de “Por que Linux deveria me querer?”

Tradução livre feita por mim da conclusão do Linux is NOT Windows, que é licenciada e pertence a Dominic Humphries.

Muito interessante o artigo do cara. Pensei em traduzir tudo, mas não tenho tempo pra isso nesse momento. Se vocês gostarem, quem sabe em janeiro eu traduza um item de cada vez e escreva vários artigos sobre isso…

Lembram que eu perguntei por que você usa o seu sistema operacional? Não foi uma pergunta pra mandar você usar algum sistema operacional específico, porque você é livre, mas para que você use o que você achar melhor sabendo fazer essa escolha.

Eu não quero usar um sistema operacional igual o Windows XP, com aqueles recursos chatos como fazer uma ação sempre que eu pluggo qualquer coisa no computador (meu pai, que usa Windows 98, sempre reclama: esse Windows XP fica abrindo um monte de coisa sem eu pedir nada!) e onde eu não controle. Eu não quero um motorista; Eu quero dirigir! E eu uso Linux porque ele me permite muitas coisas que o Windows não permite.

Quero aproveitar o artigo para citar o excelente Falcon Dark:

Nos últimos tempos os desenvolvedores dos vários sabores de GNU/Linux decidiram que era hora de desbancar o Microsoft Windows onde ele era forte: desktops domésticos e aplicações e desktops de pequenas e médias empresas. E o desenvolvimento do GNU/Linux e seus correlatos (como interfaces gráficas, programas, drivers, aplicações) passou então a seguir os passos do próprio Windows.

Gnome e KDE apresentam interfaces com funcionamento e look & feel semelhantes ao Windows. Os programas como navegadores de web (Firefox), office (OpenOffice) desenvolvimento (Eclipse, etc.) ainda que apresentem funcionalidades que seus competidores não possuam inspiram-se nas interfaces concorrentes para tratar o usuário. Tenho a impressão que isso dê-se pela idéia de que se o Firefox parecer bastante com o Internet Explorer o usuário migrará com mais facilidade, idem para o OpenOffice que em sua versão 2 abandonou sua identidade visual anterior para buscar uma identificação maior com o Microsoft Office.

Mesmo que isso proporcione uma maior facilidade de migração, traz consigo um problema. Ao seguir os passos de alguém, você está sempre atrás. Enquanto a Apple é conhecida por inovar nas interfaces de seus produtos e usa isso como seu grande diferencial as interfaces de GNU/Linux parecem sempre ser uma adaptação do desenho da última interface adotada no Windows. Fica a impressão que junto com os acertos repetiremos também todos os erros dos outros sistemas. Ser uma alternativa ao que já está implementado significa antes de tudo ser diferente do que já está implementado. As pessoas tendem a não enxergar diferenças entre coisas que são muito similares. E acabam por concluir que é igual.

E assim vai ser com tudo que os desenvolvedores Linux esperarem sair em outro sistema antes para ter certeza que dará certo. Seja com EFI, seja com novos sistemas de arquivos, com uma nova abordagem para a organização e uso do desktop, seja com um novo método de instalar programas. Se você quiser ser reconhecido por algo diferente e inovador, você deve fazer algo diferente e inovador.

O maior ponto fraco do GNU/Linux enquanto alternativa ao Windows hoje é esse: estar mais preocupado em implementar coisas que o Windows implementa do que implementar coisas novas que a Microsoft nem tenha avaliado ainda. Há muito o que fazer nessa área. Coisas como Personal Clustering ou Desktops Remotos, são coisas que em um futuro podem ser desejáveis para muitos usuários e que o GNU/Linux não poderia esperar o Windows trazer para também decidir implementar. A inovação deve estar sempre em prineiro lugar para que o Linux possa apresentar-se com um diferencial forte ao ser considerado alternativa ao Windows. E aí me dá uma saudade da Conectiva… ;-)

Tenho certeza que o Linux não decepcionará quem estiver disposto a perder um tempo pra aprender a dirigir. E para quem precisar de ajuda sempre haverá uma grande comunidade disposta a ajudar (eu inclusive). Vamos inovar! Vamos fazer o melhor sistema operacional do mundo, pra nós! Usuários não-preguiçosos de todo mundo, uni-vos!

[tags]linux, free software, windows, microsoft, filosofia, sistema, gnu[/tags]

Diálogo entre programas

Monday, December 11th, 2006

Continuando a falar das facilidades do Linux, eu ia escrever um post para mostrar como é sensacional a conversa que os programas têm um com o outro no Linux e em outros sistemas baseados em Unix.

Quando eu estava começando, lembrei que o Elcio já escreveu um artigo muito interessante sobre isso há um mês. Então, não vou reinventar a roda. Leiam o artigo dele e vejam se é possível fazer algo parecido no Windows: Streamming e download ao mesmo tempo

Nas palavras do Elcio:

Colocamos para trabalhar juntos três programas diferentes, escritos por pessoas diferentes, e tudo funcionou. As coisas geralmente são assim no Linux, porque os programas Unix são feitos para que você possa usá-los juntos.

Como diz o Falcon, a gente não deve fazer ninguém usar Linux por ser parecido com Windows. O Linux é diferente do Windows e os usuários que vão migrar precisam saber disso e estar cientes de que vão ter que aprender um pouco. Mas é um marketing excelente mostrar as vantagens desse sistema operacional e deixar as pessoas livres para optarem.

Eu acredito na filosofia do Linux, mas, se ele fosse uma merda, eu continuaria usando Windows. Eu uso Linux, porque com ele eu trabalho muito mais rápido e faço uma série de coisas que eu não consigo fazer no Windows.

E quem usa Windows… Por que usa Windows?

[tags]linux, gnu, unix, windows, microsoft, desktop[/tags]

Windows é mais fácil?

Saturday, December 9th, 2006

Na minha opinião, a facilidade de uma ação depende da praticidade de execução da mesma (ou seja, do tempo que ela demora pra ser executada). Quando eu converso com algum leigo sobre Linux, depois de eu convencê-lo com vários argumentos que o Linux não só tem muito mais recursos como ainda tem uma filosofia muito mais bonita, ele sempre diz: “Mas Linux é muito difícil!”

Eu não acho que Linux seja difícil, eu acho que é diferente do que elas estão acostumadas. E as pessoas precisam ter mais disposição pra testar e aprender o novo! É claro que no início elas vão ter dificuldade, mas o Linux não é nenhum bicho de sete cabeças!

Porém, o foco desse pequeno post não é questionar a dificuldade por esse aspecto, mas questionar a praticidade de uso dos dois sistemas.

Vou propôr um problema básico: baixei 500 fotos de uma viagem (com uma qualidade foda, tipo 2048×1536) para o meu computador. Elas estão muito grandes e quero diminuí-las para publicá-las no meu site. As imagens para a web não precisam ser muito grandes e nem ter uma qualidade muito alta. Eu não quero que elas tenham aquele nome feio DSC_….JPG que elas têm e quero que os arquivos tenham nomes em minúsculas do tipo viagem-N.jpg. Isso não é nenhuma realidade distante, é algo que eu sempre preciso fazer…

No meu Linux (com Funções ZZ e ImageMagick), eu simplesmente escreveria:

$ zzarrumanome *
$ zznomefoto -p viagem- *.jpg
$ mkdir fotosnovas
$ for i in *.jpg; do
> convert -geometry 640 -quality 75 $i fotosnovas/$i
> done

Como fazer isso no Windows? Se alguém conhece uma maneira, me ensine nos comentários. Eu gostaria muito de saber pra ensinar aos meus amigos que sempre precisam disso! :-)

[update] E vejam o que o MeioBit acabou de postar… eu ainda acho a minha maneira muito mais fácil! [/update]

[tags]windows, linux, unix, bash, imagemagick, zz, slackware, microsoft, gnu[/tags]

udev e suas regras maravilhosas

Tuesday, September 12th, 2006

Participei nos dias 8 e 9 do IV Encontro Nacional Linuxchix Brasil em Florianópolis. O evento teve umas palestras interessantes, entre as quais destaco as do pessoal do FreeBSD, a do Luiz Fernando Capitulino sobre o desenvolvimento do Kernel, a do Hélio Castro sobre interfaces gráficas 3D, mas em especial a do Piter PUNK sobre o udev (talvez porque eu sou um usuário Slackware =). E é sobre o udev que eu resolvi falar nesse artigo…


Tenho até vergonha de dizer que até semana passada eu não tinha percebido que o hotplug não estava mais sendo inicializado no meu Slackware… Só depois da palestra que aprendi que o Kernel 2.6 acaba com a necessidade do hotplug substituindo por um novo e poderoso aplicativo chamado udev. Isso é uma mudança e tanto, que traz alguns prós e contras (na verdade, eu só vi prós).

O que é o udev?

Bom… Segundo a Wikipedia, udev is the device manager for the Linux 2.6 kernel series. Its primary function is managing device nodes in /dev. It is the successor of devfs and hotplug, which means that it handles the /dev directory and all user space actions when adding/removing devices, including firmware load.

Como funciona o udev

Na inicialização do sistema, o udev vê no /sys que dispositivos foram encontrados pelo Kernel e adiciona os dispositivos ao /dev (por enquanto, vou fingir que ele só adiciona os dispositivos ao /dev).

Depois, seu daemon fica rodando para adicionar novos dispositivos assim que eles aparecerem.

É bem mais rápido que no hotplug e parece funcionar bem.

E onde está a mágica?

O udev possue um diretório de regras (/etc/udev/rules.d) onde adicionamos arquivos de texto com uma sintaxe super fácil para dizer o que queremos fazer com cada dispositivo que é adicionado ao sistema.

E o que queremos fazer com cada dispositivo que é adicionado ao sistema?

Hmmm… Isso depende muito da sua necessidade, mas deixe-me citar algumas possibilidades das regras do udev:

  • Dar nome aos dispositivos – Pra que uma pasta /dev cheia de nomes difíceis que você não entende? Com o udev, você pode chamar seu sda1 de pendrive ou o seu hdc de cdrom.
  • Dar nomes diferentes para dispositivos iguais – Hoje em dia vivemos pluggando pendrives, máquinas digitais, MP3 players, etc. em nossas placas USB. Com o udev, podemos fazer com que a nossa máquina da Canon chame-se /dev/canon, a nossa máquina da Sony chame-se /dev/sony, o pendrive da mamãe chame-se /dev/mamae e o nosso MP3 Player chame-se /dev/mp3player.
  • Adicionar links simbólicos aos dispositivos – Podemos fazer nosso CD-ROM ter vários links como cdrom, dvd, cdrw, cdwriter
  • Mudar permissões dos dispositivos – Podemos fazer com que o pendrive da mamãe possa, logo que for pluggado em qualquer porta USB, ser acessado por ela (e somente por ela).
  • Executar comandos quando ocorrem alterações nos dispositivos – Sempre que a mamãe colocar o seu pendrive numa porta USB podemos montá-lo para ela e já abrir o dispositivo no Konqueror e quando ela pluggar a sua máquina digital da Canon podemos mudar suas permissões, linká-la para /dev/camera e abrir o digiKam.
  • … entre provavelmente muitas outras coisas que eu não me lembro ou não sei fazer (eu só conheço o udev há quatro dias!)

Claro que o udev pode ser útil para servidores também, para trocar hardware ou reiniciar o computador com segurança (ex.: você pode dizer que o HD principal seja sempre /dev/principal e assim mesmo que ele passe a ser o seu Second Slave ele funciona), mas estou focando mais o uso doméstico. A “mamãe” é um usuário leigo que não precisa saber montar dispositivos ou qual o nome do programa que baixa as fotos da máquina. Ela simplesmente plugga a sua máquina e o digiKam abre.

Legal… E como é que eu faço essas regras?

A sintaxe dos arquivos em /etc/udev/rules.d é muito simples. Você simplesmente separa por vírgulas as condições que você quer para que as ações que você quer fazer e as ações.

A máquina fotográfica da mamãe

ACTION=="add", BUS=="usb", SYSFS{product}=="Canon Digital Camera", \
GROUP="camera", MODE="0660", SYMLINK+="camera", RUN:="/bin/su mamae -c \
'/usr/bin/abredigikam.sh'"

Aqui em casa, usei um “abredigikam.sh” assim:

#!/bin/bash

export DISPLAY=":0"
/opt/kde/bin/digikam

Sinais do exemplo
  • Os dois iguais (==) são para expressar condição, como no C (e em um monte de linguagens derivadas dele).
  • O “=” atribui
  • O “+=” atribui “mais uma coisa” (append)
  • O “:=” atribui uma coisa como constante (ou seja, neste caso eu ou os scripts de regras da minha distro não conseguem mais mudar o valor do “RUN”).
Variáveis do exemplo
  • ACTION: A ação que está sendo feita com o dispositivo (neste caso é a adição dele – add)
  • BUS: Barramento. Neste caso, a USB.
  • SYSFS: Variáveis específicas deste dispositivo (depois vou mostrar como encontramos elas)
  • GROUP: Grupo em que o dispositivo está.
  • MODE: Permissões do dispositivo.
  • SYMLINK: Links simbólicos para o dispositivo.
  • RUN: Comando Shell para executar.

Não conheço todas as variáveis, mas para saber mais você pode consultar o Writing udev rules (o objetivo desse post não é entrar em detalhes).

udevmonitor

O udevmonitor é um aplicativo que imprime os eventos recebidos pelo Kernel e o evento que o udev manda depois do proessamento de regras em tempo real. Veja o que acontece, por exemplo, quando pluggo uma máquina digital na minha porta USB:

UEVENT[1158086870.385094] add@/devices/pci0000:00/0000:00:02.0/usb1/1-1
UEVENT[1158086870.388950] add@/devices/pci0000:00/0000:00:02.0/usb1/1-1/1-1:1.0
UEVENT[1158086870.389571] add@/class/usb_device/usbdev1.3
UDEV  [1158086870.390983] add@/devices/pci0000:00/0000:00:02.0/usb1/1-1
UDEV  [1158086870.404378] add@/devices/pci0000:00/0000:00:02.0/usb1/1-1/1-1:1.0

É interessante para acompanharmos os dispositivos que são encontrados pelo udev. Veja agora o udevmonitor quando eu despluggo a minha máquina:

UEVENT[1158089965.438657] remove@/devices/pci0000:00/0000:00:02.0/usb1/1-1/1-1:1.0
UEVENT[1158089965.438765] remove@/class/usb_device/usbdev1.3
UEVENT[1158089965.438794] remove@/devices/pci0000:00/0000:00:02.0/usb1/1-1
UDEV  [1158089965.440899] remove@/devices/pci0000:00/0000:00:02.0/usb1/1-1/1-1:1.0
UDEV  [1158089965.443341] remove@/class/usb_device/usbdev1.3
UDEV  [1158089965.444795] remove@/devices/pci0000:00/0000:00:02.0/usb1/1-1

udevinfo

O udevinfo imprime informações sobre um dispositivo. Para descobrir que o SYSFS{product} da minha máquina era Canon Digital Camera foi este comando que eu utilizei, da seguinte maneira:

# udevinfo -q all -n usbdev1.4
P: /class/usb_device/usbdev1.4
N: usbdev1.4
S: bus/usb/1/4

(descobri que ela estava na usbdev1.4 usando o udevmonitor)

Aí agora sabendo o path eu descobri todo o resto: (a saída é grande, use a barra de rolagem)

# udevinfo -a -p /class/usb_device/usbdev1.4
Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/class/usb_device/usbdev1.4':
    KERNEL=="usbdev1.4"
    SUBSYSTEM=="usb_device"
    DRIVER==""
    SYSFS{dev}=="189:3"

  looking at parent device '/devices/pci0000:00/0000:00:02.0/usb1/1-1':
    ID=="1-1"
    BUS=="usb"
    DRIVER=="usb"
    SYSFS{configuration}==""
    SYSFS{product}=="Canon Digital Camera"
    SYSFS{manufacturer}=="Canon Inc."
    SYSFS{maxchild}=="0"
    SYSFS{version}==" 1.10"
    SYSFS{devnum}=="4"
    SYSFS{speed}=="12"
    SYSFS{bMaxPacketSize0}=="8"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bDeviceProtocol}=="00"
    SYSFS{bDeviceSubClass}=="00"
    SYSFS{bDeviceClass}=="00"
    SYSFS{bcdDevice}=="0001"
    SYSFS{idProduct}=="30f9"
    SYSFS{idVendor}=="04a9"
    SYSFS{bMaxPower}=="  2mA"
    SYSFS{bmAttributes}=="c0"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bNumInterfaces}==" 1"

  looking at parent device '/devices/pci0000:00/0000:00:02.0/usb1':
    ID=="usb1"
    BUS=="usb"
    DRIVER=="usb"
    SYSFS{configuration}==""
    SYSFS{serial}=="0000:00:02.0"
    SYSFS{product}=="OHCI Host Controller"
    SYSFS{manufacturer}=="Linux 2.6.17.11 ohci_hcd"
    SYSFS{maxchild}=="4"
    SYSFS{version}==" 1.10"
    SYSFS{devnum}=="1"
    SYSFS{speed}=="12"
    SYSFS{bMaxPacketSize0}=="64"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bDeviceProtocol}=="00"
    SYSFS{bDeviceSubClass}=="00"
    SYSFS{bDeviceClass}=="09"
    SYSFS{bcdDevice}=="0206"
    SYSFS{idProduct}=="0000"
    SYSFS{idVendor}=="0000"
    SYSFS{bMaxPower}=="  0mA"
    SYSFS{bmAttributes}=="e0"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bNumInterfaces}==" 1"

  looking at parent device '/devices/pci0000:00/0000:00:02.0':
    ID=="0000:00:02.0"
    BUS=="pci"
    DRIVER=="ohci_hcd"
    SYSFS{modalias}=="pci:v000010B9d00005237sv0000103Csd00000024bc0Csc03i10"
    SYSFS{local_cpus}=="1"
    SYSFS{irq}=="10"
    SYSFS{class}=="0x0c0310"
    SYSFS{subsystem_device}=="0x0024"
    SYSFS{subsystem_vendor}=="0x103c"
    SYSFS{device}=="0x5237"
    SYSFS{vendor}=="0x10b9"

  looking at parent device '/devices/pci0000:00':
    ID=="pci0000:00"
    BUS==""
    DRIVER==""

Os contras

Hmmm… Na verdade, pelo que eu me lembro da palestra, o udev só tem um contra. Ele vai detectando os dispositivos e jogando-os no /dev na ordem em que ele vai encontrando-os. Então, às vezes a minha placa de rede SiS pode ser detectada como eth0 e a Realtek como eth1 e no outro dia o contrário. Mas contornar isso é muito simples, usando aquelas regras (e inclusive podemos dar os nomes /dev/placa-sis e /dev/placa-realtek para nossas placas). =)

Encontrou um erro?

Eu ainda tô conhecendo o udev (como eu disse, conheci ele nesse final de semana), então meu texto pode ter alguma falha ou pode estar faltando alguma informação. Por favor, comente se encontrar algum erro ou quiser sugerir algo legal… =)

Para mais informações…

$ man udev

… e a página do udev

[tags]udev, hotplug, kernel, linux, devfs, dev, free software, software livre[/tags]