Month: March 2009

O que médicos deviam aprender com as bibliotecas

Posted by – 30/03/2009

Bibliotecas são muito mais simples do que os serviços de emergência médica… no entanto, as idéias mais simples são as que costumam ser mais efetivas. Isso é tão verdade que é base de um conceito bastante difundido cientificamente que se chama Navalha de Occam. Observando o caos que o atendimento de emergência do sistema de saúde brasileiro se tornou (do ponto de vista de quem está dentro dele), cada vez mais admiro soluções simples como as bibliotecas.

As bibliotecas são sistemas de empréstimo de livros, certo? Uma boa parte cobra uma mensalidade, ou anualidade, para manter o funcionamento: em geral uma quantia baixa, da qual ninguém reclama. No entanto, apenas emprestam o livro por um limitado número de dias (afinal de contas, o número de exemplares é igualmente limitado). Se você quiser ficar com o livro o semestre inteiro, que compre uma edição, certo? O que acontece com os que excedem o número de dias do empréstimo? Em geral, uma multa (pecuniária) é aplicada. Ou seja, as bibliotecas aplicam de forma exemplar o princípio econômico do incentivo (nesse caso o oposto disso): punem quem foge das regras. O atendimento de emergência não.

Em primeiro lugar, o que é uma emergência? É claro que, para quem está com um problema de saúde, seu caso é sempre uma emergência… Mas alguém que está com dor nas costas por todo o último mês seguramente seria melhor atendido no posto de saúde, no ambulatório, ou no consultório do seu médico… não tem nenhuma justificativa para procurar o serviço de emergência às 3 horas da manhã e tomar o lugar de, quem sabe, alguém que acabou de sofrer um acidente de motocicleta. Sim, é muito bom termos um serviço médico que funciona 24 horas, mas como coibir abusos (e, em se tratando de seres humanos, podemos garantir que abusos acontecem sempre)? Simples, as bibliotecas têm a solução: multa para o sujeito!

Você acha radical? Isso é porque você nunca precisou de uma emergência para um caso realmente de emergência e teve o seu atendimento postergado porque ela estava lotada. Ou talvez porque você nunca atendeu em uma emergência nessas condições. As autoridades italianas, no entanto, não pensam assim… pensam exatamente como os bibliotecários:

O cartaz acima estava na porta de entrada de uma emergência italiana. Essa foto foi tirada por mim, quando estive lá em meados do ano passado. Basicamente ele diz o seguinte: Todos serão atendidos, mas se o médico que lhe prestar atendimento decidir que seu caso não era uma emergência, ou que seria melhor atendido pelo serviço regular de saúde, você receberá o “Código Branco”, e deve pagar € 25! Em seguida ele lista as exceções (sabiamente incluindo as crianças, por exemplo, em quem decidir se o caso é uma emergência é mais difícil) e os locais mais próximos pertencentes ao sistema regular de saúde.

Claro! No Brasil existem diversas outras questões. Estar com uma dor nas costas há um mês e somente conseguir uma consulta no posto de saúde para daqui a mais um mês é uma vergonha, com certeza! Mas ser atendido em uma emergência não é a solução! Existem diversas soluções, entre elas efetivamente cancelar as consultas que já foram realizadas ou que ficarão vagas (Sim. Muita gente marca o atendimento e ou procura outro serviço ou simplesmente não aparece) – que podem chegar a mais da metade das consultas! No entanto essa é uma outra história… Por enquanto, aliviar as emergências, isso sim, é uma emergência.

FISL10 Subscriptions and Call for Papers Opened

Posted by – 25/03/2009

One of the largest FLOSS events in the world, FISL (International Free Software Forum – in english) subscriptions are already being accepted. They also already called for papers! They’re calling this year’s a “special edition” since they expect to reach 10-thousand attendees (last year exceeded 7-thousand)… this is pretty big if you ask me.

As usual, it will take place at Porto Alegre, and is scheduled from June 24th to 27th. I think we can expect the usual activities (Programming Arena, Interesting Workshops, FLOSS shows, Great Speakers, Brazilian Government), but I think the “special edition” is not just due to the number of attendees. What surprises are being cooked by the Organization Committee is just something we’ll have to wait and see 🙂

See you there!

PubSub with XMPP4R-Simple

Posted by – 18/03/2009

As I already told you, I am using XMPP4R-Simple in an internal project. For this, I’d have to add PubSub capabilities to it, and I did when I decided to get serious with git. Today I committed a version with integration of various patches by other forks I found on GitHub plus a lot of improvements on PubSub functions.

With this version it’s simple to use PubSub like this:

require 'xmpp4r-simple'
 
# Simple function just to parse an event
require 'time'
def parse_event(event)
  item = event.children[0]
  node = item.node
  time = nil; item.each_element("//published") { |e| time = Time.parse(e.text) }
  text = nil; item.each_element("//body") { |e| text = e.text }
  return { :item => item, :node => node, :time => time, :text => text }
