Feeds:
Posts
Comentários

CMake vs Autools: Quem é mais rápido?

INTRODUÇÃO


Pra quem trabalha com desenvolvimento já deve ter esbarrado com a necessidade de possuir algo capaz de verificar dependências, compilar e linkar seu programa de uma forma rápida e eficiente.

O sistema mais popular é com certeza o Autotools que provavelmente acompanha a maioria das distribuições Linux, porem nem tudo é perfeito…Vamos pensar em um projeto grande KDE. Vocês devem estar imaginando “ah com certeza ele usa o autotools pois esta presente na maioria dos sistemas…”, já foi a escolha deles mas atualmente o projeto que esta entre um dos maiores no universo open source usa o CMake. Caso deseje mais informações da mudança de autotools para cmake visiste Why the KDE project switched to CMake — and how (continued).

CMake é um sistema de construção de software que possui a mesma finalidade que o autotools porem prometem velocidade, flexibilidade e menor curva de aprendizado.

Eu, como um curioso da informática e fissurado por testar hipóteses graças a minha paixão a biologia tive a ideia de realizar um Benchmark do tempo de “configure” (procura por dependências e criação do respectivo Makefile) de cada um.

METODOLOGIA


Para realizar tal benchmark é necessário primeiro ter algum programa onde eu possa executar alguns scripts. Escolhi o Garden of Coloured Lights (jogo que precisa de 108% de atenção) já que é um programa que eu mesmo empacotei para o gentoo e conheço bem a estrutura de diretórios. Se usa gentoo aprecie o game dando um emerge garden.

Foi necessário criar o CMakeLists.txt pois o jogo não vem com suporte padrão ao CMake (isso deu dor de cabeça durante 2 dias). Em seguida vinha a parte de coleta de dados, para isso criei dois scripts que executavam tanto um ./configure quanto um cmake . 1000 vezes, sendo que em cada execução era verificado quanto tempo levo e no final dava o devido “clear” nos arquivos gerados e aguardava um segundo e começava a nova execução.

RESULTADOS

Deixei os scripts rodando e fui dormir acordei e comecei a analisar os dados. Os resultados foram compilados no gráfico abaixo.

Boxplot CMake vs Autotools

Gráfico 1 - Tempo de execução de cada programa.

Podemos ver que o CMake (tempo médio: 0,4459 segundos) foi muito mais rápido do que o autotools (tempo médio: 3,534 segundos). Os dois círculos em ambos os programas são outliers que sempre apareceram na primeira vez que executamos um programa.

CONCLUSÃO

CMake é mais rápido do que o velho e famoso autotools. Pretendia mostrar uma análise estatística mas a mesma se faz desnecessária (fiz mesmo assim Mann-Whitney e deu significativo P < 0.001).

Agora a batalha entre os dois sistemas pode ficar ainda pior pois vai entrar em ação o fator preferência e experiência de uso. Espero que minha humilde contribuição ajude  alguns desenvolvedores que ainda possuem a duvida de qual sistema de construção utilziar.

Caso deseje ter acesso aos scripts deixe um comentário com e-mail que ficarei feliz em enviar.

REFERÊNCIAS/VERSÕES

Garden of Coloured Lights: 1.0.6
GCC: 4.4.1
CMake: 2.6-patch 4
GNU Make: 3.81
uname -a: Linux kogan-ryuu 2.6.31-gentoo-dvd #1 SMP PREEMPT Sat Sep 26 00:34:20 BRT 2009 i686 Intel(R) Core(TM)2 Duo CPU E7300 @ 2.66GHz GenuineIntel GNU/Linux

Gentoo Linux

Recentemente adquiri um novo computador e resolvi voltar a usar Linux, no caso em vez de Arch optei pelo Gentoo já que agora possuo um poder de processamento melhor. Vou apresentar aqui algumas aventuras minhas com o sistema.

INSTALANDO, TESTANDO E ATUALIZANDO

