Scrum Cards Open-Source Style

Conheci o Scrum aqui no INdT, e tendo sido adotado recentemente a maioria do pessoal ainda está aprendendo. Uma das técnicas do Scrum que chama atenção é a do planning poker, usada para estimar o esforço de uma estória (ou feature, mas estória dá uma idéia melhor). Nos explicaram que o esforço necessário para realizar a tarefa é para ser visualizado como tamanho, não como tempo. Mas era comum nos planejamentos sair frases como “quanto tempo vai levar?”, “acho que fazemos isso numa tarde”, e “não, não, nada de pensar em tempo”. Pra ajudar a me reeducar passei a imaginar que as tarefas eram grandes como elefantes ou pequenas como ratos. Daí pra ficar legal mesmo fiz um baralho de planejamento com imagens de bichos de tamanhos diferentes. Ao contrário dos chatos softwares proprietários quase todo projeto opensource ou de software livre tem um mascote simpático. Daí usei esse zoológico pra construir meu baralho.

verso das cartas

A pena é do projeto Apache, que certamente requer um esforço maior e vale mais que 1/2. É isso aí Coxa, estou falando com você. Ele disse “você tá louco?! O Apache 1/2!?”. A idéia é visualizar tamanho, e a pena é o mais leve da lista.
Verdade que nem todas as figuras são de projetos de código aberto. O clipe você deve conhecer e odiar de um softwarezinho proprietário aí. E esse clipe não vale nada, por isso é o zero. O outro personagem é a coruja retardada da interrogação. Essa coruja ficou famosa por causa deste poster motivacional:

Ela é incrível e somos todos grandes fãs aqui no INdT. Não há ninguém melhor pra ilustrar a carta “não faço a menor idéia do esforço disso”.

Agora alguns dados técnicos e a chatice legal. Fiz o baralho com o Inkscape e a fonte usada foi a Purisa (parte do pacote ttf-thai-tlwg no Debian/Ubuntu). A licença pro baralho é a Creative Commons Atribuição-Uso Não-Comercial.

As licenças de cada uma das imagens podem ser encontradas em seus respectivos sites. Duvido muito que você queira checar, mas vou colocar os links pros projetos (ou entradas na Wikipedia) assim mesmo.

Como a maioria dos posters motivacionais a coruja retardada é domínio público. Assim espero.

Não deu pra descobrir qual a licença do clipe idiota, mas se alguém reclamar deixo só os olhos dele e mando os membros pra sua família em Redmond.

git-svn rapidinho

Todo mundo usando git e você preso no svn por que seu projeto é grande demais pra mudar assim de repente, e blá, blá, blá? Sente-se por fora por ter de usar um controle de versões centralizado? No more (or less)!

O pacote (Debian/Ubuntu) git-svn faz a ponte entre repositórios svn externos e git locais, e tem uma boa explicação de como usá-lo na wiki do GNOME: Git for GNOME developers

Lá você encontra os porquês de cada comando, aqui temos um resumo rapidinho (jabá: usando o projeto Python Launcher como exemplo):

Baixe do repositório subversion:

$ git-svn clone --username username https://garage.maemo.org/svn/pylauncher/trunk pylauncher

Crie seu branch e mude pra ele:

$ git checkout -b minhas_paradas

Não altere o master branch diretamente, ele deve representar a repositório svn, sempre trabalhe nos branches. Você manda seu trabalho pro master apenas na hora de subir as alterações pro svn.

Com as alterações feitas e commitadas no seu branch, volte para o master e faça o merge:

$ git checkout master
$ git merge --squash minhas_paradas

Faça o commit pro git:

$ git commit -a -m "Funcionalidade tal implementada."

E agora pro svn:

$ git-svn dcommit

E é isso. Pra manter o seu master branch atualizado em relação ao repositório svn use o rebase do git-svn:

$ git checkout master
$ git-svn rebase

Menus de Torta com Python e Cairo

Um tempinho atrás experimentei fazer uma interface do tipo pie menu, aqueles menus circulares, usando Python e Cairo. A idéia era usar num tipo de arena de combate usando marcadores para representar os lutadores, com ações escolhidas em menus de contexto circulares.

Melhor um screencast que palavras:

Veja o código aqui. Os arquivos são arena.py (execute este), p_token.py e piemenu.py.
Ou use o subversion:

svn checkout http://setanta-labs.googlecode.com/svn/trunk/pycairo piemenu

Funciona assim: a classe Arena é um widget que pode conter objetos da classe Token (os marcadores representando personagens), estes por sua vez contém um objeto da classe PieMenu, que é composto por vários itens.

Em código:

arena = Arena()

