Scale Fail

Hoje foi publicado no site Linux Weekly News um artigo de Josh Berkus chamado Scale Fail (part 1) é preciso ser assinante da LWN ou esperar uma semana para que o artigo seja tornado público, mas enquanto isso você pode assistir a uma apresentação que o Josh Berkus fez aqui. O assunto não só é interessante como tem muito a ver com o tema de que eu tratei no meu último post =). O Josh Berkus é um dos principais desenvolvedores do PostgreSQL e também fez uma palestra muito interessante na Linux Foundation Collaboration Summit do ano passado sobre como evitar que seu projeto gere uma comunidade. Recomendo fortemente. Se interessar, também recomendo a palestra seguinte, do Chris DiBona do Android.

Mesa redonda

Anos atrás trabalhei num ambiente em que todos os usuários praticamente conheciam o hostname do servidor de arquivos. Usuários saberem hostnames de servidores de arquivos quase nunca é um bom sinal. Todos reclamavam constantemente do tal servidor, falando sempre de como era lento o acesso aos arquivos. Assim que entrei me informaram das medidas que já haviam sido tomadas: sempre que a reclamação ficava muito grande o administrador de rede colocava uma placa de rede de 100Mbps nova no servidor, mas isso parecia pouco resolver.

Alguns anos mais tarde trabalhei em outro lugar em que havia uma aplicação web acessada por um número bastante grande de usuários de todo o Brasil. Havia um grande porém. Apesar de eu fazer parte da equipe de infraestrutura, todo o ambiente de produção dessa instituição ficava sob a responsabilidade de uma outra empresa. A tal aplicação começou a exibir graves problemas de desempenho e como havia prazos relacionados ao preenchimento de dados na aplicação, cada dia que passava sem que muitos usuários conseguissem fazer qualquer coisa no sistema gerava um aumento considerável na preocupação dos gestores.

Ao contrário do administrador do primeiro lugar a solução da equipe responsável pela TI dessa segunda instituição era menos mão-na-massa: fazíamos reuniões em torno de uma mesa em que eram debatidas as diversas possibilidades e sugeridas possíveis soluções. Alguns achavam que o problema era que a aplicação era lenta, outros que o servidor web estava mal configurado, outros que era falta de banda. Houve quem sugerisse que se substituísse a aplicação web por uma aplicação que rodasse na máquina dos usuários, com acesso direto ao banco de dados, o que supostamente reduziria o uso de banda.

O que há de errado em ambas as histórias? Ninguém nunca havia pensado em coletar dados, medir, saber o que havia de errado para depois atacar o problema. Eles preferiam fazer o pior tipo de tratamento de problemas de desempenho: imaginar qual seria o problema e chutar soluções que pudessem saná-los.

No primeiro caso, logo depois que entramos eu e um colega, a primeira coisa que esse colega fez foi instalar um monitoramento razoavelmente completo de indicadores de desempenho de todo o ambiente de rede com o cacti. Não demorou muito para que nós descobríssemos que o problema do nosso querido servidor de arquivos estava longe de ser banda. A carga de transferência de dados nunca passava dos 30Mbps, o que é muito menos que os 100Mbps que uma única placa de rede comum à época conseguiria de desempenho nominal. Adicionar placas de rede não adiantava absolutamente nada. Nem me lembro exatamente qual era o problema, provavelmente uma soma de fatores que incluíam uma configuração pra lá de absurda do Samba e uma configuração de raid que não fazia sentido, mas isso não vem ao caso. O importante dessa história é que o remédio que estava sendo dado para nosso paciente não ajudava em nada a melhorar a doença que ele tinha ;).

O segundo caso é um pouco mais triste: depois de algumas semanas tentando brigar com a estrutura burocrática para nos permitir acessar os servidores e saber o que estava acontecendo chegamos a um indicador bastante interessante: a carga média de 1 minuto do servidor de banco de dados estava em torno de 70. A máquina se não me engano tinha somente um processador. A carga média no Linux indica o número de processos que estão na fila para usar o processador ou bloqueados por espera de I/O, em médias de 1, 5 e 15 minutos. Como nós já havíamos investigado (e até tomado o controle) dos servidores de aplicação, nossa investigação sobre qual era o gargalo naquele momento parecia ter chegado a uma conclusão: o banco de dados e/ou o que a aplicação pedia dele precisava de amor e carinho. Acontece que não adiantou nada nós termos descoberto isso: continuamos por mais algumas semanas com todo mundo correndo em círculos como galinhas sem cabeça e sem ninguém com conhecimentos adequados chegar perto de analizar o banco de dados e as consultas feitas, até que finalmente alguém mais de cima decidiu mandar todos os nossos chefes embora e fazer uma intervenção.

