ordenando números de versão

December 30, 2008, by Antonio Terceiro - No comments yet

Quando eu quero listar versões em ordem, a ordenação de strings padrão, seja pelo comando sort ou pelo sort padrão de qualquer linguagem de progamação, não serve.

terceiro@morere:~/src/noosfero (master)$ git tag
0.1.0
0.10.0
0.10.1
0.10.2
0.10.3
0.11.0
0.11.1
0.11.2
0.11.3
0.11.4
0.11.5
0.12.0
0.2.0
0.3.1
0.4.0
0.5.0
0.6.0
0.7.0
0.8.0
0.9.0
terceiro@morere:~/src/noosfero (master)$ git tag | sort
0.1.0
0.10.0
0.10.1
0.10.2
0.10.3
0.11.0
0.11.1
0.11.2
0.11.3
0.11.4
0.11.5
0.12.0
0.2.0
0.3.1
0.4.0
0.5.0
0.6.0
0.7.0
0.8.0
0.9.0

O script a seguir resolve meu caso:

#!/usr/bin/ruby
out = $stdin.readlines.map { |s| s.strip }.sort do |v1,v2|
  (v1 == v2) ? 0 : (system("dpkg --compare-versions  #{v1} le #{v2}") ? -1 : 1)
end
puts out

Salvei ele em ~/bin/version-sort e fix um chmod +x ~/bin/version-sort.

Aí eu consigo fazer coisas assim:

terceiro@morere:~/src/noosfero (master)$ git tag | version-sort 
0.1.0
0.2.0
0.3.1
0.4.0
0.5.0
0.6.0
0.7.0
0.8.0
0.9.0
0.10.0
0.10.1
0.10.2
0.10.3
0.11.0
0.11.1
0.11.2
0.11.3
0.11.4
0.11.5
0.12.0

UPDATE: Pedro me indicou por e-mail uma alternativa usando opções do próprio sort:

terceiro@morere:~/src/noosfero (master)$ git tag | sort -n -t . -k 1,1 -k 2,2 -k 3,3
0.1.0
0.2.0
0.3.1
0.4.0
0.5.0
0.6.0
0.7.0
0.8.0
0.9.0
0.10.0
0.10.1
0.10.2
0.10.3
0.11.0
0.11.1
0.11.2
0.11.3
0.11.4
0.11.5
0.12.0

De fato pra esse caso específico funciona que é uma beleza, e é simples fazer uma alias do shell com o comando todo. Mesmo assim essa abordagem usando o dpkg --compare-version tem a vantagem de ser genérica: eu posso abstrair o formato do número de versão que o dpkg se vira: x.y.z, x.y, x.y.z.w, x:y.z, etc.



Reflexão sobre o Tabuleiro Digital, e sobre projetos de inclusão digital em geral

December 19, 2008, by Antonio Terceiro - No comments yet

Achei por acaso no blog No blog do professor Nelson Pretto. Sensacional, vale à pena a leitura.

Pra dar um gostinho, um parágrafo no comecinho:

Primeiro, permitam-me uma questão que balizará toda essa conversa: por que os filhos das classes média e alta podem ter acesso ao universo da internet, na privacidade de seus quartos, com banda larga, suporte via telefone e computadores poderosos para fazer um monte de coisas como baixar músicas, mixá-las, distribuí-las, jogar videogames online, conversar com amigos velhos e novos, visitar e interagir com sites às vezes não tão adequados segundo os adultos - que aliás, um dia já viram as mesmas coisas em gibis escondidos dentro dos livros escolares! -, e, os filhos dos pobres, têm que acessar internet em telecentros para serem treinados (com projetos pedagógicos) em word e excel (aliás, softwares proprietários que lhes "escravizarão" para o todo e sempre...)?!



TWikiBrasil agora é FoswikiBrasil

December 14, 2008, by Antonio Terceiro - No comments yet

Foi criada uma nova lista, a web foi renomeada para Foswikibr, e o Carlinhos já está tocando o barco como coordenador da tradução para português, que é só um nome bonito para o papel que ele já vinha desempenhando há um bom tempo no TWiki. Se tivemos o TWiki em bom português nos últimos sei lá quantos releases, devemos a ele.

Bola pra frente que com a gente vem mais gente. smile

Espero conseguir tempo de contribuir com código para o Foswiki em breve, o projeto está num gás sensacional.