piemenu = PieMenu()
piemenu.add_item('icon1.png', do_callback, 2) # (icon, callback function, callback params...)
piemenu.add_item('icon2.png', do_callback)

token = Token((200, 100), 'token-icon.png', piemenu) # (position, icon, menu)

arena.add_token(token)

Então você adiciona a Arena num container qualquer e está pronto.

TagGen 0.3.1: Instalador para Windows

Aproveitei que fui obrigado a usar Windows hoje aqui na federal e resolvi fazer o bendito instalador pra versão 0.3.1 do TagGen.

Dois screenshots:

No screenshot acima, o desenho do humanóide representa a altura e peso de forma visual. Mais acima note a representação da idade do personagem acompanhada de informações históricas do mundo de Tagmar. Perceba também os botões com ícones de dado vermelho, eles provocam o sorteio aleatório dos valores de altura, idade e peso.

Este é o diálogo de escolha da região de origem do personagem. Claramente ripado do TagMap. Você irá notar que ele precisa melhorar um bocado.

Faça o download do instalador para Windows, e esteja avisado que ainda é software Alfa. Relatos de bugs, comentários e sugestões são bem-vindos.

TagGen, Gerador de Personagens para Tagmar 2 (ponto 2)

Há muito tempo atrás foi criado o primeiro RPG nacional, chamado Tagmar, e ele gerou uma horda de nerds matadores de orcos de fim de semana. Como já falei sobre no post do TagMap, vou pular as apresentações, mas digo que uma coisa que sempre fez falta em Tagmar foi uma Tabela (ou Escudo) de Mestre, uma que não fez falta, mas só porque naquela época não tinha dessas coisas, foi um gerador de personagens, e foi isso que resolvi fazer pro Tagmar 2 (ponto 2).

Antes de começar a falar sobre a aplicação, aviso que a versão que estou disponibilizando é Alfa, ou seja, não é Beta, ou seja, ainda não serve para ser usada no dia a dia, se prestando mais a uma avaliação inicial por parte de intrépidos testadores, curiosos e possíveis colaboradores. Agora enfio um screenshot:


Tela principal de TagGen

Batizei a criança com o criativo nome de TagGen (Tag de Tagmar e Gen de gerador :P), e a idéia é não só facilitar a criação dos personagens pra começar logo a bendita partida, mas também guardar dados da história e evolução do personagem, mais ainda: também deve ser possível “exportar” personagens e enviá-los para outros jogadores, imprimir a ficha, etc (veja a página do Roadmap para mais “etc”). Uma coisa que gostaria de fazer é um processo de criação alternativo, no estilo daqueles quizzes “Quem é você em…”, que são um tipo de teste de personalidade que indicam quem você é num determinado contexto (livro, filme, anime, e por aí vai). Daí o sujeito apenas com a idéia do tipo de personagem que quer interpretar pode pular toda a parte numérica e de escolha de habilidades, magias, equipamento, etc.

Novamente sobre facilidade, note que no screenshot acima o polígono representa os atributos do personagem e o jogador os define arrastando as bolinhas com o mouse. Essa parte foi um pouco inspirada em Ragnarök Online, e é particularmente útil pois a distribuição de pontos de atributos inclui uns cálculos cabulosos (mas não a ponto de serem assustadores), e creio que a parte mecânica-matemática fica bem melhor com a máquina.


Criando um novo personagem

A tela acima mostra o começo da criação do personagem: raça e profissão são escolhidos primeiro, pois essa decisão restringe todas as outras possibilidades. Determinadas raças não combinam com algumas profissões, e para mostrar isso de forma natural, as profissões proibidas desaparecem da lista ao escolher uma raça que possua restrições. Essa e outras características você pode ver no screencast que deixei lá no Google Video, ou na versão de melhor definição no formato Ogg/Theora.

Experimentando

Bom mesmo é instalar o TagGen, na seção de downloads do site temos:

Como aconteceu no primeiro release do TagMap, não tive tempo de fazer um instalador pro Windows, como essa versão é muito Alfa, não entro em detalhes, deixando por conta de quem for tentar executar, adiantando que você precisará de Python, GTK+ e PyGTK, nessa ordem, mas eu recomendo fortemente o PyGTK All-in-One Installer.

Técnica da Coisa

Como se viu acima PyGTK foi usado para interface; para os dados de raças, magias e habilidades, foi usado o banco de dados SQLite, que já vem embutido em Python, e é uma das coisas mais porretas que já se viu na Fenda do Biquíni; o widget de definição de atributos foi feito usando Cairo (que faz parte do GTK+), mas isso eu já expliquei num post anterior.

Dificuldades e Como Ajudar