end
 
# Create the clients
im1 = Jabber::Simple.new "im1@example.com", "password"
im2 = Jabber::Simple.new "im2@example.com", "password"
 
# im1 creates a node
im1.create_node("/some/node")
 
# im2 subscribe to that node
im2.pubsubscribe_to("/some/node")
 
# We'll start a simple thread to get the events coming from that node to im2
Thread.new { loop {
  sleep 1 while ! im2.received_events?
  im2.received_events { |event|
    h = parse_event(event)
    puts ">>> Got an event from node #{h[:node]} published at #{h[:time]} with text #{h[:text]}"
  }
}}
 
# Now im1 just publishes anything to that node.
im1.publish_atom_item("/some/node", "This is my node", "This is the content of my node")
 
# The thread should capture the event and run puts on the hash from parsing.

PubSub is great, isn’t it?

É tempo de fisl de novo!

Posted by – 14/03/2009

É, já começou. Em breve teremos outra edição do Fórum Internacional Software Livre. Muita coisa aconteceu desde que começou (e desde que me integrei ao comitê organizador)… o evento cresceu e amadureceu rapidamente, tornando-se, talvez, o mais importante no cenário nacional e um dos mais importantes no cenário internacional.

A edição desse ano (de número 10) está sendo chamada de “edição especial”. Claro que sei de muita coisa dos bastidores (e muita coisa que será surpresa para os participantes, por isso não posso divulgar), mas o “especial” dessa edição, mais do que nunca, vai ser construído pela comunidade. Já vi que canais como Facebook e Twitter além do tradicional Orkut estão ativos para o evento e, sabendo que Marcelo Branco está a frente esse ano, já deve ser suficiente para inferir o sucesso da edição.

Já vi o nascimento e a morte de diversos eventos de software livre… Alguns grandes como o FISL, ameaçando tirar-lhe a posição de destaque que conquistou. Mas durante todo o tempo em que estive envolvido, o FISL foi ficando… Todos os anos alguém me pergunta o que eu acho q mantém o FISL vivo, mesmo diante das inúmeras adversidades por que todos os eventos passaram.

Um ingrediente para o sucesso do FISL é a rotatividade. No comitê organizador, pessoas vem e vão, sempre encontrando terreno fértil para as suas melhores idéias, provando que o importante é a renovação: a cada ano o FISL se reinventa. Muitas vezes, paga o preço da inovação: quando decidimos que o sistema de inscrição de um fórum de software livre devia ser, igualmente, software livre não previmos que um erro de programação poderia gerar uma multidão ansiosa diante dos guichês de chegada. Sim, o erro foi corrigido desde então, mas tivemos de ouvir por mais de uma vez “se tivessem usado o software não livre X, nada disso teria acontecido”… Talvez não, mas os princípios do FISL sempre foram mais importantes e sempre deram força para prosseguir.

No entanto, cada vez mais estou convencido que o modelo do FISL é o seu coração, e é o motivo que o mantém forte diante das adversidades: não é uma feira, é um fórum… um lugar aberto para que a comunidade se encontre e, de quebra, assista a algumas palestras sobre algo de seu interesse.

Na Roma antiga, o fórum era o lugar mais importante, onde todos os cidadãos de encontravam. Na Grécia, o ágora (equivalente ao fórum) era o centro político e social, sede das decisões que eram emanadas da reunião dos cidadãos, do coletivo. Seria demagógico dizer que pensei no FISL quando estive nesses dois locais, mas retrospectivamente falando, as semelhanças não podem ser ignoradas. Não é a toa que a principal e maior área da planta do FISL é dedicada aos coletivos de software livre, às comunidades e aos grupos de usuários; não é a toa que as palestras são propostas (e avaliadas) pela comunidade, e que apenas um punhado delas é reservada aos patrocinadores. É tão fácil ver dois hackers combinando um encontro no FISL quanto é fácil imaginar dois cidadãos romanos combinando um encontro em frente ao templo de Pollux e Castor.

Enfim, um grande evento é construído por grandes pessoas. Não estou aqui me referindo ao comitê organizador… Estou me referindo a todos os participantes do FISL: você faz o fórum…

Nos vemos lá!

NTP-Pool: aumentando a participação brasileira

Posted by – 12/03/2009

Você conhece o NTP Pool? Provavelmente não, mas se você estiver usando uma das distribuições de GNU/Linux mais recentes, incluindo as maiores, e estiver atualizando o relógio pela rede, provavelmente está usando o NTP Pool.

Manter o relógio certo é um problema bastante comum e crucial para a computação atual. Muita coisa depende de sincronia, e de manter dados fidedignos quanto ao momento exato em que determinada ação ocorreu. O que parece um desafio, na realidade tem uma solução muito simples: Network Time Protocol, um protocolo padrão da Internet que mantém o relógio do computador local sincronizado com o de um computador remoto.

