Saturday, September 29, 2007

Volta da PyConBrasil, Sandboard e Calabresa

Bom, eu finalmente reservei um tempinho para fazer um novo post e contar algumas das coisas que aconteceram durante o mês de Setembro, que para variar, passou mais rápido do que eu gostaria... :-/

A PyConBrasil, que reúne a fauna pythônica nacional (e agora também parte da internacional, com as presenças de Nate Aune do mundo Plone e Kenneth Rohde Christiansen do INdT com seu poliglotismo em 13 idiomas!), desse ano foi ótima! Quem não pode ir realmente perdeu um grande evento. A palestra inicial, O que Python faz quando você não está olhando, do Pedro Werneck (o que por si só já seria uma razão para não perdê-la), apresentou uma visão geral bem interessante dos aspectos técnicos da linguagem. Altamente recomendada.

Inicialmente estava programado para o Roberto Allende falar sobre o Plone 3, inclusive o Fábio Rizzo chegou a abrir mão do seu tempo, em função da grade apertada, mas o Roberto não pode vir e eu acabei tendo que sacrificar a minha palestra sobre o SQLAlchemy para dar uma pouco mais de atenção às novidades do Plone 3. Pena não termos tido tempo para perguntas, mas fique a vontade para comentar por aqui... :-)

O Grok também esteve bem representado no evento, contando com a participação dos ilustres Luciano Ramalho e Dirceu Tiegs. Um dos eventos noturnos, que estavam abertos para todos os estudantes da SOCIESC, foi justamente um comparativo entre os frameworks para desenvolvimento web. Eu fui incumbido de representar o Plone, o Ramalho o Grok e o Andrews Medina ficou com o Django. Cada um de nós falou um pouco de como chegou até o seu framework, apresentando as principais vantagens e as áreas de aplicação. Posso garantir que pelo menos nós três nos divertimos bastante naquele palco... :-D

Também tivemos a participação de outras figurinhas já conhecidas da comunidade Python, mas só para citar alguns dos feras presentes:

É obvio que eu vou esquecer de falar de muita gente, mas não dá para deixar de citar ainda o João Sebastião de Oliveira Bueno Calligaris, o João Chaves Júnior, o Júlio de Lima do Rêgo Monteiro, o Juracy Pereira de Santana Filho, o Leonardo Rochael Almeida, o Rodrigo Bernardo Pimentel, o Rudá Porto Filgueiras, o Sérgio Oliveira Campos, a Sulamita Garcia e os demais palestrantes do evento.

Em uma das noites eu apresentei a já consagrada palestra sobre Empreendedorismo, dessa vez de uma forma um pouco mais descontraída, praticamente cômica. O Andrews, prontamente, já adicionou um 'Climber' ao meu nome, afinal a vida é uma caixinha de surpresas... :-D

A cada edição da PyConBrasil acabamos conhecendo gente nova. Em 2005, na primeira edição em Campinas, a grande revelação foi o Frederico Gonzalez Colombo Arnoldi, ou simplesmente Fred, com o seu impressionante MPAlign, um programa de edição de seqüências e alinhamentos moleculares. No ano passado, em Brasília, tivemos o Sérgio de Oliveira Campos com o PyVersionWeb e o Ulysses Almeida com o sistema de monitoramento de cargas. Nesta terceira edição, eu diria que os maiores destaques foram o Flávio Codeço Coelho, apresentando Python na Ciência e o seu livro na Lulu.com, a Tatiana Al-Chueyr Pereira Martins falando a respeito do InVesalius, um software para reconstrução 3D de imagens médicas e o Roberto Antonio Ferreira De Almeida com o impronunciável e criativo Shrubbery, uma linguagem de templates.

Nesse ano deu trabalho para o Fred apresentar a sua palestra sobre o ensino de estatística com Python. Primeiro o seu notebook se recusou a exibir qualquer coisa no projetor da SOCIESC, em seguida tivemos um trabalhão para instalar todas as bibliotecas necessárias no meu notebook. A estratégia foi simples, executávamos os programas dos exemplos dele e quando dava algum erro, nós instalávamos os pacotes que faltavam. Tudo ia muito bem até chegarmos no python-rpy... que estava (e ainda esta!) com problemas no Ubuntu. Tentamos renomear a biblioteca _rpy2050.so para _rpy2051.so, na esperança da assinatura dos métodos não ter mudado, mas não funcionou. Depois tentamos recompilar o pacote, porém os mais de 300MB de download com as dependências inviabilizaram o processo. Por fim, a solução foi catar o arquivo _rpy2051.so em um pacote pré-compilado do Fedora! Quando tudo parecia bem, foi o meu notebook que se recusava a levantar o X! Com a ajuda do notebook do Andrews e o apoio do Senra, descobri que uma das atualizações do Gutsy naquela manhã tinha mudado as permissões do diretório /tmp, causando toda a confusão. Depois disso foi só alegria e transcorreu tudo bem com a palestra do Fred! :-)

Acabado o evento, combinamos de levar o Nate Aune até a ilha de Florianópolis, para ele conhecer um pouco do litoral brasileiro, afinal, três dias consecutivos de chuva em Joinville estavam distorcendo a imagem de sol, calor e praia, típica dos estrangeiros, sobre o Brasil... :-P

Na viagem com destino a Canasvieiras, acabamos passando por Camboriu (onde andamos no bondinho) e diversas outras praias, inclusive em Joaquina, onde deu tempo para brincar de sandboard! Confira o desempenho de um surfista de primeira viagem:

Mundando um pouco de assunto, no feriado estadual de 20 de Setembro (data máxima do Gaúcho), minha esposa levou as meninas para visitar os avós em Cachoeirinha e eu acabei ficando com o meu cunhado em casa. Como eu não pude contar com o repertório culinário aprimorado da minha esposa e muito menos com as opções locais, acabei tendo que me virar...

Santo Google foi a solução! Com o Google Base é possível encontrar um repositório completo, contendo eventos, atividades, hotéis, recomendações, produtos, serviços, entre uma série de diversos outros itens e, é claro, receitas! Eu acabei fazendo um mix entre diferentes receitas, aproveitando o que eu tinha em casa: massa (Farfalle, a do tipo gravatinha, da Barilla, claro!), lingüiça calabresa defumada, requeijão cremoso e queijo parmesão ralado. Modéstia a parte, ficou muito mais saboroso do que eu poderia imaginar... ;-)

Bom, ainda falta falar sobre outras coisas, mas deixo para um novo post durante essa semana...

Read more...

Tuesday, August 28, 2007

Rumo a Joinville: APyB & PyConBrasil

O mês de agosto passou tão rápido que quase não deu tempo de falar sobre alguma coisa por aqui... :-/

De qualquer forma, vou citar alguns acontecimentos das últimas semanas e outros que ainda estão por vir.