Qualquer problema, idéia ou sugestão registrem uma ocorrência lá na seção Issues, lá na página do projeto, que é destinada pra questões envolvendo o software. É bem fácil preencher um novo item de problema/sugestão, mas caso se sinta intimidado, pode mandar emails ou comentários. Infelizmente estou com pouco tempo livre ultimamente, e é aí que retorno pode ser de grande valia pois vai ajudar a me orientar nos pequenos espaços de tempo livre que aparecerem.

Uma coisa que atrapalhava muito no TagMap era a coleta de dados e sua subseqüente inserção. Na época não convoquei ninguém pra ajudar, mas também a coisa ficou parada, embora a falta de tempo e o fato da aplicação ser mais uma curiosidade do que uma utilidade falaram mais alto.

TagGen sofre de uma dificultade parecida, pois inserir as magias, habilidades e itens no banco da aplicação podem demandar um tempo razoável. Se você quiser ajudar com a inserção de dados (e outras coisas), deixei uma página explicativa no site: ComoAjudar.

Formatos de Arquivo Amigáveis

Uma coisa que tentei em TagMap foi fazer um script para extrair os dados das localizações direto do arquivo do Livro de Ambientação, pego do fórum (acho que era um fórum, faz um tempo já) de Tagmar 2. O arquivo era um .doc do Word, que é um formato fechado, por isso abri no OpenOffice.org e salvei como .odt, formato aberto que por dentro é XML, daí fiz algo como o descrito num post anterior, me baseando na estrutura de títulos (“Título 1″, “Título 2″, etc) consegui resultados razoáveis. Às vezes, porém, a pessoa (ou pessoas) que editou o arquivo usava texto comum para títulos, mudando apenas o tamanho da fonte, que é diferente de um título “real” apesar da semelhança, e isso quebrava a estrutura do documento e melava o script. Mesmo assim vou tentar novamente essa abordagem, mas certamente vou precisar de revisores. ;)

Se você estiver lendo e for contribuidor direto do projeto Tagmar 2 (me considero contribuidor esporádico com 2 graus de indireção), eu sugeriria o uso do OpenOffice.org (ou BrOffice.org aqui no Brasil) e do formato .odt para os livros de Tagmar 2, pois estaria mais de acordo com a natureza de liberdade que em primeiro lugar possibilitou a existência do projeto. Perceba que não é só pela questão filosófica, que é bem forte, mas tenha em mente, como deixei claro no parágrafo anterior, coisas abertas (formatos, códigos) são mais amigáveis para quem quer inventar algo novo. Se alinhando melhor com tecnologias de software livre e padrões abertos o projeto Tagmar 2 pode atrair a atenção de desenvolvedores, podendo surgir coisas como, um exemplo que me ocorre agora, um sistema web de edição de coleções (magias, itens, criaturas), para posterior geração de arquivos que necessitariam de poucas alterações de diagramação para lançamento. Esses dados organizados podem servir para alimentar outras idéias e por aí vai. Contudo, sendo realista, não estou sugerindo que abandonem um sistema de produção que está funcionando, e muito bem, haja vista a qualidade do material. Proponho somente que algumas melhorias são possíveis, digamos colocar os arquivos “fonte”, os documentos, sob um controle de versão, e/ou ter um sistema de controle de bugs para melhor rastrear defeitos nos livros. Verdade que não freqüento muito os fórums do projeto e posso estar chovendo no molhado, mas não faz mal deixar o recado.

Novamente quero parabenizar o povo do projeto Tagmar 2, valendo mencionar o pessoal da arte, que manteve (na minha opinião) o clima das ilustrações do primeiro Tagmar; e também o Marcelo Rodrigues que tem guiado muito bem esse barco.

Nota para mim mesmo: lembre de colocar uma nota sobre a licença do conteúdo usado no TagGen, conforme esse post.

Habemus VoIP!

Finalmente consegui fazer minha primeira chamada de VoIP com o Ereséva! Viva!
Mas antes de explicar o problema, deixe-me mostrar a arquitetura da coisa toda.

Tapioca-Ereséva
Álvares de Azevedo é uma cara conectado

Funciona assim: o Ereséva usa Tapioca-Python (que é um binding para Tapioca-GLib) para conectar às redes de IM e estabelecer sessões de VoIP; o framework Tapioca se comunica via D-Bus usando a especificação do Telepathy para solicitar serviços aos Connection Managers, que “traduzem” as solicitações recebidas para o protocolo relevante, e o mesmo no sentido oposto; para estabelecer uma sessão de VoIP entra em cena o Stream Engine, que usa GStreamer para montar um pipeline com os codecs necessários e controlar o fluxo de mídia entre a aplicação cliente e a rede.