Depois de algumas semanas batendo cabeça do mesmo jeito, com mais reuniões inúteis em torno de mesas (mas dessa vez com outros personagens) finalmente conseguimos que alguém com poder de agir nos escutasse e consertasse o banco de dados, embora nossa demanda por melhorias na aplicação (que nossas pesquisas paralelas e sem nenhuma ajuda do DBA indicaram colocar mais peso no banco do que o necessário) tenham caído em ouvidos surdos. As mudanças feitas no banco (otimização de queries, criação de índices e views materializadas, essencialmente, pelo que minha leiguice captou) acabaram dando gás para que o sistema sobrevivesse mais algum tempo sem uma intervenção mais estrutural, que acabamos fazendo quando finalmente assumimos o controle do servidor de banco de dados também, mas essa já é uma história pra outro post de blog.

Problemas de desempenho e otimizações são aquele tipo de coisa em que a pior coisa que você pode fazer é sentar em volta de uma mesa e tentar tirar qual o problema do ar. Agir com soluções de senso comum também só dá certo se você for sortudo. Esse assunto me interessa e por isso estou pensando em fazer alguns posts falando de problemas de desempenho e otimizações prematuras que demonstram que nem sempre o que é intuitivo é a realidade e que mesmo que você tenha uma hipótese bastante plausível é melhor investigar antes de torná-la uma crença. Alguém tem histórias interessantes pra compartilhar? =)

Nota: essa é uma obra de ficção baseada em fatos reais; algumas simplificações foram feitas sem prejuízo do caso em geral

A resposta do Ministério da Saúde

Ontem eu falei de como não conseguia mandar minha pergunta ao Ministério da Saúde. Como eu não desisto fácil, usei o email que achei para uso de imprensa para mandar minha pergunta e acabei recebendo resposta. Acompanhe a conversa:

Eu:

Recebi um email de dengue@combatadengeu.com.br com uma mensagem sobre a campanha e alguns links. Essa mensagem partiu do Ministério? Onde/como meu email foi obtido?

Saúde:

De: Andréa da Cunha Rocha
Para: gustavo@noronha.eti.br
Cc: COMUNICAÇÃO INTERATIVA
Assunto: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 18:57:08 +0000 (02/23/2011 03:57:08 PM)

Gustavo,

O Ministério da Saúde realiza ações nas redes sociais, incentivando parceria com blogueiros e internautas. Mas a mensagem a qual você se refere não foi enviada pelo Ministério. Pode ser algum spam. Agradecemos o alerta e averiguaremos a procedência de tal e-mail.

Continuamos à disposição para o esclarecimento de quaisquer dúvidas sobre saúde!

Att.,

Saúde

De: Andréa da Cunha Rocha
Para: gustavo@noronha.eti.br
Cc: COMUNICAÇÃO INTERATIVA
Assunto: Cancelar: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 19:14:44 +0000 (02/23/2011 04:14:44 PM)

Andréa da Cunha Rocha deseja cancelar a mensagem “Dúvida sobre dengue”.

Saúde:

De: Andréa da Cunha Rocha
Para: Andréa da Cunha Rocha , gustavo@noronha.eti.br
Cc: COMUNICAÇÃO INTERATIVA
Assunto: RES: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 19:36:54 +0000 (02/23/2011 04:36:54 PM)

Gustavo,

Desculpe-nos, houve um equívoco na informação. Realmente, o e-mail que você recebeu foi enviado pelo Ministério da Saúde. Esta é uma ação de combate à dengue que está sendo realiza em todas as redes sociais.

Estamos à disposição!

Att.,

Eu:

De: Gustavo Noronha Silva [mailto:gustavo@noronha.eti.br]
Enviada em: quarta-feira, 23 de fevereiro de 2011 18:50
Para: Andréa da Cunha Rocha
Cc: COMUNICAÇÃO INTERATIVA
Assunto: Re: RES: Dúvida sobre dengue

Oi Andréa,

Obrigado pela atenção! Você sabe me dizer de onde meu e-mail foi obtido?
Eu não me lembro de ter-me cadastrado em nenhuma lista de correio do
Ministério da Saúde.

Eu me cadastrei no site da campanha Dilma, no entanto, no ano passado. A
mensagem de email que eu recebi tinha alguns links que apontavam para o
domínio dilma.com.br, inclusive o link que poderia ser clicado para não
receber mais os emails. É possível que tenha vindo do banco de dados
deles o meu endereço de email?

Obrigado,

Saúde:

De: Andréa da Cunha Rocha
Para: Gustavo Noronha Silva
Cc: COMUNICAÇÃO INTERATIVA
Assunto: RES: RES: Dúvida sobre dengue
Enviada em: Wed, 23 Feb 2011 22:29:03 +0000 (02/23/2011 07:29:03 PM)

Prezado Gustavo,

Não sabemos lhe informar sobre isto, pois o envio de e-mail marketing já está incluso no contrato da agência licitada para prestar o serviço.

Continuamos à disposição para o esclarecimento de dúvidas sobre saúde.

Att.,

Ah, então tá, né…

Fico muito mais tranquilo que tenha sido só o Ministério que contratou uma empresa de “e-mail marketing” que obteve meu endereço de email de sabe-se lá onde. Vocês não? Não?

Governo Federal e a Internet. Tá me zoando, né?

Em uma nova tentativa de demonstrar que o apoio aos padrões abertos e ao software livre pelo Governo Federal está mais no discurso que nas ações o Blog do Planalto publica transcrições dos discursos da presidente em documentos no formato binário proprietário gerado pelo Microsoft Word (exemplo).

Ao tentar registrar minha sugestão de que não faz sentido isso já que discursos não passam de texto simples e poderiam muito bem ser publicados em um formato muito mais conveniente (como, tcharãn, HTML, que é usado no próprio blog) sempre me deparo com a seguinte mensagem:

Falha ao enviar sua mensagem. Por favor tente mais tarde ou contacte o administrador de outra forma.

Muito bem. Qual exatamente é a outra forma? Já que eu não achei uma, vai em forma de blog e mensagem no (argh) twitter, imagino.
Blog do Planalto me ajudando.
Como se eu já não estivesse chateado o suficiente com a forma como o governo se relaciona comigo pela Internet (estou olhando pra você também IRPF), recebo hoje um email:

From: Ministério da Saúde
To: gustavo@noronha.eti.br
Subject: Dengue. Se você agir, podemos evitar.
Date: Wed, 23 Feb 2011 01:00:22 +0000 (02/22/2011 10:00:22 PM)

Nham. O email é da campanha contra a dengue, mas vários links apontam para URLs no domínio dilma.com.br, como você pode ver na cópia do email que eu coloquei aqui. Eles de fato levam pra página da campanha, mas não é estranho? Exemplo:

<p>Caso não queira mais receber e-mails, clique <a href=”http://dilma.com.br/page/m/3ef9c647/5f18969f/7fea378b/25000d2e/1178116369/VEsE/”>aqui</a>.</p>

E o domínio é de fato registrado para a pessoa física Dilma Vana Rousseff:

kov@couve:~$ whois dilma.com.br | head -n 13 | tail -n 4
domain: dilma.com.br
owner: DILMA VANA ROUSSEFF
ownerid: 133.267.246-91
country: BR

Tendo em vista que eu não me cadastrei em lugar nenhum para receber emails do Ministério e que é muito estranho o domínio pessoal da Dilma ser usado na campanha da dengue do Ministério, eu quis contactar o Ministério da Saúde a respeito. Aí eu fui no lugar óbvio: Fale conosco do site do Ministério. Isso nos leva para uma página onde se pode registrar uma mensagem, depois de clicar uns links sobre ter entendido os termos. Acontece que essa é a página:
Site de fale conosco da saúde me ajudando muito.
*clap* *clap* *clap*

A clutter port of WebKit