Primeiro uma rápida retrospectiva desse veloz Agosto:

  • A relação oficial das palestras da PloneConf foi anunciada.
  • O Plone 3 foi lançado em grande estilo, com direito a virar destaque no Digg.com.
  • Eu continuo progredindo no Rankk.org, aprendi meia dúzia de novas linguagens de programação e um sem número de técnicas de criptografia; agora rumo ao TOP3... ;-)
  • Aprendi a usar e a amar o zc.buildout, agora não saio mais de casa sem ele! ;-)
  • Atualizei meu Ubuntu Feisty para o Gutsy, sim eu adoro bleding-edge e já estava ficando deprimido com a falta de upgrades diários...

Agora o que está por vir:

  • Uma jornada de 568Km partindo às 7h da manhã dessa quarta, de Garibaldi com destino a Joinville, com direito a GPS, conexão EDGE/GPRS e carregador automotivo de bateria de notebook... ;-)
  • A Assembléia anual da Associação Python Brasil, às 19h desse mesmo dia, para a definição da próxima gestão.
  • A Conferência Brasileira de Python (a.k.a. PyConBrasil), que acontece de quinta à sábado; considerada como o evento nacional imperdível do ano! Gerenciar o processo de inscrição deu um trabalho do cão, mas acredito que vai valer cada segundo do tempo usado!
  • Algumas noites de muita descontração na presença dos amigos Pythonistas pelas ruas e points de Joinville.
  • Algumas horas em claro durante as madrugadas tentando chegar a Geb no Rankk.org e colocando o papo em dia com o grande amigo Rodrigo Dias Arruda Senra.

Nos vemos em Joinville, até breve! :-)

Read more...

Tuesday, July 31, 2007

Documentação e rankk.org

Correria do cão, sumiço temporário, deadline de projetos se aproximando, mas o mundo não pára... então antes de continuar com dicas sobre o Plone 3.0 (que entrou em rc2 na sexta passada), vou falar sobre uma área importante do projeto: documentação.

Também aproveito a oportunidade para divulgar um novo site (novo para mim!) de desafios, num estilo semelhante ao já tradicional PythonChallenge, o Rankk!

Geralmente os desenvolvedores de software livre fazem aquilo que eles gostam, ou seja, programar, escrever código. Alguns abençoados vão mais longe e escrevem os testes antes do código. Mas são poucos os que se preocupam realmente com documentação... (só para constar: eu não sou um deles...)

Isso praticamente não gera problemas quando o projeto é pequeno, afinal basta ler o código... mas na medida em que o projeto vai ficando maior, mais complexo, é que os primeiros sinais ficam evidentes.

Agora imagine o caso de um projeto cujo núcleo possui cerca de 240 mil linhas de código, segundo as métricas do Ohloh (a propósito, o que você está esperando para criar a sua conta lá e relacionar os seus projetos?). Isso desconsiderando o resto da pilha, composta pelo Zope, CMF e dezenas de aplicações adicionais que estão disponíveis para uso através do Collective...

Durante muito tempo o Plone foi criticado exatamente pela sua falta de documentação. Com o tempo, num esforço conjunto de diversos desenvolvedores, capitaneados pelo Alexander Limi, foi desenvolvido o Plone Help Center (PHC) para ser utilizado na resolução dessa questão.

O PHC entou em operação no final de 2004 e rapidamente se tornou um grande sucesso. A quantidade de documentação do Plone cresceu em um ritmo quase que exponencial, abrangendo diversos tipos de audiências, desde aqueles que apenas procuram saber o que significa algo, passando por informações de como usar e até mesmo tutoriais passo-a-passo e completos manuais de referência.

Porém, como tudo o que existe em excesso, a área de documentação começou a apresentar problemas. Os usuários começaram a reclamar da enorme quantidade de documentação que estava sendo gerada! Isso acabava atrapalhando na hora de decidir o que era preciso ler a respeito de determinado assunto.

No mês passado, pela primeira vez na história do Plone, tivemos um sprint focado na questão da documentação (e também e-commerce): DocComm. Ele ocorreu nas dependências do Google, em Montain View, na California. A repercussão foi ótima, muitos posts a respeito das atividades que estavam sendo realizadas, entre elas a revisão da documentação existente e a classificação dela, através da técnica de card sorting , onde uma parede inteira acabou sendo preenchida... :-D

Com o sucesso obtido no sprint, onde o próprio PHC também foi atualizado, hoje podemos dizer que o Plone tem uma área de documentação da qual possa se orgulhar! Poucos projetos estão nessa condição, mas vale a pena citar também o SQLAlchemy pela freqüência de atualização e clareza da sua documentação.

Bom, mudando um pouco de assunto, ninguém é de ferro e como eu disse durante algumas entrevistas depois da Arena de Programação, nada melhor do que alguns desafios para desestressar depois de um dia (ou uma noite, ou de vários dias...) de trabalho! A propósito, atualizando o recorde de uptime: 44 horas (das 11:00 de domingo até às 07:00 de terça-feira)... ;-)

Uma das coisas mais interessantes do Rankk, fora a lenga-lenga sobre o Egito, pirâmides e tal..., é que ele não se resume a desafios envolvendo apenas uma única linguagem, ou foca diretamente em programação, e ainda nesse sentido, ele se quer está diretamente ligado a computação! Ter uma base sólida em matemática e lógica é muito mais importantes neste caso.

Obviamente existem problemas específicos de programação, ou melhor, de computação. Prepare seu repertório, pois pelo caminho você vai encarar Javascript, PHP, Perl, Prolog, SQL, Java, Lisp, Brainfuck, Python, código morse e mais alguma coisa que eu ainda não consegui identificar... :-D

Apesar de tudo, é diversão na certa, eu aguarantcho! ;-)

Atualizações:

Read more...

Wednesday, July 11, 2007

Linguagens de Programação: Suckage Ratio

Hoje na lista da maratona, onde (ex-)participantes das maratonas de programação da ACM se encontram, surgiu mais uma daquelas threads sobre qual é a melhor linguagem...

Esse é o tipo de discussão que nunca leva a lugar nenhum, mas hoje tive uma idéia que pode ser, no mínimo, bem humorada... :-)

Geralmente quando se compara as linguagens de programação, comparamos uma em relação a outra. Isso sempre acaba gerando grandes distorções ou, no melhor caso, uma certa tendência para um dos lados...

Para evitar esse tipo de coisa, vamos 'comparar' uma linguagem com ela mesma. Meu critério foi bem simples: uma busca no Google, contendo o nome da linguagem de programação e mais as palavras 'sucks' ou 'rocks'. A linguagem que tiver o menor percentual de 'sucks', proporcional ou número de 'rocks', tem o melhor desempenho.

O ideal seria ficar o mais próximo possível de 0. Com 0,5, para cada pessoa falando mal da linguagem, temos duas falando bem. Qualquer coisa acima de 1 significa que existe mais gente falando mal do que bem, e assim vai...

Bem, vamos aos resultados então, considerando as 10 primeiras colocadas no índice TIOBE, pela ordem:

Linguagem Sucks Rocks Suckage Ratio
Java 26300 11500 2,286956522
C 9150 24600 0,37195122
C++ 783 67 11,686567164
Visual Basic 4570 591 7,732656514
PHP 24900 956 26,046025105
Perl 931 1620 0,574691358
C# 844 1390 0,607194245
Python 562 13700 0,041021898
Javascript 1239 773 1,602846054
Ruby 534 17900 0,029832402

Analisando-se rapidamente o Suckage Ratio™ das linguagens, podemos fazer as seguintes observações:

  • Python & Ruby caíram mesmo no gosto dos programadores, impressionante!
  • PHP também caiu no gosto, mas pelo outro lado... :-P
  • C++ é muito mais mal amado do que eu imaginava
  • Java não é tão ruim, pelo menos quando comparado ao Visual Basic! :-D
  • C ainda possui uma popularidade realmente incrível
  • C# pode ter futuro, veremos o que nos reserva os próximos capítulos
  • Javascript ainda desperta o ódio dos programadores web
  • Perl continua forte na sua comunidade de masoquistas visuais... :-)

Atualizações:

  • Antes de publicar esse post, fui acrescentar algumas referências e acabei encontrado um serviço dedicado apenas para isso, o sucks/rocks! Os resultados foram um pouco diferentes (C++, por exemplo), já que eles consideram diversas expressões, mas no geral parecidos...
  • Apenas esclarecendo: a relevância/disseminação/popularidade/número de hits ou qualquer outro fator não são levados em conta. O Suckage Ratio leva em consideração apenas quem falou bem ou mal da linguagem, através de sucks/rocks. A proporcionalidade disso garante que o resultado será o mais justo o possível, independente dos demais fatores.

Read more...

Tuesday, July 10, 2007

Content Providers e Viewlets no Plone 3

Este é o início de uma série de pequenos artigos introdutórios sobre as novidades da próxima versão do Plone. Para deixar claro, a intenção não é detalhar o funcionamento, nem explorar todas as possibilidades, apenas tornar um pouco mais visível alguns dos muitos recursos interessantes que já estão disponíveis.

Exatamente... é para você não fazer aquela cara de 'WTF?!?' quando estiver conversando com o pessoal do Plone na próxima PyConBrasil, aliás, o que você está esperando pra fazer a sua inscrição agora mesmo? :-)

Para começar, o Plone é um sistema de gerenciamento de conteúdos (CMS). Se você conhece algumas das outras 775 soluções CMS atualmente listadas no site CMSMatrix, faça uma rápida comparação delas com a versão anterior do Plone, a 2.5 (lembre-se, a 3.0, está saindo do forno!) e veja se você também se surpreende com os resultados... ;-)

Bom, mas vamos ao que interessa... um dos recursos mais solicitados era a possibilidade de gerenciar os elementos que compõem o visual de um Plone site, como por exemplo a caixa de buscas, as ações de um documento ou a barra pessoal de cada usuário, só para citar alguns casos. Quando eu digo gerenciar, me refiro a possibilidade de adicionar e remover, além de alterar a ordem em que os elementos aparecem, sem precisar ficar personalizando os templates, especialmente o main_template... que é o ponto central de toda a identidade visual do site.

O Plone 3 usa extensivamente os conceitos de content providers e viewlets para resolver essa e outras questões (como os portlets, mas isso fica para o próximo post). Se você olhar com atenção, notará que muitos dos templates agora possuem fragmentos do tipo:

<tal:block replace="structure provider:foo" />

Note o novo namespace provider introduzido pelo pacote zope.contentprovider do Zope3. Ele renderiza o conteúdo do viewlet manager especificado. Para saber mais sobre como criar e registrar seus próprios viewlet managers, bem como especificar a ordem e quais viewlets aparecem e onde, consulte o tutorial na seção de documentação do Plone. Essa personalização pode ser facilmente feita num perfil do GenericSetup, bastando fornecer seu próprio arquivo viewlets.xml.

Obviamente que se você não possuir acesso ao sistema de arquivos do servidor Zope, as coisas podem complicar. Entretanto, isso não significa que não possa ser feito. Você pode editar as definições das viewlets em cada uma dos viewlets managers registrados, basta acessar a view /manage-viewlets na raiz do seu Plone site. No momento ainda não existe um link visível onde você possa clicar para ir nessa tela, mas isso deve ser resolvido em breve.

Infelizmente nem tudo é perfeito no mundo TTW. A adição de novas viewlets aos viewlet manager existentes só pode ser feita através de código Python irrestrito ou por um perfil do Generic Setup...

Isso resume a primeira dica sobre o tema, assim como (espero) deixa o prezado leitor na expectativa do próximo tópico... ;-)

Read more...

Thursday, June 28, 2007

Python, Bauru e a Fonte Dançante

Fonte Dançante do Parque IbirapueraEste é um (não tão breve) relato sobre os acontecimentos dos últimos dias, para espantar as traças que já estavam começando a tomar conta deste blog...:-P

A semana passada foi um correria do cão. Tudo começou com a definição das tarefas a serem implementadas para a Plone Solutions, nada muito complexo, apenas algumas melhorias em um produto chamado Dashboard, que pemite a seleção e a ordenação de quais portlets estarão disponíveis na sua página inicial, assim que o login em um Plone site é realizado.

Aliás, essa funcionalidade já foi incorporada no Plone 3.0, que deve ter o primeiro release candidate liberado em duas semanas, já que finalmente os problemas do five.lsm e a questão das tools X utilities foram resolvidas.

Quarta-feira pela manhã eu tive uma reunião com o pessoal da Recria, em Caxias do Sul, para definir alguns pontos que ficaram em aberto desde o lançamento do portal em 2004. Em seguida o almoço, um já tradicional prato italiano, na Pasta & Cia, no Shopping Prataviera, onde pude contar com a agradável presença de ex-colegas do curso de graduação na UCS. Logo mais à noite, tivemos a final da Copa Libertadores da América onde o Inter, digo, o Boca Juniors sagrou-se hexa-campeão, após uma ótima atuação em cima do Grêmio, em pleno Estádio Olímpico. Meu palpite de 3x0 só não foi concretizado pois o Palermo conseguiu a façanha de perder mais um pênalti na sua carreira... Provavelmente ele conste no Guinness Book como o jogador que mais errou pênalties na história! :-D