Simples sim, mas com um custo: existem relativamente poucos computadores ligados a fontes de sincronia temporal fidedignas (como GPS, ou relógios atômicos). Logo, o acesso a um desses computadores acabava sendo um privilégio de poucos. O NTP também tem resposta a isso… uma vez que um computador obtenha a sincronia com um desses servidores centrais (ou de camada 1 – stratum 1 – na terminologia do NTP) pode exportar essa mesma sincronia uma camada abaixo (efetivamente tornando-se stratum 2), num sistema que é escalável exponencialmente, sem perda significativa da precisão.

No entanto, um problema ainda ficava em aberto: que servidor NTP usar? Aí é que entra o NTP Pool, um conglomerado de servidores públicos, com banda doada pelos seus mantenedores, integrando um circuito cada vez maior de sincronia temporal, monitorados para garantir a precisão e a disponibilidade.

Sou usuário de NTP há muito tempo, tendo mantido um servidor NTP para uso interno em cada rede que monto. Esse servidor interno aponta sempre para o NTP Pool. Recentemente me interessei por saber mais sobre o NTP Pool, e fiquei bastante surpreso ao saber que dos mais de 1700 servidores de NTP que integram o NTP Pool, menos de 20 estão na América do Sul (e desses, apenas 13 no Brasil!). É impressionante! Eu mesmo mantenho um servidor NTP no Pool (ntp.nardol.org), no entanto, como ele se localiza fisicamente nos EUA, serve para aumentar as estatísticas de lá.

Vamos aumentar a participação brasileira? Se você possui um servidor no Brasil pode instalar facilmente o ntp server. Instruções mais detalhadas podem ser encontradas no próprio site do NTP Pool. O consumo de banda ocorre via protocolo UDP, e é ridículo. Para garantir que esse consumo nunca exceda a capacidade do meu servidor, por exemplo, uso simples regras de IPTables, como as abaixo:

bash$ iptables-save
(...)
-A INPUT -p udp -m udp --dport 123 -j ntp
(...)
-A ntp -m limit --limit 10/sec --limit-burst 6 -j ACCEPT
-A ntp -j LOG --log-prefix "ntp flood: " --log-level 7
-A ntp -j DROP
(...)
bash$

No entanto veja que as regras de limitação de conexões no meu servidor nunca foram atingidas (pelo menos desde o último reboot 🙂 ):

bash$ uptime
 15:20:00 up 23 days, 17:32,  1 user,  load average: 0.04, 0.12, 0.18
bash$ iptables -vnL
(...)
Chain ntp (1 references)
 pkts bytes target     prot opt in     out     source               destination
 233K   18M ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0         limit: avg 10/sec burst 6
    0     0 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0         LOG flags 0 level 7 prefix `ntp flood: '
    0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0
(...)
bash$

ntp_pool

Happy hacking!

Maceio – took some days off

Posted by – 09/03/2009

I finally took some days off. Those are most needed, since I spent carnival on call at the hospital (argh!)… So Brenda and I decided to spend those days at Maceio, capital of Alagoas state, and a very anticipated vacation. They have a lot of sun and beautiful beaches, enough to fill our week (and get some tan also).

This picture was taken at “Praia do Gunga” (Gunga’s Beach), a charming place with a calm shore, almost like a pool, protected by natural reefs. As you can see, I am having a bad time right now 🙂

Food is excellent, so are the people. But there are some inconveniences (as always). Beaches around downtown are not proper for bathing… They’re fighting a long fight against pollution (and loosing, if you ask me)… Also, Alagoas is a poor state… Our guide said alphabetization covers less than 70% of the people…

Also, network connection is expensive in hotels. Ours charges BRL 1,00 every 5 minutes! And the speed is not the best. They have one of those systems requiring a web authentication before you go. I’ve seem people complaining about this kind of system in Planet Debian before (reference please!) and suggesting Tunneling over DNS as a “fix”. I’ve noticed it would work in our hotel, but I decided to try another approach I’ve already written about: just a quick tunnel over an ssh connection.

I know I told you I needed an authentication before, but that is for the first connection! Yes, once the connection is established, I could just log out (thus stop the charging). No new connections could be made, but the tunnel was already up, so just put everything through the tunnel and I should be fine right? Wrong. I got bitten by a drawback of the technique already pointed in a comment when I first wrote about it: in an error-prone network, TCP-in-TCP slowly dies of attempting to correct itself over and over… and I was using a poorly connected wi-fi (loosing almost 30% of the packets!).

So, I was left with the set-up of a not foreseen tunnel using DNS as the only option… This would take time (and money)… So I decided for a simpler approach: SOCKS proxy. Yes, everything I would do could be done through a SOCKS! So a simple:

bash$ ssh -D 8888 my.remote.location

was all that I needed. That and setting my Firefox to use a SOCKS proxy on localhost:8888 and all went fine. I paid to set-up the tunnel then, once established, I logged out and kept using my tunnel all this time. Simple and effective, and I got some time left to blog about it. 🙂