In case you missed the news on webkit-dev, Collabora has been working on developing a clutter port of WebKit. It shares the build system with EFL, and most of the backend code comes from the GTK+ port. That means networking is handled by soup, drawing by cairo, multimedia by GStreamer, and so on.

If you’d like to give it a try, you can clone the repository from gitorious:

$ git clone git://gitorious.org/webkit-clutter/webkit-clutter.git

Then to build it you use cmake. From inside the source code directory do this:

$ mkdir build
$ cd build
$ cmake .. -DPORT=Clutter -DSHARED_CORE=1 -DBUILD_MX_LIB=1
$ make

The BUILD_MX_LIB option is optional – it will build what we call the “Mx toolkit library” in addition to the vanilla one. Then you can test that the library is built and working by running the programs inside the “Programs” directory. Enjoy!

A Claro, o CMI, a justiça e eu

Há alguns meses o pessoal do Centro de Mídia Independente (CMI) começou a receber relatos de usuários que não conseguiam acessar seu site. Os administradores de sistema do CMI tentaram localizar algum problema na infraestrutura do site mas não parecia haver nada de errado. Não demorou muito para identificar um padrão nos usuários que reclamavam: eles eram usuários da NET e da Claro 3G.

Muitos usuários ligaram e reclamaram, é claro, mas tanto NET quanto Claro negavam qualquer tipo de bloqueio e diziam aos usuários que o problema era com o site do CMI. Depois de muita insistência e de uma notificação extra-judicial enviada pelos advogados do CMI à Claro ficamos sabendo do real motivo:

Trata-se de um processo movido pela Associação dos Magistrados da Justiça do Trabalho ontra a Associação dos Rodoviários Aposentados e Pensionistas de Minas Gerais e o Sindicato dos Trabalhadores em Transportes Rodoviários de Belo Horizonte. Você deve estar se perguntando onde entram o CMI, NET e Claro nisso né? Aparentemente o juíz decidiu que uma matéria publicada no CMI tinha que ser retirada do ar e decidiu que quem devia retirar do ar a matéria eram as empresas de comunicação! O CMI não chegou sequer a ser comunicado dessa decisão.

Olhando por esse lado Claro e NET são vítimas da estupidez da Justiça brasileira, é verdade. Mais uma decisão vergonhosa da Justiça brasileira – bloquear um site para todos os brasileiros já seria ridículo, mas bloquear para usuários de algumas operadoras é a coisa mais absurda que eu já ouvi falar. Eu troquei de operadora de celular de qualquer forma e vou explicar por quê: em primeiro lugar não há nenhum sinal de que as operadoras tenham recorrido dessa decisão para guardar seus interesses e os de seus clientes. Em segundo lugar elas estão fazendo um péssimo trabalho de informar os clientes corretamente a respeito do problema.

Quando eu liguei na ouvidoria da Claro para registrar a razão da minha saída da operadora a atendente que conversou comigo me pediu o endereço do site e tentou acessar, juntamente com seu chefe e me disse: “Aqui não funciona esse site; tem certeza de que o endereço está certo? O site deve estar caído.” Ao que eu revidei: “É óbvio que vocês não vão conseguir acessar. Vocês estão dentro da rede da Claro, que bloqueou o acesso ao site, como eu já disse. Se vocês tentarem de algumas outras operadoras vocês vão conseguir.”. Depois de muito custo e só porque eu já tinha avisado que ia cancelar o serviço a atendente chegou na informação correta: o processo judicial que obriga a Claro a bloquear o site inteiro se precisar.

Eu expliquei que esse comportamento não é aceitável pra mim, que a Claro devia ter pelo menos feito um trabalho muito melhor de informar os clientes do problema real (redirecionando o endereço para uma página com as informações, por exemplo), já que até para os funcionários da Claro, como eles puderam ver, o que parecia era que o site estava fora do ar – o que não era verdade. Todos os relatos que eu vi de contato tanto com a NET quanto com a claro tiveram esse mesmo desenlace, com muitos deles não chegando à informação verdadeira.

Hoje eu consigo acessar o CMI de todas as minha conexões com a Internet de novo e recomendo a quem não estiver ainda conseguindo a trocar de operadora/serviço de Internet. É fácil com a portabilidade e serve como protesto contra essa estupidez. Não deixe de registrar na ouvidoria o motivo!

