TagMap aceito pela comunidade Tagmar

Ontem conversei com Marcelo Rodrigues, um dos criadores do Tagmar original (fato que eu esqueci, e que foi seguido por uma gafe; shame on me!) e líder do projeto Tagmar 2. Ele me propôs tornar o TagMap parte do projeto Tagmar 2, com direito à link na página e tudo mais. Claro que achei excelente!

Marcelo lembrou que as licenças do TagMap (GPL) e do Tagmar 2 (Creative Commons Atribuição-Uso Não-Comercial-Compatilhamento) são incompatíveis, pois a GPL permite a comercialização e a outra não. Contudo, lembrando o caso da Id Software, que costuma liberar o código fonte de seus jogos como software livre, mas deixando de fora o conteúdo do jogo (fases, monstros, objetos, etc), chegamos a conclusão que podemos lançar o TagMap seguindo os rigores da lei mantendo ele como GPL e deixando claro os direitos e a licença sobre as imagens e textos vindas do projeto Tagmar 2.

Seja como for, só depois do carnaval.

Anúncios

TagMap 0.6

Mais um release do TagMap, com uma quantidade expressiva de alterações.

captura_da_tela-tagmap-mapa-interativo-de-tagmar.png

Uma das novas funcionalidades é a lista (com busca) de locais, que pode ser vista à esquerda no screenshot. Ainda faltam outras funcionalidades e sobram alguns bugs, mas está bastante usável, então sinta-se livre para me dizer os defeitos ou novas idéias.

Downloads para windows (depois um pacote pra Debian/Ubuntu):

“Deployment” em Windows com Py2Exe e NSIS

Deployment segundo a wikipedia:

Software deployment é toda atividade que torna um sistema de software disponível para uso.

Como o TagMap é feito em Python+GTK, e pelo que vi o público interessado é composto majoritariamente de usuários de windows, pedir que eles instalem Python, GTK+ e PyGTK pra só então chegar em meu humilde programa, certamente seria uma barreira. Claro que tem o excelente All-in-one PyGTK for windows installer, mas se dá pra facilitar por quê não?

As duas ferramentas necessárias são o Py2Exe, responsável por tornar o script um legítimo executável, e o NSIS, que serve para criar instaladores next-next-finish e que vai fazer todo mundo te olhar como gente grande. ;P

Py2Eexe

O Py2Exe cria o executável a partir de um arquivo de configuração, no caso do TagMap foi o setup_win32.py. Observando o arquivo você verá que não é muito complicado, só substituir alguns valores e pronto; claro que mudanças maiores vão exigir algum estudo, mas se o seu projeto for em PyGTK com Glade pode pegar o meu e apenas trocar os valores (como eu mesmo fiz 😉 ).

No prompt do DOS (ugh!) e no diretório do programa execute:

python setup_win32.py py2exe

Depois de algum trabalho por parte do script será gerado um diretório dist contendo (no meu caso) tagmap.exe, alguns DLLs e outros arquivos. Para executar em qualquer computador basta instalar antes GTK, mas ele também pode ser embutido.

Uma bom código para observar e aprender (e copiar) é o do GAJIM.

NSIS

Com o MakeNSIS que vem com o Nullsoft Scriptable Install System você pode ler um script que descreve o roteiro das perguntas feitas pelo instalador next-next-finish. Claro que ninguém vai ler só apertar o botão insistentemente até chegar no final. Meus scripts são o installer.nsi e installer_gtk.nsi, ambos podem ser facilmente adaptados para outros projetos. Como o nome deve indicar, o segundo script cria um instalador que coloca o GTK junto com o programa, pode parecer um desperdício de espaço, mas com as conexões rápidas e os HDs grandes de hoje em dia esse é um problema muito menor que mandar o usuário baixar um monte de dependências manualmente.

Bem, não tem muito mais o que explicar, até porque ainda estou aprendendo, mas um tutorial completo e direto pode ser encontrado em PyGTK and Py2Exe HowTo.

E os instaladores do TagMap (numa versão muito alfafa) pra windows, com e sem GTK:

P.S.: Um agradecimento especial pra minha gatinha que pacientemente me ajudou a testar. :*

TagMap, Mapa Interativo para Tagmar 2

Nos idos de… não lembro, acho que foi no meio da década de 1990. Continuando, há muito tempo atrás botei as mãos no meu primeiro RPG: Tagmar. Com cenário clássico de fantasia medieval tolkieniana e regras muito boas (um lance de d20 dizia ao mesmo se você acertou o golpe e quanto dano causou), ele me garantiu os mais divertidos (e mais baratos) domingos da minha adolescência com escassez de namoradas.

Devido à mudanças no mercado de RPG e outras coisas (às quais eu acrescento a controversa perseguição por parte de uma revista nacional, quem é das antrolas sabe do que tou falando) Tagmar faleceu, junto com sua editora, a GSA. Contudo, em 2004, um grupo de intrépidos jogadores, junto com os autores, liberaram os direitos sobre o sistema numa licença Creative Commons, nascendo daí o projeto Tagmar 2, que desde então vem sendo desenvolvido no bom e velho estilo Open Source, e qualquer colaboração é bem-vinda. O trabalho é muito competente, as regras foram melhoradas (e extensivamente testadas em casa e nos eventos) e a ambientação está sendo continuamente expandida.