Chega quinta-feira e é hora de embarcar para São Paulo para participar da asssembléia de fundação da Associação Python Brasil. Por uma tremenda coincidência, acabei encontrado outro colega da UCS, o Samuel Fisch, que estava fazendo a viagem de volta à Angola, depois de passar duas semanas de férias no Brasil. Nosso vôo para Congonhas saiu com atraso de 20 minutos, mas passou tão rápido que nem tivemos tempo de botar todo o papo em dia. Ontem fiquei sabendo que a conexão dele para o Rio de Janeiro atrasou e ele acabou perdendo o vôo para Angola, tendo que retornar a Caxias e indo viajar novamente no domingo... :-(

Eu optei por viajar a São Paulo um dia antes justamente tentando evitar que qualquer atraso causado pelo sistema áereo brasileiro interferisse nas minhas atividades. A estratégia deu certo, mas ao invés de eu finalizar as tarefas da Plone Solutions eu acabei usando o tempo em outras atividades. Buscamos o Osvando Santana em Guarulhos e mais tarde fomos comer uma boa pizza paulistana (mas não melhor do que as Caxienses, claro!) junto com o Luciano Ramalho e mais alguns amigos.

Fiquei hospedado no apartamento do Érico Andrei, da Simples Consultoria, que me acolheu com uma grande hospitalidade. Ao invés de dormir (sleep is for the weak, no sleep for you!) acabei usando a noite para deixar tudo o que estava pendente da Plone Solutions concluído para o dia seguinte. Na verdade acabei usando a manhã também e quando finalmente pensei em dormir já era meio-dia de quinta-feira e o Érico me ligou avisando que estava indo me buscar...

Almoçamos e fomos direto para a sede do IPSO. Lá iniciamos os preparativos para a assembléia de logo mais. O pessoal já estava em um bom número quando nós paramos de falar a respeito dos episódios dos MythBusters e partimos para uma seção de piadas. Acho que acabei me empolgando um pouco nas melhores do Joãozinho, pois todo mundo parou para escutar... :-)

A assembléia de fundação da Associação Python Brasil (APyB) acabou transcorrendo tranqüilamente, com todos os artigos sendo cuidadosamente debatidos e analisados por todos os presentes, especialmente o Sérgio! O Jean Ferri foi o último a chegar, já que o seu vôo de Brasília teve um pequeno atraso de 7 horas...

O resultado das eleições pode ser consultado diretamente no site da APyB. O mesmo vale para o estatuto deliberado. Depois ainda saímos para um Happy Hour com a galera e visitamos alguns bares para conhecer os agitos da noite paulistana...

De volta ao apartamento do Érico, ainda fiquei um bom tempo no computador antes de ir tomar um banho e dormir às 02:45. Detalhe, como eu havia acordado às 08:00 de quarta-feira, acabei batendo meu recorde pessoal de uptime em 45 minutos. A nova marca a ser atingida agora é de 42h45m! ;-)

Sábado, 06:00 da madrugada e o Érico já foi acordando eu e o Marco André, que também estava hospedado lá. Partimos para buscar o Osvaldo e ir em direção a (mais de uma hora de estrada!) UNICSUL onde o Osvaldo apresentaria um palestra introdutória sobre Python e eu sobre Empreendedorismo. Aliás, o próprio Érico me avisou que um artigo do ComputerWorld sobre a X3ng havia sido publicado recentemente.

Após as palestras na UNICSUL (e de mais uma hora de viagem na estrada) estávamos novamente na sede da Simples Consultoria, onde estava sendo preparado um churrasco em comemoração aos quatro anos da empresa. Uma tarde inteira de conversa depois, acompanhamos o pessoal até o aeroporto de Congonhas e retornamos para o apartamento do Érico para um merecido descanso.

Havia planos para uma partida de golfe no domingo pela manhã, mas eu e o Érico acabamos dormindo quase até o meio-dia... Fui convidado então para conhecer o legítimo Bauru paulista. Antes ainda passamos um bom tempo na Livraria Cultura, uma loja colossal com 3 andares e milhares de itens a disposição do público. Pois bem, o tal Bauru realmente era saboroso, porém um tanto quanto nanico para os padrões gaúchos! A melhor parte é o recheio com os diversos tipos de queijos derretidos, mas a carne em micro-fatias bem que poderia ser substituída por aqueles (agora famosos) bifes que a comunidade saboreou no restaurante Tudo Pelo Social, em Porto Alegre, durante o FISL desse ano... :-)

No restante do domingo, fizemos um passeio de carro por alguns pontos turísticos e históricos da capital paulista. Eu acabei esquecendo a minha câmera digital no bolso da jaqueta, lá no apartamento e passei em branco sem registrar absolutamente nada! Felizmente ainda fizemos um pit-stop em casa para pegar agasalhos e então partimos em direção ao Monumento às Bandeiras, no Parque Ibirapuera, onde a prefeitura recentemente instalou uma fonte dançante em comemoração aos 450 anos da cidade.

Segunda-feira, hora de voltar para casa, mas desta vez por Guarulhos. Chegamos em cima do laço no aeroporto, o suficiente para encontrar um funcionário da companhia aérea equipado com um PDA e uma mini-impressora para emitir a minha passagem. Em seguida nada de pressa, apenas uma hora de espera na interminável fila de embarque. Duas barrinhas de cereal depois, eu pousei tranqüilamente em Caxias, com temperatura ambiente de 5°C! :-/

E assim, após voltar a Garibadi, teve-se início mais um ciclo semanal...

Read more...

Sunday, June 10, 2007

O Prêmio da Arena

HP/Compaq V6210BR Na próxima terça-feira, dia 12, completam duas semanas da chegada do prêmio da Arena, um HP/Compaq V6210BR. Sim, ele chegou dia 29 mas ainda não deu tempo de falar sobre ele... :-)

Até o presente momento eu fui o único a receber o notebook, mas o do Guilherme e o do Kalecser devem estar a caminho.

A primeira coisa que eu fiz foi um test-drive com o Mandriva 2007 que veio pré-instalado. O manual de instruções contêm as senhas para o usuário padrão e para o root. Em seguida ativei a rede wireless com o assitente de conexão e já fui tentando atualizar o sistema para as versões mais recentes dos pacotes. Como em todas as outras vezes na história que eu tentei, por algum motivo não foi possível conectar nos servidores da Mandriva. Parece sina e eu acho que é mesmo... :-)

No dia seguinte, tentei acessar o repositório da Mandriva novamente, mas dessa vez com sucesso... De qualquer forma, já era tarde, durante a madrugada eu já havia reparticionado o disco, instalado o Ubuntu Feisty e, em seguida, já atualizado para o Gutsy... ;-)

Tive duas dores de cabeça com o Ubuntu. A primeira foi dar o boot com o CD de instalação do Feisty. É necessário adicionar o parâmetro 'noapic' durante o boot, caso contrário a inicialização trava logo em seguida. A segunda foi com o driver da placa de rede sem fio. No Mandriva ela parece funcionar normalmente, mas no Ubuntu, mesmo usando a mesma versão do driver do Mandriva (confira dentro de /etc/ndiswrapper), a placa só funciona caso eu desligue e ligue novamente a chave que controla o dispositivo wireless. Imagine quanto tempo eu perdi para descobrir isso... e claro, foi por acaso... :-D

O desempenho do notebook, mesmo com apenas 256MB de RAM e com a placa de vídeo da nVidia compartilhando alguns megas, foi muito bom. Nessa semana chegam dois pentes de memória da Kingston, de 1GB cada, então a performance deve melhorar consideravelmente, especialmente com mais de uma aplicação rodando ao mesmo tempo.

