blog do Zé

 
 

7 de October, 2008

Vida inteligente na blogosfera

Filed under: Blah, hmmm, etc, Dicas para Webmasters, Linux, Noticias de Tecnologia — jfonseca @ 4:42 pm

Hoje eu tive 2 boas surpresas passeando pela blogosfera. Dois novos blogs que eu nunca pensei que fossem existir, devido à completa falta pretenção de seus autores. Um dos autores eu só conheço pelos livros, e pelos comentários no código fonte do melhor sistema operacional do mundo. O outro é de um amigo e expert em comunicação online que finalmente decidiu acrescentar um blog à sua presença na WWW.

Linus Torvalds, criador do Linux e pesquisador da Linux Foundation criou um blog de “fotos de sua família”, no qual ainda não tem foto alguma publicada. Enquanto isso ele passa o tempo falando daquilo que mais queriamos saber dele : Linux, internet e tecnología. E, por sinal, já começa com um interessante artigo sobre os Intel SSD (”discos” rígidos em estado sólido, ou seja, discos sem discos).

Por falar nisso o sistema operacional Linux completou 17 anos de idade há 2 dias atrás. Foi com este post no grupo comp.os.minix da Usenet que tudo começou.

O jornalista Fernando Zarur lançou O Coletivo, blog onde discutirá suas especialidades : comunicação online, jornalismo, tecnologia e internet. O Coletivo deve estar na mira de quem se interessa por essa poderosa combinação de assuntos. Já entre os primeiros posts fala de um dos assuntos mais relevantes para consumidores modernos: a enchurrada de informação sobre produtos, os beneficios e prejuízos de ter tanta informação na hora de comprar algo tão simples quanto uma câmera digital. Recomendo a todos. ( Conheça também seu tabalho fotográfico)

Taí, é um bom dia pra ler um blog!

• • •
 

7 de August, 2008

Quantos fuck tem no Kernel 2.6.24 ?

Filed under: Cultura (Quase sempre)Inútil, Linux — jfonseca @ 12:00 am

Você algum dia esteve parado no trânsito pensando na vida e se perguntou quantas vezes a palavra fuck aparece no Kernel linux incluindo verbos, substantivos e variações? Decidí pesquisar o importante assunto, pois tenho certeza que você já deve ter se preocupado com isso num dia de estresse.

Bem, chegou a hora de matar a dúvida. Perguntei ao bom e velho grep quantos fuck existem no sistema operacional Linux.

[root@jimi linux-2.6.24]# grep -i fuck -r .

Após alguns minutos penteando o famoso código fonte com a expressão regular /fuck/, o grep revela que existem nada menos que 45 fucking linhas malcriadas no kernel versão 2.6.24:

(Alguns trechos mais relevantes desta pesquisa foram marcados em negrito.)


