Como todos sabem, o problema do mundo é I/O

Todo mundo tem aquela aplicação que sempre quis ter (ou no mínimo se irritou muito por não ter); alguns talvez tenham escrito a aplicação, ou melhorado outra para resolver seu problema. Outros tiveram a felicidade de vê-la aparecendo em um ITP na debian-devel ;). A aplicação de que eu falo agora cai, no meu caso, nessa última, e o nome dela é iotop.

O iotop é basicamente um top para I/O. Ele consegue mostrar que processos estão lendo e escrevendo dados do disco, a que taxa de transferência, e quantos porcento do tempo do processo está sendo gasto esperando I/O. No screenshot abaixo você pode ver o iotop mostrando processos do Beagle, uma compilação do WebKit/GTK+, e por aí vai.

iotop

Mas resolvi falar dele por outra coisa. Eu estava copiando umas coisas de um DVD para o meu HD e suspendi o computador no meio do processo. Como a barra de progresso da cópia andava leeeentamente depois de ter trazido o computador de volta resolvi investigar e percebi que a cópia estava acontecendo a uma taxa de por volta de 11KB/s. Ridículo. Algumas coisas que eu fiz que ajudaram:


# hdparm -a 2048 /dev/hda
# hdparm -c 1 /dev/hda
# hdparm -E 56 /dev/hda

Explico: -a configura o read-ahead do dispositivo IDE; é o número de setores que o sistema de arquivos lerá quando uma leitura qualquer for feita, se adiantando aos pedidos que recebe; deve ser um múltiplo de 2, na maioria dos casos; isso aumenta o desempenho de leituras sequenciais. O -c configura se o I/O é feito em modo 32 bits. Finalmente o -E, que deu o maior resultado, configura a velocidade do drive. Eu não sei quantos X (do ponto de vista de CDROM, que é o que deve ser considerado aqui) meu DVD tem, mas colocar 56 fez funcionar muito bem.

Se alguém tiver alguma informação menos mágica do que as que eu postei aqui, ou uma forma de descobrir quantos X um leitor de CDs tem, posta nos comentários! =D Ah, o negócio passou a fazer leituras de 3 a 4 MB/s depois disso hehe.

Voltando à ativa…

Debconf8! Eu vou!

I'm going to DebConf8, edition 2008 of the annual Debian developers meeting

Já estou com um notebook novo. É um HP Pavilion dv2670br, em que tudo funcionou somente usando software livre, inclusive a webcam, o leitor de impressões digitais e as funcionalidades de hibernação/suspensão. As placas todas são intel, o que faz com que os drivers de som, gráfico e rede estejam disponíveis e integrados nos projetos relevantes. Com excessão, obviamente, do firmware necessário para a placa wireless =(. Intel, você estão quase 100% de parabéns! =)

Na verdade, para que suspensão funcionasse automaticamente pelo gnome-power-manager eu precisei usar um quirk, e o contribuí de volta como patch para o XML do hal-info. Isso significa que novas versões do hal-info já vão funcionar automaticamente com esse notebook. Com o fantástico GNOME 2.22 rodando quase todo, graças ao maravilhoso trabalho do time de empacotamento do GNOME do Debian, meu desktop está me dando muita alegria! Viva o desktop livre!

Continuo me preparando, claro, para o dia em que o KDE vai fazer o GNOME simplesmente perder a importância, como profetisou o KDHélio no último evento do LinuxChix =D.

Sentimentalismo…

Eu sei… sempre que eu vou a uma debconf eu fico sentimental. Não sem razão, eu asseguro: fazer parte do Projeto Debian é algo de que eu sempre me orgulhei, e algo que sempre me emocionou, desde os idos de 1999, quando eu conheci o projeto e quase não acreditei que algo desse tipo pudesse de fato existir.

Manoj em discussão sobre a Debian Policy