Com tudo isso eu me animei e fiz uma aplicação de mapa interativo em Python + GTK (= PyGTK ;P) e a batizei com o infame nome TagMap. Agora um screenshot para distraí-los:

TagMap 0.2

TagMap tem recursos de:

  • zoom
  • identificação de regiões, cidades e locais
  • cálculo de distância percorrida numa rota traçada pelo usuário (experimente clicar duas vezes e com o botão direito sobre o mapa)

Esta é uma versão bem inicial e bem poucos dados sobre as regiões foram introduzidas, além do algoritmo de verificar se um ponto está dentro de uma região estar bem tosco. Mas isso será resolvido com o tempo (um certo tempo…).

Não tive tempo de fazer um executável para os usuários de Windows, mas basta baixar e descompactar o TagMap, instalar Python/GTK/PyGTK [1], e dar um clique duplo no arquivo tagmap.py, que roda numa boa.

O próximo passo é o obrigatório gerador de personagens. Pretendo fazê-lo flexível e com a possibilidade de evoluir o personagem, gerar fichas de boa aparência e quem sabe compartilhar personagens.

Não espere! Faça o download do TagMap agora!
Comentários e críticas são mais bem-vindos que uma escada-rolante na Ponte de Palier (não posso ser mais nerd que isso! ;P).

[1] Felizmente uma alma caridosa fez um instalador pra esses três caras de uma vez: PyGTK All-in-One Installer

Pacote Debian/Ubuntu para o LogicParser

Seguindo esse excelente tutorial, consegui fazer um pacote pra instalar o LogicParser em distribuições derivadas do Debian. Antes de explicar como foi, tenho de dizer que fazer o primeiro pacote .deb é totalmente lol. Não me perguntem por quê, é algo totalmente emocional. 😉

LogicParser Debian Package

A coisa foi muito facilitada por eu já estar usando autotools no projeto, como expliquei num post anterior, e pelo fato da aplicação ser bem simples. Tudo que tive de fazer foi usar um par de utilitários debian: dh_make e debuild.

Para instalar o que é preciso (além do build-essential):

apt-get install dpkg-dev debhelper devscripts fakeroot linda dh-make

Agora é necessário criar um diretório debian dentro do diretório da aplicação. Normalmente eu trabalho com a versão do SVN num diretório chamado logicparser, mas para fazer o pacote .deb é necessário usar um esquema de nome que inclua a versão da aplicação separada por um hífen, então fiz uma cópia chamada logicparser-0.7.2.

Uma vez dentro de logicparser-0.7.2 executei o comando

dh_make --native --single --email meuemail@mail.com

Isso cria um diretório debian com vários arquivos template, a maioria desnessária para uma aplicação simples, então foram apagados:

rm debian/*.ex debian/*.EX debian/README*

O parâmetro –native significa pacote debian nativo, que foi a forma que escolhi pra fazê-los; –single diz que a aplicação consiste de apenas um executável.

O único arquivo que precisou ser alterado foi o debian/control, para acrescentar uma descrição, a versão e arquitetura alvo:

Source: logicparser
Section: universe/misc
Priority: optional
Maintainer: Marcelo Lira dos Santos <meuemail@email.com>
Build-Depends: debhelper (>= 5), autotools-dev
Standards-Version: 0.7.2

Package: logicparser
Architecture: i386
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Simple parser and calculator for logic propositional expressions. Parser of logical propositions. It generates a parsed tree, a graph in DOT format, and renders it in PNG if GraphViz is available. It also calculates the expression based in values given by the user.

Em seguida a compilação via o script debian/rules dentro de um ambiente fakeroot:

fakeroot debian/rules binary

E finalmente as criação do pacote .deb (ele deve aparecer fora do diretório logicparser-0.7.2):

debuild -us -uc

Esses dois parâmetros são para desabilitar a assinatura de pacotes, o que me faz lembrar que já tá na hora de eu arrumar uma chave PGP…

Foi mais fácil do que pensei, embora saiba que a coisa pode ficar bem mais elaborada. Depois vou ver como automatizar ainda mais o processo a ponto de dar um make deb ou algo assim.

Downloads:

LogicParser 0.7

Novo release do LogicParser, estou ficando quase satisfeito, mais alguns refinamentos e pode virar 1.0.

LogicParser 0.7LogicParser 0.7 Hosted on Zooomr

O problema da vez foi o “Ajustar para caber”, pois precisava mudar o zoom pra ficar de acordo com tamanho do Viewport, e este não tem um método óbvio do tipo “get_width”. A solução foi:

vp_width = GTK_WIDGET(lpApp->viewport)->allocation.width - 4;
vp_height = GTK_WIDGET(lpApp->viewport)->allocation.height - 4;

ou seja, todo GtkWidget tem uma propriedade “allocation” que por sua vez tem as propriedades “width” e “height”. (O -4 foi só pra compensar algum espaçamento.)

Além disso essa versão precisa desesperadamente ter seus memory leaks corrigidos, alguns zooms e logo terá 100Mb de memória ocupados. Estou protelando o uso do Valgrind.

Download: logicparser-0.7.tar.gz