Como pode-ser perceber pela foto (observe o adesivo colado na parte superior esquerda da tela), o note já tem um novo dono, ou melhor dona... Sim, eu vou continuar com o meu Asus W5A e o V6201BR vai ser compartilhado pelas minhas filhas e esposa.

Read more...

Tuesday, May 29, 2007

O Linux vai ao Internet Banking

Guardião Internet 30 horas UnibancoO Unibanco adotou, a partir desta semana, um novo mecanismo de segurança para acesso ao seu Internet Banking. O problema, já mencionado pelo PSL Brasil, é que ele parece ser incompatível com o Linux.

Neste post eu comento o que me levou a abrir uma conta no Unibanco e uma forma de burlar o tal mecanismo e continuar acessando normalmente o sistema, a partir do bom e velho Linux.

O interessante é ressaltar que um dos seus concorrentes, o Banrisul, caminha na direção contrária. Ele também passou a exigir recentemente a instalação de um dispositivo adicional de segurança. Porém, essa exigência é destinada apenas a quem utiliza o Windows (qualquer versão dele), como escreveu o Dirceu Follmann, de forma bem humorada.

No início do ano passado recebi uma correspondência do Unibanco, nela estava escrito que eu havia sido selecionado para abrir um conta-corrente livre de taxas. O que já parecia suspeito, ficou ainda mais difícil de acreditar ao ler o segundo parágrafo, que afirmava que eles iriam fazer um depósito inicial de R$ 50,00 caso alguma despesa mensal (luz/telefone/...) fosse registrada como débito em conta.

Como o Unibanco já havia enviado dois cartões de crédito (Mastercard/Visa) sem anuidades para o resto da vida e com limite de R$ 3500,00, sem que eu precisasse fazer absolutamente nada, exceto aceitar, mas ainda com os dois pés atrás, decidi ir até a agência mais próxima. Falei com o pessoal de lá, li e reli o contrato. Acabei abrindo uma conta e cadastrei a fatura da companhia de energia elétrica como débito em conta.

Hoje, R$ 50,00 e quinze meses depois, ao tentar acessar o Internet Banking, me deparei com o que parecia inevitável. O tal do mecanismo de segurança precisa ser obrigatoriamente instalado. Caso ele não estiver instalado, a mesma tela exigindo a instalação é exibida.

Depois de tentar desinstalar e reinstalar o plugin no Firefox por meia dúzia de vezes eu já estava quase desistindo de tentar fazê-lo funcionar. Foi quando eu descobri o que acredito ser um pequeno descuido da equipe que implantou o novo mecanismo e que permite o uso normalmente, mesmo usando o Linux.

As instruções são as seguintes:

  • na tela que possui o botão 'Instalar', clique nele para disparar a instalação do plugin;
  • vai abrir uma nova janela, solicitando a confirmação da instalação do plugin no Firefox;
  • nessa tela, clique em 'Cancelar';
  • vai aparecer o selo que ilustra este post, onde está escrito 'Guardião Internet 30 horas não instalado';
  • ignore isso, daqui para frente o acesso funciona normalmente, ou seja, clique no seu nome, forneça a senha e faça o que você precisa fazer.

Não sei por quanto tempo essa forma alternativa de acesso estará funcionando, mas tudo indica que nem o próprio pessoal do Unibanco sabe disso ainda. Afinal, a recomendação oficial para resolver o problema é passar a usar o Windows... claro e na 'bunada não vai dinha'... ;-)

Atualização: o André já havia comentado que a dica funcionava apenas parcialmente, mas provavelmente em função das reclamações da comunidade Linux[1, 2, 3, 4], desde a última sexta-feira, dia 8 de junho, a instalação do tal dispositivo adicional de segurança não é mais necessário para quem acessa o Internet Banking pelo Linux. Ponto para nós... ;-)

Read more...

Thursday, May 24, 2007

Comandos mais usados e algumas dicas

Ok, eu admito... eu não resisto a um meme... :-D

Desta vez o assunto[1, 2, 3] é referente aos comandos mais executados na sua máquina...

Porém eu acabei sendo um pouco mais abrangente, falando de coisas que podem ser úteis no seu dia a dia.

Originalmente a idéia seria apenas postar o resultado desta seqüência de comandos (a contra-barra foi usada apenas para não quebrar o layout do blog, que tem uma largura fixa limitada):

history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|\
        sort|uniq -c|sort -rn|head -10

Eu até tenho uma simpatia muito grande pelo bash (apesar de querer muito aprender o zsh) e pelo demais comandos utilizados, mas tenho algum tipo de aversão ao awk (e, diga-se de passagem, não tem nada a ver com o Aho, o livro do dragão continua na minha relação dos favoritos). Desculpe-me, mas eu realmente não gosto dele. Deve ser alguma influência do Verde, mas eu prefiro o sed. É um direito meu... ;-)

Buenas, com o amado sed, o comando simplifica um pouco (isso se você, como eu, gosta de comer expressões regulares com farinha...):

history|sed -r 's/[ 0-9]+ ([^ |]+).*/\1/'|\
        sort|uniq -c|sort -rn|head -10

Explicando um pouco a regexp: ela ignora todos os espaços ou números seguido de um espaço, casa com uma seqüência de caracteres até encontrar o próximo espaço ou uma barra vertical (vulgo pipe), ignorando todo o resto.

Para eu não ser crucificado por aí, esta é uma versão pythônica da coisa:

from os.path import expanduser

history = open(expanduser('~/.bash_history'))
commands = [line.split()[0].split('|')[0] for line in history]
counter = {}
for command in commands:
    if command in counter:
        counter[command] += 1
    else:
        counter[command] = 1

topten = sorted(counter.items(), key=lambda x:x[1], reverse=True)
for command, total in topten[:10]:
    print total, command

Não usei nada de extraordinário para resolver o problema, apenas limpei os comandos que estavam armazenados no histórico e salvei numa lista. Depois criei um dicionário cuja chave era o comando e o valor era o número de vezes que o comando ocorreu. Em seguida, ordenei de forma reversa a lista de tuplas de itens do dicionário, considerando a segunda posição (o total de ocorrências) como chave de ordenação. Por fim, imprimi os comandos com os respectivos totais.

Certo, agora para acabar a enrolação aqui vai a minha relação atual:

1378 vi
 713 sudo
 372 ls
 327 svn
 267 cd
 214 python
 133 mv
  88 ssh
  68 rgrep
  64 less

Com base nela você fica sabendo qual o meu editor, paginador e linguagem de programação preferidos, que eu evito ficar logado como root, que eu uso um sistema de controle de versões, que eu acesso outras máquinas de forma segura, que eu procuro em arquivos de forma recursiva, além de verificar a listagem e mudar de diretório de vez em quando. A última coisa a ser dita é que o mv só faz parte da lista porque toda semana tem episódios novos das séries[1, 2] que eu acompanho (que por sinal acabaram juntas nessa semana...) e eu movo os arquivos para o pendrive para poder assistir no DVD player da sala, com som 5.1... ;-)