Estar em uma debconf me faz sentir como se eu estivesse em família. São muitas pessoas, com muito conhecimento técnico, em geral um ótimo senso de humor e muito pouco preconceito. A diversidade é enorme, tanto nos gostos, quanto nas habilidades, as aparências. É como estar em um espaço livre, sem imposições nem discriminação.

Sun forneceu drinks

Quarta-feira e ontem foram dias especialmente divertidos: a “day trip” envolveu um longo passeio de trem, seguido por um passeio de ferry e acabou em uma ilha, com um castelo muito interessante. Eu passei pelo menos uma hora e meia em um pub (de verdade!) com um grupo de russos discutindo desde as vantagens de lançar código interno de empresas como software livre até capitalismo vs comunismo (um papo, eu diria, especialmente interessante para se ter com russos!).

dancing

Ontem, por sua vez, foi dia de comer e beber de graça (graças a Google, que forneceu pizzas e à Sun, que forneceu drinks – porque pra escolher Java só bêbado mesmo), e dançar músicas típicas da Escócias no Debian ceilidh. Não sem antes ter assistido a palestras muito interessantes, como a que falou do uso de Debian no Sanger, que tem clusters enormes com Debian envolvidos na pesquisa dos genomas humanos e de outros animais.

Debconf 7… aqui estou eu!

Muito tempo sem escrever. Desde a última vez participei do IV ESLAM (Encontro de Software Livre do Amazonas) e me impressionei positivamente com a organização, com as pessoas e com o evento em geral. Muito bom!

Arc de Triomphe

No dia 16 às 8:40 da manhã eu viajei pra Sampa, onde à tarde peguei um avião pra Paris. Deu tempo pra correr até o Arc de Triomphe e à Torre Eifel e tirar algumas fotos, mas nada mais.

Torre Eifel

Peguei o avião pra Edimburgo no final da tarde do dia 17 e cheguei já no início da noite. Fiz check-in, peguei minha senha de wireless e dormi das 22 às 13 do outro dia, de tão cansado. Desde então estou andando por aí com o Tiago, Tassia, stratus e o faw. Já encontrei diversas pessoas, assisti um monte de palestras (a maioria via streaming). Fiz algum trabalho, também: consegui atualizar algumas coisas do update-manager, iniciei o empacotamento do software-properties e acabei tendo de fazer um patch pra o python-apt.

Edimburgo

Nos próximos dias teremos a Day Trip e eu já estive falando com o Bdale sobre as minhas idéias de melhorar o sudo e o su para conversarem melhor com o gksu, então devo lidar mais com isso durante o resto da semana!

Eu fiz upload de fotos separadas por dias em que foram tiradas.

Vida pós-FISL

Primeiro, claro, alguns comentários sobre o FISL 8: como sempre, foi muito bom rever os meus vários amigos, bater papo, trocar idéias sobre assuntos técnicos ou não. Tive oportunidade de discutir com diversas pessoas o design do PyMeter, que aliás anda meio parado por minha falta de tempo, e do gksu. A primeira apresentação que assisti (só o final) foi a do Mazoni falando de qualidade de vida, crença nas pessoas e da qualidade do ambiente de trabalho. Bastante emocionante, para dizer a verdade, gostei muito. É uma pena que a Celepar ainda não tenha respondido definitivamente questionamentos sobre o fato de a LPG-AP não ser software livre (e ter sido avaliada como tal inclusive pela FSF), mas pelo que vinha sendo feito no final de 2006, creio que isso seja resolvido logo, vamos ficar de olho.

Tem mais coisas pra falar, provavelmente, mas eu lembro depois =D.

Tenho feito, agora que o Etch foi lançado, uma geral nos meus pacotes. Mandando versões novas para unstable, experimentando novas técnicas para alguns pacotes serem mais úteis ou mais simples. Semana passada consegui tratar do Glade3, principalmente, entre outros. Essa semana foi pythonica: ConfigObj e CherryPy3 receberam bastante amor. Próximo passo é olhar bastante para gksu e sua turma, que vai levar bastante trabalho de código propriamente dito.