./Documentation/DocBook/kernel-locking.tmpl: If you don't see why, please stay the fuck away from my code.
./include/linux/netfilter/xt_limit.h: /* Ugly, ugly fucker. */
./include/asm-cris/arch-v32/spinlock.h: * writers) in interrupt handlers someone fucked up and we’d dead-lock
./include/asm-sparc64/system.h: /* If you fuck with this, update ret_from_syscall code too. */ \
./include/asm-m68k/sun3ints.h:/* master list of VME vectors — don’t fuck with this */
./usr/include/linux/netfilter/xt_limit.h: /* Ugly, ugly fucker. */
./sound/oss/opl3.c: * What the fuck is going on here? We leave junk in the beginning
./arch/mips/sgi-ip22/ip22-setup.c: * fucking with the memory controller because it needs to know the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t even give the
./arch/mips/pci/ops-bridge.c: * IOC3 is fucked fucked beyond believe … Don’t try to access
./arch/mips/kernel/irixioctl.c: * irixioctl.c: A fucking mess…
./arch/mips/kernel/irixelf.c:#if 0 /* XXX No fucking way dude… */
./arch/x86/kernel/cpu/mtrr/generic.c:/* Some BIOS’s are fucked and don’t set all MTRRs the same! */
./arch/x86/kernel/cpu/cpufreq/powernow-k7.c: * Some Athlon laptops have really fucked PST tables.
./arch/ppc/syslib/ppc405_pci.c: * the kernel try to remap our BAR #1 and fuck up bus
./arch/sparc64/kernel/binfmt_aout32.c: /* Fuck me plenty… */
./arch/parisc/kernel/sys_parisc.c:/* Fucking broken ABI */
./arch/sparc/kernel/sunos_ioctl.c: /* Binary compatibility is good American knowhow fuckin’ up. */
./arch/sparc/kernel/ptrace.c:/* Fuck me gently with a chainsaw… */
./arch/sparc/kernel/head.S: /* XXX Fucking Cypress… */
./arch/sparc/kernel/process.c: /* fuck me plenty */
./fs/binfmt_aout.c: /* Fuck me plenty… */
./net/netfilter/nf_queue.c: /* James M doesn’t say fuck enough. */
./net/core/skbuff.c: /* Fuck, we are miserable poor guys… */
./net/ipv4/netfilter/nf_nat_snmp_basic.c: * (And this is the fucking ‘basic’ method).
./lib/vsprintf.c: * Wirzenius wrote this portably, Torvalds fucked it up :-)
./drivers/mtd/mtd_blkdevs.c: registered, to prevent the link/init ordering from fucking
./drivers/media/video/bt819.c: BUG? Why does turning the chroma comb on fuck up color?
./drivers/scsi/qlogicpti.h:/* Am I fucking pedantic or what? */
./drivers/scsi/NCR53C9x.c: * how bad the target and/or ESP fucks things up.
./drivers/scsi/NCR53C9x.c: /* Be careful, we could really get fucked during synchronous
./drivers/net/sunhme.c:/* Only Sun can take such nice parts and fuck up the programming interface
./drivers/net/sunhme.c: /* This card is _fucking_ hot… */
./drivers/watchdog/shwdt.c: * brain-damage, it’s managed to fuck things up one step further..
./drivers/ide/pci/cmd640.c: * These chips are basically fucked by design, and getting this driver

Agora se esta questão cair no seu próximo vestibular ou concurso público você não terá qualquer problema com ela.

PS. Posso adiantar que a tradução portuguesa de ’shit’ não consta no código fonte do Kernel Linux. Não testei os outros 23457 termos técnicos(e chulos) da lingua portuguesa.

PS 2. Olhem só este comentário: ./lib/vsprintf.c: * Wirzenius wrote this portably, Torvalds fucked it up :-). Viram só? Lars Wirzenius escreveu um vsprintf portável, o criador do Linux F@#$@ tudo….

• • •
 

6 de August, 2008

Como liberar o terminal Linux depois de pressionar Ctrl + s ?

Filed under: Linux — jfonseca @ 11:43 pm

Se você trabalha com um terminal SSH ou semelhante já deve ter passado por uma situação parecida : após passar horas digitando em seu editor de texto predileto em modo gráfico você passa para o terminal e tenta salvar um arquivo no Vi apertando Ctrl + s. Pronto, terminal congelado…

Calma, não é um bug no shell ou no seu terminal. Ctrl + s significa “pare de ecoar qualquer coisa no terminal”.

Ctrl + s ecoa (invisivelmente) um caractere especial de controle de fluxo que interrompe tudo o que estava sendo mostrado na tela. Foi criado para você poder interromper telas que estivessem passando rápido demais para ler. Enquanto a tela está congelada, o Ctrl + s grava tudo o que for digitado no buffer do teclado porém não executa nada.

Para liberar o terminal de novo basta pressionar Ctrl + q

Lembre-se que tudo que for digitado durante o congelamento será ecoado após liberar o terminal.

Pode parecer óbvio, mas acontece: não digite nada que possa comprometê-lo(ou a integridade de sua estação de trabalho) enquanto o terminal estiver congelado.