Estava tentando voipar faz alguns dias, atormentando muitas pessoas no processo (ver lista dos voipadores no final), mas toda vez que um dos meus testadores atendia não se ouvia nenhum som, e a ligação caía. Analisando mais de perto, descobri que o Stream Engine estava dando erros de fluxo de dados, mas Birunko e Tester, do canal #tapioca-voip no Freenode, me mostraram que o problema estava no processo de build. Corrigido isso pude voipar em paz. Com uma ressalva: consegui ouvir, mas não ser ouvido. Pode ser um problema de configuração no microfone ou ainda um problema do Stream Engine. Mas vou deixar pra descobrir mais tarde pois o dever acadêmico chama!

Instalação

Para usar o Ereséva você precisa de instalar o que está descrito no Installation Guide do Tapioca, (incluindo o Tapioca-Python), então baixe:

svn co https://tapioca-voip.svn.sourceforge.net/svnroot/tapioca-voip/trunk/ereseva ereseva

e instale o Ereséva com aquele processo de build de sempre: ./autogen.sh, make, sudo make install, não esquecendo de instalar o pacote pylint (sudo apt-get install pylint).

O Ereséva ainda tem vários pequenos e irritantes bugs, então sinta-se a vontade pra bug-reportar os problemas que te incomodarem.

Heróicos VoIPeiros

Como disse antes, enchi o saco de várias pessoas com os testes, e a esses bravos e pacientes VoIPeiros eu presto homenagem. Principalmente porque o sofrimento deles está longe de acabar! MuaHAHAHa

Como prometido, vou agora torná-los famosos:

  • Chicoti
  • Davi “Mestre” Pires
  • David Aragão
  • Ian Moreira
  • Pedro Leite
  • Renata “Cachinhos” Garcia

Foi Renata a primeira com quem consegui falar usando o Ereséva (ela estava usando o GoogleTalk no Windows) e por isso exibo aqui o avatar simpsoniano que ela fez.

Avatar Renata Cachinhos

Update: obrigado a Renata Bezerra, por ter pacientemente ajudado a corrigir as altamente bugadas e incompletas (pelo lado do Tapioca-Python) instruções de instalação da wiki do tapioca!

Renatas ajudam! :)

Ereséva – codinome Azevedo (ex-Colligo)

No último episódio o Colligo havia sido citado positivamente no Ars Technica, mas logo após aconteceu de descobrirmos através de um comentário que o nome Colligo pertencia a uma empresa gold parceira da Microsoft. O humor do universo em que vivemos é mesmo insuperável, me pergunto se existirá algum universo chato onde só aconteceriam coisas sem graça.

Depois de muita procura Kenneth apareceu com o nome Ereséva, que em Tupi quer dizer algo como “o quê você quer dizer”. O problema de trademark estava acabado, mas não o de pronúncia, então durante uma reunião onde todos falaram o nome das formas mais variadas e criativas, Lauro (não o Moura, mas o Lauro sênior, que acha que blog é coisa de miguxo) saiu com Azevedo. Birunko (que é um miguxo que também não tem blog), acrescentou que numa linguagem há muito esquecida Azevedo significava “aquele que faz VoIP”. E assim foi escolhido o codinome totalmente não oficial do projeto.

AzeVoIP
Álvares de Azevedo, o garoto propaganda totalmente não oficial do Ereséva

Desde a última vez que falei do Colligo Ereséva várias coisas (além do nome) mudaram, e apesar de ter uns bugs menores vou deixá-los quietos e me concentrar em fazer o VoIP funcionar, porque tá todo mundo perguntando disso. :)

Agora o screenshot obrigatório pra mostrar o estado do codinome Azevedo:

Ereséva

Pra baixar e instalar (e testar e relatar bugs! :D) siga as instruções aqui, lembrando de trocar colligo por ereseva.

Vala para Mobile with Lasers, digo, com Figuras

O mesmo que falei antes, agora com figuras! (Porque sem figuras fica chato.)

O primeiro diagrama mostra um cenário com Mono sendo usado como plataforma de desenvolvimento para portáteis, o diagrama seguinte mostra o equivalente em Vala.

Mono foi escolhido como exemplo por Vala ser fortemente inspirada em sua sintaxe, e também por uma discussão na lista mobile-devel do GNOME, onde alguém pergunta o motivo de Mono não estar sendo considerado e dentre as resposta está uma de Jeff Waugh que diz: “Mono is a can of worms that no one really wanted to open”. (Leia o resto pra não tirar conclusões precipitadas.)

Não estou aqui desconsiderando os módulos/bibliotecas e outras coisas que vem junto com o Mono, esta é um comparação um tanto grosseira.

Mono_for_mobile
Mono: menos passos para compilação, mais peso no runtime.

Vala_for_Mobile
Vala: mais passos para compilação, mas o runtime nem precisou saber…