No trabalho, por motivos que não cabe expor aqui, tenho ajudado um time de desenvolvedores (eu sou da produção) a resolver um problema de leak de memória no código Java deles. Hein? Isso mesmo. Java também tem vazamento de memória, mas de uma forma diferente: Java (e outras linguagens, Python incluso) depende do Garbage Collector para liberar memória. O GC somente libera objetos que não tenham mais nenhuma referência (ponteiro, para amigos do C); se você não vai usar mais um objeto, mas não retira dele todas as referências, ele começa a lotar sua área “Tenured” (a JVM divide o Heap em várias áreas para otimizar o GC) com objetos inúteis, até que a memória destinada à JVM acaba. Para quem interessar, as duas melhores ferramentas que eu achei para fazer análise disso, até agora, foram HPROF, que vem com o JDK, e HAT (http://hat.dev.java.net/) para analisar o dump de heap que o HPROF gera.

Tudo em Java é tão mais difícil… deu até saudade de memprof e valgrind (que eu até então achava chato). Tudo é tão mais lento, complexo… enfim, admiro pacaramba a Sun por ter feito algo tão ruim, improdutivo e lento e ainda assim conseguir vender pra tanta gente a idéia. Admiro a Sun por ter liberado (ou prometido liberar) o Java como software livre, também. Em favor da Sun eu tenho a dizer que das empresas que lidam com SL ela talvez seja a que mais faz, embora muitas falem tanto quanto ela. OpenOffice.org, GNOME, e agora Java, todos se beneficiam bastante do trabalho da Sun, e por isso eu realmente a respeito, mas não pela qualidade do Java =P.

Resultado: um colega de trabalho, Jose Assis, citou que tinha feito não sei o que em Assembly e minha veia nerd coçou fortemente, incentivada pelas horas de insanidade que passei com Java, e tive de ir brincar com ASM também. Acabei gastando boas horas das minhas aulas de Java na faculdade fazendo um programa que baixa a página de teste do apache do Debian do localhost, sem usar funções da libc, usando somente chamadas de sistema:


.data
msg:
.ascii "GET /apache2-default/ HTTP/1.0\n\n"
len = . - msg

.bss
servaddr:
.space 128, 0
servaddrlen = . - servaddr

sock:
.long 0x0

buffer:
.space 256
bufferlen = . - buffer

bytesread:
.long 0x0

.text
.global main

main:
pushl %ebp
movl %esp,%ebp
subl $12,%esp

movl $102,%eax /* socket () */
movl $1,%ebx
pushl $6
pushl $1
pushl $2
movl %esp,%ecx
int $0x80
/* is this needed?
movl %ebp,%esp
popl %ebp
doesn't look like*/

movl %eax,sock /* save the return value of the socket() call */

pushl %ebp
movl %esp,%ebp
subl $136,%esp

movl $102,%eax
movl $0x03,%ebx
movw $0x02,servaddr /* build the sockaddr struct */
movw $((80 & 0xff00) >> 8 | (80 & 0xff) << 8),servaddr+2 movl $0x0100007f,servaddr+4 pushl $servaddrlen pushl $servaddr pushl sock movl %esp,%ecx int $0x80 movl $4,%eax movl sock,%ebx movl $msg,%ecx movl $len,%edx int $0x80 L1: movl $3,%eax movl sock,%ebx movl $buffer,%ecx movl $256,%edx int $0x80 movl %eax,bytesread cmpl $0,%eax je L2 movl $4,%eax movl $1,%ebx movl $buffer,%ecx movl bytesread,%edx int $0x80 jmp L1 L2: movl $1,%eax movl $0,%ebx int $0x80 ret

Deve estar cheio de erros, dado meu grande desconhecimento de ASM, syscalls e de como funciona de fato o CPU, pilha, etc, mas funciona bonitinho:


kov@cenoura:~/src/asm$ strace -s 1024 ./socket
[...]
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("127.0.0.1")}, 128) = 0
write(3, "GET /apache2-default/ HTTP/1.0\n\n", 32) = 32
read(3, "HTTP/1.1 200 OK\r\nDate: Sat, 21 Apr 2007 19:05:00 GMT\r\nServer: Apache/2.2.3 (Debian)\r\nLast-Modified: Sat, 20 Nov 2004 20:16:24 GMT\r\nETag: \"6400b-2c-4c23b600\"\r\nAccept-Ranges: bytes\r\nContent-Length: 44\r\nConnection: close\r\nContent-Type: text/html; charset=UTF-", 256) = 256
write(1, "HTTP/1.1 200 OK\r\nDate: Sat, 21 Apr 2007 19:05:00 GMT\r\nServer: Apache/2.2.3 (Debian)\r\nLast-Modified: Sat, 20 Nov 2004 20:16:24 GMT\r\nETag: \"6400b-2c-4c23b600\"\r\nAccept-Ranges: bytes\r\nContent-Length: 44\r\nConnection: close\r\nContent-Type: text/html; charset=UTF-", 256HTTP/1.1 200 OK
Date: Sat, 21 Apr 2007 19:05:00 GMT
Server: Apache/2.2.3 (Debian)
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "6400b-2c-4c23b600"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html; charset=UTF-) = 256
read(3, "8\r\n\r\n<html><body><h1>It works!</h1></body></html>", 256) = 49
write(1, "8\r\n\r\n<html><body><h1>It works!</h1></body></html>", 498

<html><body><h1>It works!</h1></body></html>) = 49
read(3, "", 256) = 0
_exit(0) = ?
Process 14468 detached