O usuário “A. Clay Stephenson” deste fórum explica que Ctrl + s e Ctrl + q foram criados para protocolos seriais onde o handshake via hardware não existe. Assim, Ctrl + s emite o caractere 0×13 para avisar que o terminal serial não pode mais receber caracteres, e Ctrl + q emite 0×11 liberando a linha serial para envio.

Num terminal padrão do Linux você pode verificar todos os caracteres de comando especiais utilizando o comando:

[root@jimi ~]# stty -a

Referência adicional: Orientação para usuários de UNIX da Universidade de Stanford

• • •
 

12 de July, 2008

O Vaticano roda Linux

Filed under: Linux — jfonseca @ 8:56 pm

Esta foto mostrando boot do Linux no Vaticano é uma das mais populares na Web neste momento, de acordo com o Digg.com :

Foto mostra que o Vaticano roda Linux

• • •
 

8 de July, 2008

ReiserFS desaparece lentamente após seu criador mostrar onde enterrou sua esposa

Filed under: Linux — jfonseca @ 8:48 pm

Hans Reiser assassinou sua mulher e levou oficiais ao local onde a enterrouA ARS Technica traz uma matéria sobre Hans Reiser, criador do Reiser FS. Reiser foi preso pelo assassinato de sua esposa em 2006 e foi considerado culpado em julgamento. Em troca de diminuir a condenação para Homicídio Culposo, Reiser levou investigadores até um local a cerca de 2 quilômetros de sua casa e mostrou onde enterrou sua esposa. Hans Reiser confessou tê-la estrangulado devido às brigas pelo divórcio que vinham acontecendo.

O ReiserFS é um dos sistemas de arquivos mais rápidos criados para sistemas abertos. Diversas distribuições de Linux havíam incorporado o ReiserFS como sistema de arquivos padrão.

Segundo a mesma reportagem os grupos de desenvolvimento do sistema Reiser caíram aos pedaços com a descoberta do crime, a empresa de Reiser faliu e as distribuições Linux que utilizavam esse sistema estão migrando para o tradicional EXT3.

Tudo indica que o destino do ReiserFS é o mesmo de seu autor : um longo, lento, doloroso e merecido esquecimento.

Leia mais e confira fotos adicionais no SF Gate

• • •
 

2 de February, 2008

Configurando um adaptador USB Wi-Fi Encore ENUWI-G no Fedora 8

Filed under: Linux — jfonseca @ 8:05 pm

Há uns 15 dias instalei o Fedora Core 8 em meu notebook mas até hoje não tinha tido tempo para configurar tudo o que preciso para trabalhar. Aproveitei o fim de semana para colocar o note em dia e eis que a instalacão do adaptador Wi-Fi USB me deu um pouco de trabalho.

Primeiramente é preciso descobrir o chip que o adaptador utiliza. Normalmente a marca e nome fantasia não resolvem. Para saber o ID real do chip use o comando “lsusb” no shell do Linux.

O resultado deve ser algo tipo:
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 009: ID 0457:0163 Silicon Integrated Systems Corp.

A linha que nos interessa é a que tem o ID 0457:0163. Se você tiver vários dispositivos no USB e os nomes gerarem confusão, desligue-os temporariamente e teste com apenas o adaptador Wi-Fi para saber seu ID.

Jogando esse ID no Altavista encontro que o chip que possui esse ID é o SiS163u.

Agora que sabemos o modelo, precisamos encontrar um modulo de kernel para esse chip. No presente momento não me parece que exista um driver Linux para esse chip, assim precisamos utilizar o NDISWrapper para pegar emprestado um driver de Windows XP.

Instalando o NDISWrapper

Para comecar a instalacão, crio o diretorio /root/wifi para baixar os arquivos que vou precisar, compilar o ndiswrapper e etc.