WebKitGTK+ hackfest 2010!

Last week I attended the WebKitGTK+ 2010 hackfest. It was a great opportunity to meet up with the other developers, discuss some plans for the future, hack away at WebKitGTK+. But, most importantly, play Street Figher 2 =). Thanks to Collabora and Igalia for sponsoring the hackfest, Igalia for hosting and organizing it (well done!), and the GNOME foundation for having sponsored my trip to Coruña!

Unlike last year we didn’t find any big design issues hurting our work (page cache, I’m looking at you!) on new futures. I also didn’t have any huge plans for new API, although we did manage to get some new stuff in there, like the plugins management API Xan created, and the further work done by Dan in soup. This meant, from my point of view the hackfest has been a great oportunity to look at refactorings that we could do to further simplify understanding the code, changing it, and even sharing it =). Besides pushing the debian packaging of the 1.3.x series a bit further.

Coruña was great as always, and I enjoyed going around, eating and hacking there, although I got a cold on the last days which kinda hindered my ability to stare at the screen for too long, some times. Now that I’m at the hot brazilian summer again I’ll hopefully get better soon =)

Cheers \o/

Sponsored by the GNOME Foundation

O pior cego é aquele que não quer ver

Cegueira ideológica e Tribalismo

Muita gente repete que o pior cego é o que não quer ver, mas muito pouca gente me parece refletir a respeito do que isso quer de fato dizer. O Mark Shuttleworth fez há pouco tempo um post em seu blog que eu acho que vai no ponto exato da questão quando fala de algo que ele chama de “tribalismo“.

Eu tenho chamado esse comportamento de “cegueira ideológica”, mas acho que vou adotar o termo dele, que é bem mais simples e acho que bem mais correto, porque não se trata apenas de ideologia! Ele fala de 2 tipos de argumento que aparecem muito nos discursos tribalizados: “o outro pessoal nunca fez nada” (muito comum nas campanhas políticas, inclusive) e “evidência que contraria minha crença/visão não conta”.

Esse tipo de comportamento tribal aparece nas mais diversas áreas da nossa vida. Torcedores de futebol, defensores de uma determinada tecnologia ou ideia, militantes de um partido (ou, no Brasil, indivíduo!). Recentemente várias coisas interessantes aconteceram que me fizeram pensar mais e mais nesse tipo de comportamento.

O mais recente foi o processo movido pela Oracle contra o Google por violação de patentes relacionadas ao Java no Android. Não é segredo pra ninguém que eu não gosto de Java. Esse meu desgosto pela tecnologia é multi-facetado: eu não gosto da sintaxe, acho que tecnologias Java costumam complicar muito mais do que o necessário e pra piorar toda a situação nós não tínhamos uma implementação livre. Meus problemas com a tecnologia foram diminuindo com o tempo em razão de vários progressos que foram feitos – VMs livres começaram a aparecer, a própria Sun liberou as partes que podia da sua VM e por aí vai. Gostando ou não, eu acho importante que Java seja uma das ferramentas disponíveis para a realização da liberdade de software e vejo na ação da Oracle uma grande ameaça que precisa ser rechaçada.

O Java é Livre! Oh really?

Muitos anos atrás, no entanto, era comum encontrar gente que se dizia defensora de Software Livre advogando uso de Java – numa época em que nós sequer tínhamos uma implementação livre da VM e das bibliotecas básicas. Um dos principais argumentos era que a especificação era aberta e construída de forma aberta, também. Eu acho ambas as afirmações muito discutíveis, mas como elas são irrelevantes para a discussão atual não vou aprofundar agora.

Com o surgimento do .NET, seguido do Mono, uma alternativa viável ao Java como linguagem de alto nível baseada em uma VM poderosa começou a se desenhar – e com uma implementação livre! Aplicações úteis e interessantes começaram a aparecer no desktop livre, coisa que nunca houve com Java. Não demorou quase nada para esses defensores de Java caírem de pau no Mono, é claro – .NET é uma tecnologia da Microsoft, recheada de patentes, certamente, diziam. A Microsoft vai querer destruir a comunidade de SL na primeira oportunidade – assim que dependêssemos o suficiente do Mono. Eles não estavam errados, note, eles estavam muito certos e embora os riscos tenham sido diminuídos com o tempo por várias razões eles ainda são bem reais! Mas os mesmos riscos que eles viam no Mono também existiam para o Java, sempre existiram, mas eles se negavam a ver ou concordar. “A Sun é muito mais comprometida com a liberdade que a Microsoft” diziam eles. Yeah, sure.