Eu vou ao FISL… Debian e devaneios sobre educação

Eu não ia. Tinha resolvido que era melhor focar somente no evento de Maio, no Amazonas, em que vou falar de Debian e TurboGears e na Debconf, para a qual já comprei passagem e estou pleiteando financiamento, inclusive.

Mas aí fiquei sabendo pelo meu chefe que o MDS, onde eu trabalho hoje em dia, vai patrocinar o evento e que terá direito a uma palestra, e fui escalado junto com a Fabiana, desenvolvedora PHP que cordena a equipe de desenvolvimento do Ministério.

A apresentação é sobre um assunto interessante e tem bastante resposta pra ‘show us the code’, embora, como todas as iniciativas de governo que existem, seja bastante ‘marginal’, não indo tão a fundo no conceito do software livre, sendo mais usuário que produtor.

Então poderemos nos ver por POA no FISL! No campo Debian, estou ansioso pela saída da Etch, e pela Debconf. Minha vida debiânica tem sido basicamente manter os pacotes do gksu e TG redondinhos e com traduções atualizadas para a Etch, mas minha cabeça já está borbulhando com idéias para a próxima era do gksu; vou detalhá-las mais aqui em outra ocasião.

Outra coisa que tem estado bastante na minha cabeça é Educação; não é novidade pra quem me conhece que eu sempre pensei muito sobre como aprender e como a educação deveria ser. Postei várias vezes nos meus antigos blogs sobre isso. Por diversas razões tenho pensado muito nisso nos últimos tempos. A idéia principal que gira na minha cabeça ultimamente é que talvez fosse muito melhor se a educação fosse focada em habilidades, ao invés de ser focada em conhecimento.

Por que não ensinar as pessoas a entender e resolver problemas, ao invés de fazê-las decorar métodos de resolução de equações de segundo grau, por exemplo? Não seria mais útil ensinar interpretação de textos de verdade ao invés de obrigar pessoas a decorarem regras de gramática? Estive pensando bem e acho que a única habilidade que nós realmente praticamos durante nossa vida escolar é a de memorizar; bastante alinhada com a realidade que conhecemos na vida profissional, se você pensar bem… de que tipo de habilidade você precisa para fazer certificações e concursos, afinal? =)