Para quem estranhou a quantidade de comandos armazenados no meu histórico, basta dizer que o meu ~/.bashrc está configurado para armazenar os 5000 últimos comandos, sem repetição seqüencial e sem salvar os que iniciam com um espaço em branco (útil para aqueles que não devem ficar armazenados):

export HISTCONTROL=ignoreboth
export HISTSIZE=5000

Por fim, ainda utilizo o seguinte ~/.inputrc, de forma a ignorar maiúsculas/minúsculas quando usar a tecla tab para completar nomes de arquivos/diretórios e também para poder digitar as primeiras letras de um comando e navegar apenas entre os usos anteriores deste comando em particular com as setas para cima/para baixo:

set completion-ignore-case On
"\e[B": history-search-forward
"\e[A": history-search-backward

Read more...

Monday, May 21, 2007

Túneis SSH com o gSTM

Aproveitando a deixa do BR-Linux, vou fazer um pequeno comentário a respeito de uma ferramenta que auxilia no gerenciamento de túneis SSH.

O Gnome Secure shell Tunnel Manager (o site parece estar fora do ar no momento), ou simplesmente gSTM, é uma aplicação bastante simples. Sua função, como o próprio nome já diz, é fornecer um gerenciador de túneis SSH para o Gnome.

Gnome Secure shell Tunnel Manager

Ele foi criado pelo Mark Smulders, mesmo autor do LinEAK, um utilitário para facilitar a configuração de teclados com teclas multimídia.

Os túneis SSH possuem dois propósitos básicos: permitir o acesso remoto à rede interna de um cliente e criptografar uma conexão insegura, como HTTP/FTP/SMB e a maioria dos protocolos existentes. O gSTM pode ser usado em ambos os casos e acaba sendo ainda mais útil na medida que o número de túneis que você precisa manter vai aumentando.

Se você, assim como eu, precisa se conectar a dezenas de servidores, em diferentes clientes, então você já deve ter se deparado com a situação de perder mais tempo tentando lembrar as informações de conexão ao servidor remoto do que o tempo que seria necessário para resolver o problema... ;-)

Em sistemas Debian/Ubuntu a instalação é realizada como de costume: "apt-get install gstm" ou usando o seu gerenciador de pacotes preferido...

Read more...

Friday, May 11, 2007

Melhorando a performance do ZEO

Enquanto o prêmio da Arena não chega e o Felipe/Otávio não mandam sinal de fumaça, digo, a avaliação das duas fases do Insanifying, que gerou a classificação final das quatro equipes, vou comentar a respeito de algumas mudanças quase imperceptíveis que vêm ocorrendo no ZEO nos últimos tempos. Caso a sua instalação atual do ZEO venha apresentando problemas de lentidão e/ou travamentos parciais, você vai descobrir os motivos... :-)

O servidor de aplicações Zope utiliza o ZODB (Zope Object Database) como mecanismo de persistência de objetos Python. Normalmente a área de armazenamento do ZODB pode ser usada apenas por um único processo (com uma ou mais threads, sendo quatro o número padrão). O ZEO (Zope Enterprise Objects) é a solução da Zope Corp para o compartilhamento de uma área de armazenamento única entre diversos clientes.

Quando o ZEO é utilizado, a área de armazenamento é acessada pelo processo do servidor ZEO. Então, diversos clientes podem se conectar a este servidor, de forma a compartilhar a mesma área de armazenamento. O ZEO sempre fornece uma visão consistente dos dados para todos os clientes que estiverem conectados. A comunicação entre o servidor e os clientes é feita usando uma versão personalizada do protocolo RPC, em cima do TCP.

No final do mês de março, após o lançamento das versões 2.9.7 e 2.10.3 do Zope, um bug que gerava um tempo de espera excessivamente longo após determinadas operações foi descoberto e resolvido, quase ao mesmo tempo, individualmente por duas pessoas, em locais diferentes.

A primeira solução foi apresentada pelo Jürgen Kartnaller, em 27/03/2007. Ela consistia na implementação de uma função sleep com suporte a nonosegundos, para contonar o problema da granularidade do sleep de algumas plataformas.

A segunda solução foi apresentada pouco mais de 24 horas depois, pelo já lendário Jim Fulton, também conhecido como "O" criador do Zope (qualquer semelhança com o Homer Simpson é mera coincidência!). Ele descobriu que o timeout para uma condição de chamada em espera era desnecessário, além de eliminar uma parte não assíncrona do código.

Posteriormente, parte da solução do Jim foi aplicada nos braches correspondentes às versões do ZODB que acompanham o Zope das séries 2.9.x e 2.10.x. Cabe salientar que a implementação do Jürgen se tornou desnecessária, uma vez que o timeout foi removido e com ele a chamada ao sleep.

É importante também dizer que, até o presente momento, estes aperfeiçoamentos ainda não fazem parte de nenhuma versão oficialmente lançada. Entretanto elas farão parte das versões 2.9.8 e 2.10.4, assim que elas saírem do forno.

Na tarde desta sexta-feira o Jim informou sobre mais uma possível otimização, desta vez na configuração dos parâmetros que definem os tempos mínimos (min-disconnect-poll) e máximos (max-disconnect-poll) de espera entre as tentativas de reconexão, quando os clientes se desconectam do servidor ZEO. Os valores padrão são 5 e 300 segundos e a intenção é passar a usar 1 e 6 segundos de agora em diante.

Devo confessar que nunca havia visto estes dois parâmetros antes, mas graças à mensagem do Jim e a um grep no fonte do Zope eu cheguei até o arquivo doc/ZEO/howto.txt, que explica estas e muitas outras opcões.

Os testes no ZEO passaram a rodar 25% mais rápido e o impacto em um sistema em produção pode ser ainda maior. Caso as dicas tenham sido úteis, não deixe de postar um comentário relatando a diferença de performance obtida na sua instalação.

Read more...

Sunday, May 6, 2007

Binary People

You are Binary.  You are not human and go to great lengths to prove it. You always know where you are and how you got there, but no one else does, ever.Seguindo a tendência que pudemos acompanhar nos últimos dias, onde o Érico, o Osvaldo e o Sidnei já postaram e aproveitando para dar uma força ainda maior a este meme, acabo de fazer o teste e, literalmente, deu binário... :-P

Esse era o motivo que faltava para eu encomendar a minha camiseta do ThinkGeek... :-D

O fato acabou trazendo algumas recordações... como quando aprendi a manipular estruturas de campos de bits em C e mais recentemente (ok, já fazem mais de dois anos...) quando tive que fazer algo semelhante em Python. Aliás, quando implementei isso em Python, acabei chutando um pouco o balde... foi meio overkill para o que eu estava precisando resolver, mas acabou se tornando uma solução genérica para converter números entre qualquer base numérica (com testes!), mesmo entre as bases que nem existem... ;-)

Obviamente, dois anos depois, eu posso dizer que faria aquela classe Number bem diferente, mas isso é assunto para outro post...