Obviamente comecei baixando o Gentoo e o kernel através do windows (uso discada), instalei o modem e fiz meu primeiro emerge –sync, demoro horas sem nenhum exagero! Já resolvi a começar a procurar soluções para diminuir esse tempo, uma semana depois resolvi usar o emerge-delta-webrsync. Tive um grande sucesso, não levo mais que 2 minutos nessa conexão de 56k para fazer o sync do sistema apartir da primeira execução. A próxima medida era providenciar uma solução parecida para as atualizações dos pacotes. A solução encontrada foi o getdelta, ele funciona criando patchs dos sources que já possuo diminuindo assim o consumo de banda. Em alguns casos o getdelta chegou a salvar 98% de banda.

Conclusão: Para usuarios de discada como eu o melhor é usar alternativas que visam economizar banda como os utilitários getdelta e emerge-delta-webrsync ambos disponíveis na árvore principal do Gentoo.

WMII – WINDOW MANAGER IMPROVED 2

Precisava de um gerenciador de janelas rapído e com opções de customização avançadas e ao mesmo tempo simples, logo surgiu uma boa opção, o WMII. Escolhi o WMII devido as boas recomendações do Morte e não me arrependo. O WMII é um gerenciador de janelas dinâmico usando o conceito de tiling para organizar as janelas que o usuário abrir de forma a aproveitar todo o espaço disponível e minimizar o processo de posicionamento das mesmas.

Usando o WMII e o URxvt tive a vontade ridícula de ver o URxvt transparente e os problemas começaram. Fiz pesquisas e não encontrei nenhum metodo/script que me agradace nessa tarefa logo pensei se o WMII poderia facilitar minha vida. O cenário do problema era o seguinte.

Só conseguir ter a transparência usando a ferramenta transset que infelizmente precisava ser executada e eu ainda precisava clicar na janela que desejava transparência. Pesquisei mais um pouco no oraculo e encontrei o transset-df uma versão do transset modifica com a possibilidade de passar o ID da janela que deseja tornar transparente. A partir dai comecei a pensar como procurar e passar o ID de cada novo URxvt aberto.

Resolvi analisar o fs (file system) do WMII, pois me recordava de algo com ID dos clients abertos. Monitorando a parte de eventos percebi coisas uteis.

dvd@kogan-ryuu ~ $ wmiir read /event
Key Mod4-Return        # combinação de teclas que aperto para abrir o URxvt
CreateClient 0x1c00009 # Evento CreateClient sendo disparado com o ID da janela do URxvt
...

Com essa informação disponível e com a alta capacidade de customização do WMII eu resolvi o problema editando meu ~/.wmii-3.5/wmiirc na função eventstuff da seguinte maneira:

...
Event CreateClient
if [ $(wmiir read /client/${@}/props | grep ^urxvt) ]; then
transset-df -i $@ .8
fi
...

Não possuo conhecimentos em shell scripting mas essa solução tem funcionado de forma satisfatória.

WMII e transparencia no URxvt

WMII ativo com transparencia no URxvt

Conclusão: WMII é um gerenciador de janelas poderoso com suporte a modificações em qualquer linguagem de programação. Uso, gosto e recomendo.

CONTRIBUINDO

Contribuir com o Gentoo a primeira vista não é tão simples quanto no Arch mas posso garantir que seu pacote pode entrar mais rápido na árvore principal que você pode esperar.

Através do Twitter  fiquei sabendo do Garden of Coloured Lights e não encontrei no Gentoo o pacote, resolvi então criar o Ebuild e pedir revisões no #gentoo-sunrise@irc.freenode.net. Minha intenção era enviar o Ebuild para o overlay Sunrise mas meu bug acabo indo acabar diretamente na árvore principal depois de um melhoramento gradual e bastante leitura sobre a escrita de Ebuilds. Mr. Bones verificou meu bug fez uma observação e agora todos os usuários do Gentoo contam com um game realmente diferente para os momentos de tedio.

Conclusão: Difícil contribuir? Apenas se você tiver preguiça de ler. O projeto é aberto a contribuições e conta com uma documentação invejável se comparada a outras distribuições.

CONCLUSÃO