O NDISWrapper, conforme o nome em inglês sugere, é um “embrulho” em torno do padrão NDIS do Windows. As chamadas do NDIS são interceptadas por essa camada de código e traduzidas para algo que o Kernel do Linux pode entender, assim migrando o driver do Windows para o Linux de forma quase transparente. Nem todos os drivers funcionam, mas pelo que se tem visto o desenvolvimento do Wrappers anda em ritmo acelerado e hoje grande parte dos cartões PCMCIA, placas PCI e dispositivos via USB estão funcionando através desse artifício. Mais uma conquista dos hackers Linux que, com isso, conseguiram migrar milhares de drivers nativos do Windows para o Linux. Como todo wrapper, este artificio torna o driver necessáriamente mais lento por inserir uma camada de compatibilidade entre o hardware e o kernel. Porém não é perceptível para redes caseiras visto que nossas conexões internet normalmente são muito mais lentas que o bus utilizado, neste caso o USB. Para redes de alta performance, clusters, etc, este tipo de wrapper poderia se tornar um gargalo. Não é nosso caso, então vamos prosseguir.

Baixe o ndiswrapper mais recente neste link do Sourceforge. Escolha a versão mais recente e estável da lista, no meu caso a 1.52. Baixe o pacote ndiswrapper-1.52.tar.gz dentro da pasta /root/wifi/ e instale seguindo os seguintes passos:

cd /root/wifi/
tar xjvf ndiswrapper-1.52.tar.gz
cd ndiswrapper-1.52
./configure –prefix=/usr
make install

O make install irá chamar as dependências, que incluem o make e instalará o ndiswrapper no /usr/sbin/ndiswrapper assim que a compilacão terminar. Não devem ocorrer erros nessa etapa, que é bastante simples. Se tiver algum problema me envie pelo campo de comentários deste post ou tente resolver lendo atenciosamente quaisquer mensagens na tela. Na instalacão padrão do Fedora não houve qualquer problema, então vamos adiante.

Encontrando o Driver NDISWrapper correto
Jogo a consulta ‘0457:0163 ndiswrapper’ novamente no Altavista e recebo no primeiro resultado esta lista de dispositivos aceitos, há 2 ou 3 drivers compatíveis com esse chip. Escolho o seguinte, ao acaso:

# Card: Atlantis-Land Wireless USB Adapter (A02-UP-W54). 54mbps
* Chipset: SiS163
* usbid: 0457:0163
* Driver: http://www.atlantis-land.com/firmware/3463_A02-UP-W54%5BV10-20%5D.ZIP
* Other: I mount this on a slackware 10.2 with a 2.4.31 stable kernel. The device work very well!

Faco o download do link acima no diretorio /root/wifi e o descompacto assim:

cd /root/wifi
unzip 3463[teclo TAB para completar o nome extenso]

O pacote .ZIP descompactará um diretório Drivers, o qual acessamos e prosseguimos assim:

cd Drivers
cd Windows\ XP

E agora vem a parte importante, instalamos o driver Windows em nossa máquina com o seguinte comando:

ndiswrapper -i SiS163u.INF

Testamos a instalacão com o comando:

ndiswrapper -l

O qual deve retornar algo tipo:

sis163u: driver installed
device (0457:0163) present

Geramos o modules.dep novamente com o comando

depmod -a

E inserimos o módulo ndiswrapper no kernel atual através do comando:

modprobe ndiswrapper

Testamos se está tudo ok com o comando

lsmod | grep ndis

Cujo resultado deve ser algo semelhante a :

ndiswrapper 168860 0

Para termos certeza, vemos se o kernel tentou nos dizer algo no syslog através do comando

dmesg

Em alguma parte no fim do registro dmesg deve haver algo semelhante a :

ndiswrapper: driver sis163u (OEM,11/29/2004,5.1.1039.1020) loaded
wlan0: ethernet device 00:11:22:33:44:55 using NDIS driver: sis163u, version:0×10000000, NDIS version: 0×501, vendor: ‘NDIS Network Adapter 0457:0163.F.conf
wlan0: encryption modes supported: WEP, TKIP with WPA; AES/CCMP with WPA