Read more...

Wednesday, May 2, 2007

Insanifying, Parte II

Terceiro e último dia da competição e do FISL. No dia anterior, os problemas exigiam que se conhecesse o mínimo da estrutura do projeto Debian. Quem não soubesse como fazer algo, poderia pedir ao Felipe ou ao Otávio e eles informariam. Poderia ainda pedir a qualquer um dos presentes no FISL ou mesmo a quem estivesse on-line. Porém, isso acabaria consumindo parte do tempo das equipes.

Eu uso o Debian nos meus servidores desde o lançamento do Potato 2.2r5 no início de 2002. Naquela época um dos meus hobbies era testar diferentes sistemas operacionais. No meu computador eu tinha cinco sistemas instalados ao mesmo tempo (Conectiva & Mandrake (agora Mandriva), NetBSD, OpenBSD, Windows e mais uma partição vazia para ficar testando outros...) quando resolvi instalar o Debian e, gradualmente, ir desinstalando os que estavam instalados... :-)

Com o lançamento do Ubuntu Warty Warthog em 2004, eu acabei deixando o Debian para ficar com o Ubuntu, que como todos devem saber, é baseada no próprio Debian. Pois bem, posso dizer que durante estes cinco anos fiquei bem familiarizado com o Debian/Ubuntu. Isso acabou ajudando a nossa equipe, pois praticamente todas as dúvidas do Guilherme e do Kalecser estavam na ponta da minha língua e acabei por me tornar uma espécie de líder para a equipe... :-)

Voltando ao terceiro dia. Novamente fizemos um círculo para receber as instruções. Dessa vez o desafio consistia em torno de um único problema, mais uma vez envolvendo o tema da fase anterior. O Debian é composto por mais de 18 mil pacotes, dos quais uma grande maioria possui suporte a internacionalização (i18n, para ser mais conciso).

A questão é que uma quantidade razoável das mensagens que precisam ser traduzidas se repetem, ou no mínimo são bastante semelhantes. Isso gera a necessidade da utilização de alguma ferramenta que implemente o conceito de Translation Memory, de forma a agilizar o processo de tradução, bem como manter a consistência quando forem utilizados termos semelhantes.

Só para dar um exemplo: o termo 'Save' está presente no menu de praticamente qualquer aplicativo gráfico. A idéia é que a tradução de todas as mensagens de todos os pacotes que utilizem esse termo fiquem iguais, no caso 'Salvar'. Isso evita a ocorrência de discrepâncias nas traduções, muito comuns em casos onde diferentes pessoas colaboram no processo de tradução. Também é importante que quando o termo for usado em outras mensagens (Save as/Save all/...) a tradução seja sugerida, agilizando o processo e reduzindo possíveis erros de consistência.

Nós recebemos um arquivo de 70MB, com uma amostra das traduções utilizadas por alguns pacotes, totalizando cerca de 300MB depois de descompactado. Cabe lembrar que essa amostra representa apenas um percentual do volume de mensagens presentes nos pacotes do Debian. Segundo o Felipe e o Otávio, atualmente nenhum dos softwares existentes (livres ou não) consegue carregar toda a base de traduções dos idiomas presentes no Debian:

>>> import re, urllib
>>> url = 'http://www.debian.org/international/l10n/po'
>>> page = urllib.urlopen(url).read()
>>> uls = re.findall('<ul>.*<ul>(.*)</ul>', page, re.DOTALL)[0]
>>> len(re.findall('<li>(.*)</li>', uls))
226

(Para os mais desavisados, o programinha acima acessa o site do Debian e salva uma cópia da página com a relação dos idiomas existentes, filtrando para ficar apenas com o segundo bloco de itens, já que o primeiro contém o menu de navegação e imprime o número de itens encontrados.)

Sim... existem 226 idiomas (ou variações de idiomas) no Debian! Impressionante!

A tarefa consistia em escrever uma especificação e realizar a implementação de um software para auxiliar no processo de tradução, permitindo que:

  • administradores possam adicionar novos pacotes no sistema;
  • tradutores possam efetuar as traduções fazendo uso do recurso de Memory Translation;
  • revisores possam acessar o sistema e sugerir alterações nas traduções já existentes.

A propósito, o nosso programa acabou sendo chamado de ATR, em função de ter que atender às necessidades das 3 classes: Administradores, Tradutores e Revisores... :-)

A primeira coisa que fizemos foi definir a estratégia. Mais uma vez sabíamos que não seria possível concluir totalmente a tarefa em tempo. Então decidimos que seria melhor fazer pelo menos um pouco de cada uma das coisas, ao invés de fazer uma das coisas bem-feita e ignorar as outras.

Precisaríamos de algo que fizesse a indexação de texto de forma rápida e sem consumir recursos demasiados do sistema. Depois de um rápido brainstorming, optamos pelo uso do Lucene, devido ao conjunto das suas características, que já contempla diferentes funções para a busca de texto. Também decidimos que a aplicação teria interface gráfica, ao invés de rodar em modo texto no console.

Como o Guilherme e o Kalecser tinham experiência na mesma linguagem de programação (Java), optamos pela seguinte divisão de tarefas:

Dorneles
especificação do sistema e desenvolvimento de qualquer coisa que levasse muito tempo em Java
Guilherme
parser dos arquivos de tradução e integração com o Lucene
Kalecser
implementação da interface gráfica

Mais uma vez o trabalho colaborativo seria fundamental. Continuamos usando o Google Docs para a especificação, mas iríamos precisar de um sistema de controle de versão para o código. Então instalei e configurei um servidor de Subversion na minha máquina. Aprendi que no mundo Java praticamente ninguém vive sem o Eclipse... e aprendi como instalar o plugin de Subversion nele também... :-)

Para termos uma noção de como era a interface gráfica do softwares já existentes, usamos o valioso serviço do Google Images. Com isso, o Kalecser e eu rascunhamos o que nós consideramos ser a melhor solução para o nosso programa.

Em seguida o Kalercer precisou extrair a relação dos idiomas disponíveis para popular um combo na tela e isso iria levar um certo tempinho em Java. Então ele pediu e eu escrevi rapidamente um programinha (4 linhas, se não me falha a memória) em Python e devolvi a saída no formato que ele havia solicitado.

Enquanto isso o Guilherme quebrava a cabeça para ver se o Java tinha algum recurso nativo para ser usado na manipulação de arquivos de catálogo de mensagens do gettext (PO e POT). Se não me engano, acabamos desenvolvendo um parser temporário e implementando nosso próprio algoritmo de busca de texto por similaridade.

Por fim, acabamos fazendo mais algumas pseudo-implementações de características que achávamos importante constar no sistema e nos preparamos para empacotar e documentar o que havíamos desenvolvido até então. O empacotamento acabou virando POG (esquecemos até a licença!), pois já tínhamos esgotado o tempo e não pudemos gerar um pacotinho Debian nos conformes... Nossa solução ficou longe do que constava na especificação, mas acredito que fizemos um bom trabalho durante o tempo determinado.