Gentoo é uma distribuição um pouca avançada para iniciamentes mas perfeita para entusiastas com Linux. Estou feliz com o Gentoo e pretendo continuar com ele por muito tempo.

Pensar e Observar

Tenho alguns professores que adoram contar histórias paralelas durante a explicação de algum assunto durante a aula. A maioria delas sobre descobertas que não exigiram muito esforço apesar de serem de muita importância para o mundo da ciência.

Quantas vezes no dia você para totalmente e fica observando algo? Tenho certeza que raramente, ainda mais nesses tempos agitados que vivemos hoje. Se formos fazer uma analise das grandes descobertas do passado grande parte das mais conhecidas se deu por acaso ou simplesmente porque alguem dedicou seu precioso tempo na terra que nunca mais voltara para aprender mais sobre algo, um grande exemplo é o famoso Darwin.

Darwin fez uma viagem pelo mundo abordo do Beagle, nela ele observou e pensou muito (mesmo sem querer ele faria, mar, água, MUITA, água) de seus pensamentos surgiu uma teoria que mudou a forma de pensar do mundo acadêmico. Alguém conhece um exemplo melhor de conhecimento a partir da observação?

Essa semana ouvi uma explicação do porque temos mais biodiversidade nos trópicos, uma síntese rápida seria assim: todos sabemos que na faixa entre os trópicos os raios solares incidem com um ângulo mais acentuado que no resto do planeta, nossos produtores de energia no planeta são as plantas, elas criam energia a partir do Sol se essa energia produzida é maior menos energia se perde ao longo da cadeia e conseqüentemente mais energia os animais terão para se reproduzirem e isso levara a maior variação genética da comunidade, devemos lembrar que todo animal é oportunista (onde tiver chance ele não deixara passar) se o alimento esta disponível ele não ira pensar duas vezes para se alimentar.

Todas essa informações são coisas que eu sabia mas que combinadas conseguiram explicar algo realmente incrível. O que me faltou para saber a resposta assim que a pergunta foi feita? Certamente pensar, dedicar mais tempo da vida a pensar não é deixar a vida passar é deixar a vida mais interessante.

Depois dessa aula resolvi tentar pensar em coisas que nunca pensei antes. Por que aquela aranha paro de fugir de mim quando encontro uma sombra para se esconder? Por que ela começo a fugir novamente assim que soltei um “bafo” nela?

Esse é um post mais filosófico do que instrutivo, mas considerei mais importante do que qualquer outra coisa que aprendi no momento. Se alguém ler isso espera que seja útil e mude a sua forma de pensar.

Aprendendo e Aplicando

Toda quinta-feira durante a tarde participo do núcleo de estudos em botânica (nebot), nele ocorrem palestras, aulas e no fim sempre uma discussão do que vimos.

Nesta ultima quinta-feira tivemos uma aula sobre Sucessão Primaria e Secundaria com a Professora Andreza de Anatomia vegetal (farei no próximo período) .

Não tenho a capacidade pra falar como a professora com doutorado, mas resumidamente seria:

Sucessão primária : é a primeira colonização de plantas em um local geralmente pode ser visto em pedras que estão sofrendo intemperismo.

Sucessão Secundária: ocorre apenas quando todas as plantas foram removidas do local, desmatamento seria um bom exemplo.

Recentemente ocorreu uma queimada perto da casa de uma amiga e sempre passo por lá de condução eu vejo a terra preta, mas com o tempo comecei a ver uma árvore brotando e agora vejo 7 bem próximas uma das outras. As árvores são embaúbas, suas sementes só germinam na presença de luz (pioneiras), fácil de ser identificada quando se olha uma floresta de cima pelas suas folhas pratas, dando contraste com a paisagem.

O engraçado é ver meus amigos dizendo que eu aprendo outro idioma com a biologia, mas não é aprender outro idioma é aprender o nome de eventos e estruturas que ajudam a universalizar o descrição de modo científico.

É fácil identifica-las pelo contraste que causam (clique na imagem para ampliar):
embaúbas