No momento em que inserimos o módulo no kernel, este passa a enxergar o nosso hardware como um dispositivo de rede, wlan0 em nosso caso, que pode ser configurado com as ferramentas de rede tradicionais do Linux. No caso da interface Wi-Fi temos que fornecer os específicos da nossa rede para tentarmos obter um lease DHCP de nosso Access Point.

Configuracão Wi-Fi
Aquí em casa o access point é um D-Link DI-524 padrão 802.11g. O prédio onde moro está qualhado de access points abertos e sem senhas, porém já pago minha ADSL e não desejo abusar da rede alheia. Assim, fecho o access point com WPA e crio uma chave bem segura.

A configuracão do WPA no Fedora 8 é mais prática usando o wpa_supplicant. Este método exige que tenha algumas coisas configuradas corretamente na máquina, a saber: o arquivo /etc/wpa_supplicant/wpa_supplicant.conf

Primeiro vamos ver que redes estão disponíveis para conectar, usando o comando:

iwlist scan

Que resulta em

wlan0 Scan completed:
Cell 01 - Address: 77:88:99:aa:bb:cc
[DIVERSAS INFORMACÕES REMOVIDAS]

Procure a linha ESSID. Essa é a identificacão da rede encontrada, é nela que iremos conectar. Se você fechou seu AP com uma senha WPA, é preciso inserí-la no seu arquivo wpa_supplicant.conf. A senha não é fornecida em ASCII, e sim numa string hexadecimal que é facilmente gerada com o comando:

wpa_passphrase MEUSSID

Ele pedirá para digitar a senha do access point(AP) e o resultado pode ser colado diretamente no arquivo wpa_supplicant.conf. Exemplo:

#reading passphrase from stdin
teste123

O resultado é

network={
ssid=”minhawan”
psk=7d7ad77ad7ad7ad7a7d7ad7a7d7ad7a7d7ad7a7da7d7ad7a7d7ad
}

Copie e cole esse texto diretamente em /etc/wpa_supplicant/wpa_supplicant.conf substituindo, claro, o ssid pelo seu nome de rede e acrescentando quaisquer dados necessários à sua rede. Para cada rede sem fio que deseje conectar-se crie uma secão network={} nesse arquivo. Os parâmetros você obtem com o seguinte comando.

man wpa_supplicant.conf

Estamos quase lá! Agora coloque o wpa_supplicant para suplicar para você, através do comando:

wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -iwlan0 &

Substituindo o nome de interface e caminho do arquivo de acordo(exemplo, se voce tiver diversos arquivos, um para cada cidade onde trabalha ou algo assim) e dependendo do driver pode ser eth1 ou wlan0, etc. No caso do sis163u é wlan0. Coloco para trabalhar como processo de fundo utilizando o & no fim do comando.

Agora obtenha um endereco de rede à partir de seu AP com o comando:

dhclient wlan0

E se tudo correr bem você deverá receber um IP!!! O próprio dhcliente alterará seu /etc/resolv.conf para conter o nameserver correto.

Em meu caso precisei setar a rota principal na mão por algum motivo. Ainda não descobrí por que o DHCP não se encarregou disso, porém é muito simples em meu caso. Verifiquei que o IP obtido foi 192.168.1.25 e sabia que meu modem ADSL é o 192.168.1.1, então adicionei a rota default assim:

route add default gw 192.168.1.1

Novamente, não sei por que o DHCP não se encarregou desse passo final…deve haver uma solucão mais elegante, mas no momento preciso voltar ao trabalho!

Conclusão
São os mesmos passos que devem ser seguidos em qualquer sistema operacional, a diferenca principal é entre configurar as coisas em modo texto ou através de uma interface mais amigável. Existem diversas ferramentas para trabalhar essa configuracão em modo gráfico e outras para operar o wpa_supplicant dentro do X - como por exemplo o wpa_supplicant_gui - porém eu já tenho costume de trabalhar no shell. O NDISwrapper é uma mão na roda, esta solucão só foi possível gracas a ele!

• • •