É claro que seria melhor se recebêssemos uma especificação já pronta e tivéssemos apenas que programar. O problema é que o pessoal do Debian ainda não tem uma solução para isso. Dessa forma, usaram a oportunidade de ter 12 cérebros a disposição para colher algumas idéias que poderão vir a se tornar a futura ferramenta.

Obviamente que tratava-se de um evento de programação, então entendo o fato de termos que ter programado algo para mostrar no final do dia. Caso os doze participantes tivessem trabalhado juntos, certamente o Debian teria se beneficiado mais, porém isso não seria possível nesse tipo de evento.

Encerramos a competição sem ter a menor idéia de como havia sido o nosso desempenho em comparação com as outras três equipes. Esse suspense durou mais algumas horas até o anúncio do resultado final. Mas isso é assunto para o próximo post, que só vai sair depois que o Felipe e o Otávio me enviarem o material que eles haviam prometido... ;-)

Read more...

Friday, April 27, 2007

Too much nerd, I guess!

I am nerdier than 100% of all people. Are you nerdier? Click here to find out!Na semana passada fui promovido a Alpha Geek mor pelo amigo Érico. Hoje, enquanto dava uma sapeada pelo Rec6, reencontrei o Christiano Anderson, um colega dos tempos áureos do Debian-RS, mas que agora está radicado no sudeste do país, e acabei caindo num teste para nerds... :-D

É apenas uma brincadeira, eu sei, um formulário sem nenhuma base científica e eu já imaginava que iria ficar na faixa dos que seriam considerados nerds. Mesmo assim confesso que o resultado me deixou um tanto quanto preocupado. A tela final exibiu a imagem acima e a mesma frase previamente relatada pelo Christiano:

All hail the monstrous nerd. You are by far the SUPREME NERD GOD!!!
Porém, o que mais chamou a minha atenção foram estas três pequenas afirmações:
0% scored higher (more nerdy),
0% scored the same, and
100% scored lower (less nerdy).

Isso só pode significar uma coisa:

  1. poucas pessoas fizeram o teste e ninguém ainda tinha chegado nos 100%;
  2. o processamento do resultado tem algum bug e não registra os 100% corretamente;
  3. definitivamente, há algo de errado comigo... :-P

Eu acredito seriamente na segunda opção, mas deixo a palavra final com os estimados leitores... :-)

Read more...

Thursday, April 26, 2007

Gutsy, Kernel, Thunderbird, Lost, WPC

O site de pacotes do Ubuntu ainda não lista o Gutsy Gibbon, a próxima versão do sistema operacional da Canonical, mas o seu desenvolvimento já está a pleno vapor. Inicialmente foi reconstruído o toolchain e o repositório ficou congelado por cerca de dois dias. Porém, desde a tarde de hoje, diversos pacotes já estão resincronizados com os seus correspondentes a partir do Debian.

Nos próximos dias deveremos ter também o novo kernel do Linux, que ainda nem esfriou. O mesmo deve ocorrer com o Thunderbird 2, que por si só já apresenta uma série de novidades, mas que com a última versão do Lightning e uma extensão adicional pode sincronizar bidirecionalmente os seus calendários com o Google Calendar.

Enquanto isso, na última madrugada e boa parte da manhã de hoje, os servidores de BitTorrent usados pela EZTV ficaram bastante congestionados, gerando dezenas de comentários e atrasando um pouco os planos de quem gostaria de estar assistindo o 18º episódio da terceira temporada de Lost na noite de hoje... 8-)

Para quem estiver procurando novos desafios, mas num estilo um pouco diferente dos tradicionais de programação, foi postando na lista da maratona um anúncio com um convite para participar das seletivas brasileiras, visando formar a equipe do Brasil no 16º World Puzzle Championship, o campeonato mundial de passatempos da WPF. Este ano o evento acontecerá pela primeira vez na América Latina e terá sede na cidade do Rio de Janeiro, no mês de Outubro.

E, claro, esse é mais um post intermediário, antes do relato da segunda parte do Insanifying, para dar um pouco mais de tempo para a organização do FISL definir a configuração do notebook e para o pessoal do Debian enviar o material que eu solicitei sobre a avaliação dos resultados dessa fase... ;-)

Atualizações

Read more...

Wednesday, April 25, 2007

Insanifying, Parte I

Segundo dia da competição. Os doze primeiros classificados do Qualifying foram divididos em quatro equipes, conforme a sua posição no ranking do dia anterior: 1-5-9, 2-6-10, 3-7-11 e 4-8-12. Assim, as equipes ficaram uniformemente balanceadas para os próximos dois dias de desafios.

A organização do evento contactou diferentes entidades relacionados ao mundo do Software Livre a fim de buscar auxílio para a definição dos problemas que seriam propostos durante as duas fases do Insanifying. Porém, apenas o projeto Debian topou em participar, através das presenças de Felipe Augusto van de Wiel e de Otávio Salvador.

O primeiro desafio nesse dia foi entender o que precisaria ser feito e como seria a avaliação. O Felipe e o Otávio começaram explicando que, diferente do Qualifying (quando havia um sistema de avaliação para verificar se os nossos programas geravam a saída esperada), o Insanifying teria uma avaliação mais subjetiva. Na prática, isso significaria que ao invés de apenas certo e errado, teríamos uma escala de 0 a 100 para avaliar as soluções apresentadas. Além disso, diversos critérios seriam levados em consideração:

  • legibilidade: o código segue as condutas de programação do projeto.
  • funcionalidade: verificação se a solução realmente faz o que tem de fazer.
  • desempenho: solução executa em menos tempo que as demais.
  • apresentação do grupo da solução: entrosamento do grupo, oratória e resposta de perguntas.

Em seguida, enquanto ainda estávamos agrupados em um círculo, quatro problemas foram apresentados. Além disso, nos foi dito que, ao concluir estes problemas iniciais, poderíamos resolver qualquer um dos bugs marcados como release critical do Debian. Obviamente nenhuma das equipes conseguiu resolver todos os problemas no tempo disponível... :-/

O primeiro deles era o bug #417850: trata-se de uma falha que ocorre apenas no tty1, quando a tecla Caps Lock está ativa e algumas teclas específicas são pressionadas, fazendo com que sejam exibidos caracteres minúsculos, ao invés dos correspondentes maiúsculos esperados.

O segundo problema era o bug #411585, referente ao pacote cdebconf, responsável por armazenar as respostas informadas pelo usuário durante a instalação de pacotes no sistema. Por algum motivo, os valores armazenados não eram excluídos da base de respostas ao remover as questões, fazendo com que eu uma eventual nova instalação, o valor anterior seja utilizado e não o valor definido como padrão para aquela questão específica.

O terceiro problema era referente a um bug existente no próprio sistema de triagem de bugs do projeto Debian. A página que lista os bugs para um determinado pacote contém uma opção para listar aqueles que já f