Eu não estou argumentando que eles deviam deixar Java de lado, note bem. Eu acho que eles deviam sim, como fizeram, ter lutado para que Java fosse mais uma opção para nossa comunidade criar e exercer suas liberdades. Eu respeitaria qualquer um que dissesse “Sim, eu reconheço e assumo os riscos. Se um dia chegar a esse pior caso eu vou lutar para defender nossa liberdade frente às patentes”. Agora, 6-10 anos depois, chegou a hora da tribo do Java rever os seus conceitos e de nós todos, como comunidade, ajudarmos na defesa do Google!

E não para por aí, infelizmente.

O tribalismo não para por aí, infelizmente. É comum encontrar diversos casos em que as pessoas propagam informações a favor do que defende sem verificar (se é a favor tem que estar certo, né?) e de achar cabelo em ovo nas informações que são contra seus defendidos ou a favor dos seus “inimigos” (da época). Isso aconteceu no caso em que se divulgou por exemplo que o Windows 7 usava código do Linux, quando na verdade uma ferramenta secundária que sequer é distribuída junto com o Windows 7 usava código GPL de uma outra ferramenta publicada no Codeplex da Microsoft, que não tinha nada a ver com o Linux.

Isso também acontece sempre nas campanhas políticas, é claro e eu não paro de rir de gente fazendo defesas absurdas e fazendo a caveira dos inimigos de ocasião. Isso acaba por fazer que os debates sobre o que as pessoas defendem de fato fiquem em segundo plano, substituídos por etiquetas simplistas e simplificadoras e por discursos populistas de todos os lados.

Outro alvo recente de tribalismo é o Google. Nosso aliado em várias frentes é inegável que o Google também tem várias atitudes que ferem a sua promessa de não ser “evil”. Apesar disso, há aqueles que fazem uma defesa quase incondicional do Google, assim como há aqueles que só fazem a caveira.

É preciso ver que, como qualquer organização grande o Google tem várias forças puxando para lados distintos. De um lado, um grande usuário de tecnologias livres, um grande desenvolvedor de softwares livres, com contribuições de vulto tanto em projetos novos como em projetos existentes, um garoto propaganda da liberdade e abertura na web, inclusive com enormes contribuições para esse objetivo. De outro lado, falta de sensibilidade no tratamento da privacidade de seus usuários, mudanças de posição inesperadas com relação à política de neutralidade da rede, discriminação de minorias, síndrome do “Not Invented Here”, com projetos novos sendo criados ao invés de colaborar com já existentes e por aí vai. É importante reconhecer e tratar cada uma dessas facetas de forma separada, sem fazer defesas ou caveiras incondicionalmente.

Veja também

Alguns outros posts interessantes sobre o assunto Oracle vs Google:

Google’s User-Agent sniffing makes one more victim

Remember when I said Epiphany worked out of the box with Youtube’s WebM? Well, Google has recently decided to deny us WebM, like it did before with Wave, the Pacman doodle, and who knows what else? \o/

Wouldn’t it be nice if Google practiced what they preach?

Update: so it looks like my message went through to the people who needed to see it, and they found a filtering error in the User Agent sniffing code that made it think Epiphany was a too old Safari – I’m told the change will land in Youtube soon, thanks for those paying attention, and working on this! User Agent sniffing keeps being a problem, of course, and there are other stuff to fix, so I will probably still push my patch to spoof the user agent to google services which are still mishandling Epiphany, but it’s good to see some progress being made!

Update2: I started shipping a patch to send the Chrome user agent string to google domains in the Debian package for WebKitGTK+, when the “enable-site-specific-quirks” setting is enabled (which is the case for Epiphany); I already found something we were missing out on =D Google Images seems to have been greatly improved, and now faking being Chrome we are also able to enjoy it:

Google Images improved