Eu estava morrendo de sono ontem e apaguei às 23h45. O Mario disse que ficou acordado até depois da 1h e que teve dificuldade pra dormir por causa do barulho... do meu ronco. Melhor ele dormir antes de mim hoje.
Acordei às 6h30 e tomamos café tranqüilamente. Pegamos um táxi e chegamos à PUCRS antes das 8h30, o que parecia ser bastante cedo. Mas, ao chegarmos, vimos filas já bem grandes pra pegar o material. Fiquei mais de 1h na fila que, obviamente, era a mais lenta de todas.
As palestras das 10h não eram interessantes e eu dei uma passeada pelo setor de exposições. Há muito mais stands que em 2005 e eu achei que ficou meio apertado pra circular. Há vários stands de governo. Os maiores são os da Sun e o da Globo.com (quem diria).
Às 11h fomos assistir à palestra do Shane Coughlan, coordenador do Freedom Task Force da FSF Europe. Ele é irlandês e fala muito bem. Achei que a palestra seria sobre as diferentes licenças de software livre, mas tratou mais sobre as ações da FSFE para aumentar a visibilidade e o nível de informação sobre software livre no setor governamental europeu. Ele deixou claro que a principal missão do FSFE é educar os governos e os demais setores da União Européia e mencionou que, apesar de o nível de entendimento ser cada vez maior, ainda é necessário reforçar constantemente que o free em free software significa liberdade e não gratuidade, e que o mero acesso ao código fonte não significa que o programa seja livre ou open source, mas que a sua licença precisa garantir as liberdades básicas de usar, estudar, melhorar e distribuir o programa.
Em relação às licenças, ele disse que é fundamental entender o que elas garantem e exigem em contrapartida. Mais que isso, é preciso entender o porquê de elas serem como são para poder entender o benefício do software livre.
Ocorreu em 11/04 passado o European Licensing and Legal Workshop em Amsterdam, congregando agentes de governo e pequenas e médias empresas européias e asiáticas para discutir questões sobre o licenciamento de software livre e sobre os benefícios e riscos de sua utilização. Segundo Shane, esse evento foi um ponto de inflexão na discussão desses assuntos pois, pela primeira vez, não houve um ambiente conflituoso e todos os envolvidos estavam seriamente engajados em debater assuntos complexos e relevantes.
Às 12h fui assistir à 12ª edição dos Sapos Piramidais do professor Pedro Rezende. O título desta edição foi '"Pontes" de PI. Para onde?'. Ele falou sobre os eventos mais relevantes do último ano que afetaram ou ainda podem vir a afetar a sustentabilidade do modelo de software livre no aspecto jurídico. Foi uma palestra muito corrida e ele, como sempre, não conseguiu terminar antes de esgotar o tempo, não tendo dado tempo pra nenhuma pergunta.
O que eu achei mais interessante foi o conceito de forum shifting que, segundo ele, tem sido utilizado pelas grandes corporações pra defender seus modelos de negócio através da radicalização da legislação de propriedade imaterial. (Ele se recusa a usar o termo "propriedade intelectual" pelos motivos apontados pelo Richard Stallman.) Essa técnica consiste em abandonar um fórum de discussão quando o encaminhamento de um assunto esteja indo contra os seus interesses e tentar levar a discussão para um outro fórum. Por exemplo, é o que ocorreu na Europa quando as corporações de radio-difusão abandonaram a discussão no WIPO sobre o Tratado de Broadcasting e criaram uma nova entidade (ACTA) para reposicionar a discussão em termos mais favoráveis aos seus interesses.... é tão bacana quanto assustador.
Às 13h assisti à palestra do Arnaldo Carvalho de Melo sobre as ferramentas de depuração de binários em que ele está trabalhando. É muito interessante. As ferramentas (pahole, pfunct, codiff, etc.) usam as informações de depuração do binário ELF, que são em formato DWARF, pra tentar otimizar o leiaute das estruturas de dados visando melhor aproveitar as codelines do cache do processador e otimizar a utilização de funções inline. Essas ferramentas parecem ter tido muito valor na otimização do kernel do Linux e de outros projetos, como o KDE.
Eu não sabia, mas hoje é possível gerar as informações de depuração em um arquivo separado do binário ELF. Algumas distribuições já estão disponibilizando pacotes paralelos com esta informação. Por exemplo, o pacote "firefox" conteria os binários stripped enquanto o pacote "firefox-debuginfo" conteria os arquivos com as informações de depuração.
O nome DWARF foi "forçado" pra casar com ELF e lembrar o LOTR. Nerdisse...
Às 15h assisti a uma palestra "Uma nova Lei Autoral para o Brasil: equilíbrio entre proteção e acesso ao conhecimento" que foi apresentada por dois professores da FGV, um advogado do IDEC e um funcionário do Ministério da Cultura. Os quatro usaram diversos argumentos para demonstrar que a Lei Autoral brasileira é excessivamente restritiva e que precisa de uma atualização urgente para adequá-la à realidade de hoje em que mecanismos para cópia e disseminação de informação são ubíquos. De acordo com Sergio Branco, da FGV, o Brasil é dos poucos países "desenvolvidos" em que a lei não admite em hipótese alguma a cópia integral de uma obra. Em outros países isso é permitido para, por exemplo, permitir que uma biblioteca digitalize algum livro que esteja sendo destruído pelas traças, ou que o proprietário de um LP possa digitalizá-lo. A legislação alemã, por exemplo, permite que livros que já tenham saído de catálogo há mais de dois anos sejam copiados integralmente.
A legislação autoral brasileira, segundo eles, acaba forçando uma relação de perde-perde, pois os consumidores não têm acesso a obras das quais os próprios autores já não possam mais explorar comercialmente.
O participante do IDEC argumentou que a lei autoral fere o princípio jurídico da proporcionalidade, que diz que as penas devem ser proporcionais à gravidade do delito. Segundo ele, no Brasil, o cidadão que baixa músicas da Internet pode ser preso ao passo que há vários crimes muito mais graves que são punidos no máximo com a aplicação de uma multa.
O último a falar foi Pedro Paranaguá, que eu não conhecia mas que me impressionou pela juventude e pela clareza de idéias. O trabalho dele na FGV pode ser acompanhado no site http://www.a2kbrasil.org.br/.
Às 17h assisti à apresentação sobre a migração do site da Dicas-L para o Drupal. Infelizmente o Rubens Queiroz não pode vir. Além disso, a rede do FISL estava fora e os palestrantes não puderam mostrar o novo site e suas funcionalidades. A palestra acabou abordando as funcionalidades que foram implementadas no site e serviu pra tirar algumas dúvidas de quem estava lá e já trabalhava com o Drupal. Não me impressionou muito.
Ah, durante a citação das funcionalidades, pelo que entendi, eles disseram que a parte de envio das mensagens na newsletter não foi alterada porque são quase 30 mil destinatários e o esquema atual era suficientemente robusto. Eu não sei se o Rubens ainda usa o bulk_mailer, mas há alguns anos ele estava sofrendo pra enviar mensagens uma a uma e eu sugeri pra ele esse programa.
Às 18h fui assistir ao painel Futuros Digitais do qual deveria participar o ministro Mangabeira Unger, mas ele acabou não podendo vir. De qualquer modo foi muito interessante. O primeiro a falar foi o Marcelo D'Elia Branco que enrolou um pouco mas deixou seu recado argumentando que não é o patamar tecnológico de um país que determina a qualidade de suas relações sociais. Ele citou como exemplos de países com patamares tecnológicos evoluídos mas dos quais ele não inveja a situação social os EUA, pela exacerbação do individualismo, Cingapura, pelo regime totalitário e um outro de que não me lembro. Não sei se concordo com todos os exemplos, mas creio que ele tenha razão na sua tese.
O segundo palestrante foi o advogado Ronaldo Lemos que muito me impressionou. Ele fez mestrado em Harvard e doutorado na USP. Segundo ele, é fundamental que o Brasil crie um marco regulatório civil que defina as responsabilidades dos provedores de acesso e de conteúdo. Os EUA já têm o seu desde 1999. Enquanto não tivermos essa legislação estaremos sugeitos às mais variadas interpretações de juízes que em sua maioria não têm o conhecimento técnico e a experiência social que lhes permita avaliar corretamente casos envolvendo abusos dos meios de comunicação digitais. Ele citou um exemplo de um juíz de São Paulo que, por não ter conseguido identificar o autor de alguma calúnia postada no site de um terceiro, condenou a Lan House que foi identificada como tendo sido o ponto de acesso do infrator. Outro absurdo é o projeto de lei do senador Azeredo que pretende regulamentar criminalmente a Internet sem que tenhamos sua regulamentação civil definindo as responsabilidades dos seus usuários.
Ronaldo Lemos ainda citou um paradoxo interessante. Segundo ele, o Brasil é um dos poucos (se não o único, não me lembro) países a garantir o direito à privacidade na própria Constituição. Apesar disso, não temos leis regulamentando esses direitos. Por conta disto é que só em 2007 foram concedidos mais de 409 mil grampos telefônicos no Brasil... ainda bem que nossa privacidade é garantida!
Depois do Ronaldo quem falou foi o Pedro Paranaguá, da FGV. Ele citou vários casos em que as diferenças entre os regimes jurídicos dos países causam problemas nas relações internacionais.
Às 19h tentei assistir à palestra sobre o módulo Text::Statistics mas o palestrante estava atrasado e eu acabei indo ver a palestra do Frederico Neves, do Registro.br, sobre DNSSEC, que foi muito boa. Ele começou explicando sucintamente o funcionamento do DNS tradicional pra mostrar todas as suas vulnerabilidades. Daí ele introduziu o DNSSEC mostrando quais daquelas vulnerabilidades são resolvidas por ele. A importância do DNSSEC é que há diversos mecanismos de segurança que se baseiam no DNS, como os sistemas anti-phishing e anti-spam SPF e DKIM. Segundo ele, o problema hoje é tão sério que a maioria dos grandes bancos paga a empresas para ficarem monitorando constantemente o cache dos nameservers dos grandes provedores de acesso pra ter certeza de que não foram "poluídos" com informação inválida.
O Registro.br já implantou DNSSEC nos domínios jus.br, eng.br, eti.br e gov.br. A implantação nos domínios com.br e org.br depende ainda da homologação do NSEC3. Ocorre que o DNSSEC original define um mecanismo para que o cliente possa garantir a ausência de um registro que se chama NSEC, mas esse mecanismo permite que qualquer um consiga listar todos os registros de um domínio, essencialmente deixando publicados todos os registros de um domínio, o que é ruim do ponto de vista da segurança. O NSEC3 é uma nova forma de implementar garantia de inexistência de registro mas que não padece deste problema. Segundo Frederico, dentro de poucos meses poderemos contar com o DNSSEC no com.br e no org.br.
Ele fez uma exortação para que todos pensem seriamente em adotar essa tecnologia pois, quando estiver adotada em larga escala, poderá resolver grande parte dos problemas que hoje enfrentamos na Internet em relação à falsa identidade de servidores.
No final ele citou o BIND e o NDS como servidores DNS que estão em vias de implementar do NSEC3 totalmente. Eu perguntei a ele sobre o PowerDNS e ele disse que este servidor não implementa toda a especificação do DNSSEC. Eu disse a ele que recentemente me mostraram esse artigo que mostra que o PowerDNS é muito mais escalável que o BIND mas ele não acreditou. Segundo ele, o Registro.br já fez diversos testes com o PowerDNS e não constatou esta diferença. Eu fiquei de lhe enviar o link pra ele poder comentar.
Ainda sobre o PowerDNS, ele disse que a maior vantagem dele é que ele pode utilizar um banco de dados para manter os registros, coisa que o BIND não permite. Os registros do BIND ficam em arquivos texto. Mas, o Registro.br implementou um mecanismo de manutenção dos registros, que ficam em banco de dados, e que são espalhados para várias instâncias do BIND. Esse mecanismo deverá ser divulgado como software livre dentro de uns seis meses.
A última palestra do dia foi sobre as novidades do Plone3. Ela foi apresentada por dois caras da empresa ThreePointsWeb, que se especializa na criação de sites, treinamento e consultoria em Plone. Os caras parecem ser bons, mas a palestra foi cansativa. Segundo eles, o Plone é o único CMS livre que é considerado na categoria ECM, ou Enterprise Content Management.
Cansados e famintos fomos todos nos empanturrar na churrascaria Na Brasa, que foi considerada como a melhor da cidade pela revista Veja. Foi uma brasa, mora? Tanto que ao sairmos de lá o Daniel deu a idéia incrível de virmos a pé pro hotel. Afinal, seriam apenas cinco quadras. Só não raciocinamos direito e não previmos que tipo de quadras seriam elas... Eu disse que o hotel fica ao lado da rodoviária? E vocês conhecem alguma rodoviária que fique num bairro "viável" pra se passear a noite? ... Nem eu. A cada esquina eu dava uma olhada pra todos os lados e contava pra ver se ainda estávamos todos juntos. Felizmente chegamos todos vivos. O único incidente digno de nota foi uma topada que o Mario deu na calçada e quase foi de nariz no chão. É que ele estava andando e "apreciando a fauna" do outro lado da avenida.... hehe.
Amanhã eu volto é de táxi.
push @FISL9, $first_day
FISL 9.0
Cá estou em Porto Alegre pra mais um FISL. Dessa vez ele será de novo no campus da PUCRS, assim como em 2005 quando estive aqui pela primeira vez. No ano passado foi na FIERGS, que é muito mais longe da cidade.
Vim com o Mario Teixeira e com mais dois colegas do CPqD: Daniel Pataca e Hugo Lavalle. Saímos de Viracopos às 15h15 e o vôo correu sem maiores incidentes e no horário, o que foi uma grata surpresa. Durante o embarque encontramos o Alexandre Oliva que estava vindo pra cá com sua esposa e sua filha. Comentei com o Hugo que vai ser difícil ele superar a palestra sobre Matrix que ele apresentou no ano passado, mas quem sabe?
O Oliva se lembrou de que eu o havia alertado sobre o certificado digital do seu blog que estava expirado e me disse que acabou regerando-o ontem. Mas eu estava meio fora de contexto e acabei me esquecendo de perguntar pra ele por que é que ele usa links https no feed RSS do blog? Se eles fossem http não haveria problema algum com certificado... vou ver se pergunto pra ele durante o evento.
Estamos todos no hotel Ritter, próximo à rodoviária e não muito longe da PUCRS. O hotel é melhor que aquele em que fiquei no ano passado. Tem até wireless no quarto, mas o primeiro que pegamos (523) ficava no final do corredor e o sinal era muito baixo. Fomos até a recepção depois do jantar pra perguntar se podíamos trocar. O recepcionista verificou e disse que ficaríamos com o quarto 309, mais próximo ao access point. Depois disso ele me encarou, baixou a voz e disse que o novo quarto é triplo mas que ele iria fazer pela mesma diária. Eu disse "que ótimo", agradeci e subimos pra fazer a mudança.
Chegando no novo quarto vimos que apesar de ter uma cama a mais ele era um pouco menor... e a vista dá pra uma parede cheia de janelas... pelo menos o sinal da rede é melhor e está dando pra usar.
Mas o pior é que eu estou usando um laptop do tempo do onça. É o mesmo que usei nos dois FISLs anteriores e acabo de me lembrar que no ano passado eu jurei que não o traria mais... esqueci. Ele é extremamente lento e o firefox já capotou algumas vezes sem razão aparente... Juro que é a última vez.
Combinamos de tomar café amanhã às 7h30 pra chegarmos cedo no evento e evitarmos as filas. Mal posso esperar...
Desafio regex
Meu amigo Rogério Zamboim me desafiou a resolver um problema com uma expressão regular. Desconfio que isso estava lhe causando insônia e ele queria transferi-la pra alguém... De qualquer modo, o desafio acabou sendo bem interessante.
O problema é validar um campo cujo conteúdo deve ser uma seqüência de dígitos, de 1 a 8, separados por barras invertidas, em ordem monotônica decrescente. Exemplificando, os seguintes valores são válidos para o campo:
8\7\6\5\4\3\2\1Já os seguintes valores são inválidos:
8
8\1
8\7\2
1
2\1
7\5\3
8\Confesso que de cara dei um tiro n'água e enviei-lhe a seguinte "solução", obviamente errada:
\7
8\6\
\2\1
6\\2
7\6\6\2
6\2\5
/^[1-8](?:\\[1-7])?(?:\\[1-6])?(?:\\[1-5])?(?:\\[1-4])?(?:\\[1-3])?(?:\\[1-2])?(?:\\1)?$/
O problema é que ela não garante que os dígitos são decrescentes. Por exemplo, a string "4\5" é aceita por ela.
Pensando melhor, ficou claro que expressões regulares "puras" não têm poder de expressão suficiente pra especificar a regra de validação de modo conciso. Isso porque elas não conseguem expressar a ordenação dos dígitos. Não se trata de um impossibilidade teórica, mas prática. Uma solução puramente regular envolveria a descrição explícita de todas as possibilidades, resultando numa expressão enorme. Algo como:
/^(?:[1-8]|[2-8]\\1|[3-8]\\2|...|[3-8]\\2\\1|[4-8]\\3\\1|.../
Convencido de que não seria possível uma solução direta, resolvi usar uma expressão regular apenas para garantir a forma básica, i.e., uma seqüência de dígitos separados por barras invertidas, e deixar a verificação da ordem para um código posterior. O melhor que consegui foi o seguinte:
sub validate_loop {
my ($string) = @_;
my $top = 9;
for my $val (split /\\/, $string) {
return 0 unless $val =~ /^[1-8]$/;
return 0 unless $top > $val;
$top = $val;
}
return 1;
}
Esta função recebe uma string com o valor do campo. A variável $top contém sempre o valor máximo que o próximo dígito pode conter mais um, e começa com 9, já que o primeiro dígito pode estar entre 1 e 8. O loop quebra a string nas barras invertidas e verifica se o que há entre elas são dígitos entre 1 e 8 e se eles são menores que $top, atribuindo a $top o valor do próximo dígito.
É razoável, mas não satisfatório. Usa duas expressões regulares e faz muitos testes separados... Não estava muito bom.
Fiquei matutando uns dois dias sobre isso e pensando se dentre as várias extensões que Perl oferece além dos operadores básicos de expressões regulares não haveria algum que me permitisse construir uma solução mais sucinta. Relendo a documentação deparei-me com o operador "(?{code})", que permite inserir código no meio de uma expressão regular. Hmmm... parecia útil, mas eu nunca havia usado algo assim.
Depois de algumas tentativas frustradas acabei bolando a seguinte solução:
sub validate_re {
my ($string) = @_;
our ($dec, $last) = (1);
return ($string =~ /^([1-8])(?{$last=$^N})(?:\\([1-8])(?{$dec=0 if $last <= $^N; $last=$^N}))*$/) && $dec;
}
A expressão regular ficou maior por causa do código embutido dentro dela. Remova mentalmente os operadores (?{...}) e você verá que ela está simplesmente verificando se a string consiste em uma seqüência de dígitos separados por barras invertidas.
No primeiro operador de código, a variável $last recebe o valor do primeiro dígito da string. (A variável implícita $^N lembra o valor da última captura por parêntesis.) No segundo operador, usamos seu valor para verificar se o próximo dígito é menor que o anterior e atribuímos o novo dígito a ela.
A variável $dec mantém o estado da verificação de ordem. Ela começa como 1 e recebe 0 caso o segundo operador de código detecte que há algum dígito fora de ordem monotônica decrescente.
Eu demorei um bom tempo pra chegar à conclusão de que essas duas variáveis tinham que ser globais (declaradas com "our"). Se elas são locais (declaradas com "my") não funciona. A documentação não é clara a esse respeito e eu desconfio que seja um bug do próprio interpretador Perl, mas não tenho certeza.
A função acaba retornando a conjunção da avaliação da expressão regular com o valor final de $dec.
Pronto, agora eu posso dormir em paz.
(Não é verdade... a (des)formatação dos scripts acima está me deixando nervoso. Vou tentar resolver a questão usando o SyntaxHighlighter, mas não hoje.)
Passei a usar o SyntaxHighlighter, mas como ele ainda não tem suporte oficial pra Perl não ficou ainda muito bonito. Tem gente trabalhando nisso...
Pai, você tem que ser forte
Sou fã do Nerdcast, um podcast muito divertido, feito por uns nerds cariocas. Eles falam um pouco de tudo o que interessa: filmes, livros, história, jogos, etc.
O episódio 101, sobre Traumas de Infância, foi um dos mais engraçados. Melhor ainda foi uma carta de um ouvinte, lida no episódio 102, na qual ele contou um trauma da sua infância causado pelo seu pai. Eu não vou contá-lo aqui pra não estragar pra vocês. Baixem o episódio e ouçam. A leitura das cartas é logo no início do episódio.
Acontece que eu achei a história tão engraçada que fui logo contar pro meu filho. Depois de contá-la eu fiz questão de que ele a escutasse o iPod. Na manhã seguinte eu fiz a mesma coisa com a minha esposa, que não achou tanta graça. Tenho uma teoria de que as mulheres têm uma deficiência no seu senso de humor, mas isso não vem ao caso agora.
Eu estava tão empolgado com a graça da história que ficava repetindo uma frase que o pai do rapaz teria dito pra ele usando uma voz bem grave:
- Filho, você tem que ser forte. Sua mãe vai virar peixe.
Eu repetia a frase e dava risada.
Naquela manhã era minha vez de levá-los pra escola, dando carona pra um coleguinha do meu filho. É óbvio que eu não podia perder a chance de contar pra mais um e recomecei a repetir a frase no carro. Foram várias vezes.
Chegando na escola todos saímos do carro. Eu encarei meu filho mais uma vez e repeti:
- Filho, você tem que ser forte. Sua mãe vai virar peixe.
Ele me encarou e falou o seguinte engrossando a voz:
- Pai, você tem que ser forte. Essa piada já perdeu a graça.
Sorvetou!
Vocês sabem o quão difícil é conseguir a atenção de uma criança de cinco anos quando ela está vendo TV, não? É pior ainda quando além dos olhos ela tem os ouvidos ocupados com o telefone.
Eu disse e repeti algumas vezes:
- Troca o telefone de lado.
Mas não adiantou. Foi só quando eu elevei a voz acima do volume da TV que ela se dignou a olhar pra mim. Eu aproveitei a chance e repeti mais uma vez:
- Troca o telefone de lado!
Ela acenou com a cabeça, indicando que havia entendido e pediu pra prima:
- Espera aí, espera um pouco...
Daí ela virou o telefone 180º e colou as costas dele ao mesmo ouvido dizendo:
- Pode falar, prima!
Enquanto eu me dobrava de rir a mãe ainda conseguiu dizer:
- Sorvetou!