Trac Page2Docbook Plugin 0.6

Acabo de promover a beta o Page2Docbook; o plugin para o Trac que referi recentemente.

Produzir documentos, outra vez

Faz mais de um ano que andei em busca de uma boa forma de produzir documentos e, não tendo encontrado uma solução perfeita, resolvi reduzir o âmbito do tipo de documentos em causa e concentrar-me na produção dos documentos que tipicamente aparecem durante o processo de desenho e desenvolvimento de software.

A ideia foi simples; partir das funcionalidades de wiki do trac e adicionar a capacidade de exportar cada página como docbook. A partir de uma exportação para docbook, há uma série de opções que se abrem em termos de conversões para outros formatos.

Para chegar aí tinha duas opções, ou converter directamente do formato wikitext do trac, ou partir do xhtml (strict!) que o trac gera a partir do wikitext. A primeira opção consegue-se implementar com umas quantas expressões regulares, mas parece-me talvez mais difícil conseguir prever os casos todos (sobretudo se se tiverem em conta os outros formatos que se podem encontrar misturados com wikitext, nos quais não queria mesmo ter de pensar). A segunda opção pede claramente a utilização de uma folha de estilo XSLT (apesar de também existirem outro tipo de soluções). Convenientemente, encontrei algumas folhas de estilo que fazem já esta conversão, de xhtml para docbook. As mais promissoras foram:

Esta última é a mais completa, e com a qual as minhas experiências funcionaram melhor.

Agora basta juntar água (ou por outras palavras, usar os bindings do python para libxml e libxsl) e temos um plugin para o trac ;) A bem dizer, já ando a usar uma versão alpha deste plugin há uns meses. Na altura criei um espaço no trac-hacks para alojar o projecto. Nos próximos dias espero portar o código para o trac 0.11.1 e torná-lo usável por terceiros. Os interessados fiquem por perto ;)

Primeiros passos com Erlang

Vou brevemente arrancar com um pequeno projecto em que um dos requisitos será utilzar uma linguagem funcional. Existindo a necessidade de trabalhar com comunicações e com alguma concorrência, tenho andado a olhar para Erlang. A minha experiência com linguagens funcionais tem sido reduzida, aliás, nula, se pensarmos que XSLT e Python têm influências de linguagens funcionais, mas não são linguagens funcionais em si mesmas, por isso estou com alguma curiosidade em ver no que isto dá.

A ideia passa por ter uma aplicação em C# (Mono + MonoDevelop) a falar com um servidor em Erlang, coisa que ainda não estou certo que seja fácil, apesar de haver alguns indicadores de que deverá ser possível.

Para já estou em busca do IDE certo para o módulo em Erlang. Em princípio, devo-me ficar pelo Erlide (um plugin para o eclipse), já que o Erlybird funciona em cima do NetBeans (em relação ao qual não tenho nada contra, mas entre este e o Erlide, prefiro rentabilizar a experiência que tendo com o eclipse) e o Distel não é um verdadeiro IDE (eu até gosto do emacs como editor, mas por muita boa vontade que tenha, aquilo, de facto, não é um IDE).

LaTeX, Wikis, Docbook, e que mais?

No outro artigo que escrevi sobre formas de produzir documentos já houve quem desse alguns palpites interessantes, mas vou tentar resumir melhor as possibilidades que tenho considerado.

  • Latex – Principais pontos fracos são a curva de aprendizagem (é fácil aprender o básico, mas perco tipicamente demasiado quando preciso de fazer algo de novo) e a sintaxe pouco amigável (sobretudo quando se usam tabelas ou se incluem imagens). Contudo, a qualidade de apresentação do resultado final é a melhor que conheço.
  • Docbook – É XML e, por consequência , algo verboso. No entanto, consegue-se estruturar um documento de forma muito clara. As ferramentas de edição e processamento de docbook é que nem sempre funcionam de forma tão integrada quanto gostaria. Para windows o sistema mais integrado que conheço é o eDE (que faz uso de umas folhas de estilo XSLT que transformam Docbook em XSL-FO e do processador de XSL-FO da Apache).
  • Wiki – Ao contrário da opinião de muita gente não acho a sintaxe do wiki tão amigável quanto isso, mas a verdade é que cumpre a sua função e mantém um certo grau de simplicidade. Por outro lado, as ferramentas que apoiam a edição são geralmente bem fraquinhas; mesmo repartindo por várias páginas os vários capítulos de um documento, as coisas começam a ficar difíceis de gerir quando existe conteúdo consideravelmente extenso em cada uma dessas páginas (convém gravar frequentemente, e cada gravação começa a demorar cada vez mais tempo à medida que aumenta a quantidade de texto a enviar para o servidor Web). Não é também, à partida, das abordagens mais orientadas a documentos impressos.
  • ODF – Tanto quanto sei não é possível separar conteúdo de apresentação de forma clara. Neste momento a única implementação digna desse nome é o OpenOffice.
  • OOXML – Além das desvantagens do ODF, é caro, considerando que para o usar é necessário contentarmo-nos com o MSOffice.
  • GoogleDocs – Excelente para trabalho colaborativo mas tem na minha opinião umas quantas outras limitações.

Já vi, com base nestas opções, também uma solução híbrida entre um wiki e o docbook :) Um meu amigo criou um script python que exporta para docbook um conjunto de páginas de um mediawiki, para posterior geração de um PDF com o eDE. Aproveitam-se vantagens das duas abordagens e o resultado final é bastante decente. Mantêm-se no entanto as desvantagens de usar os limitado editores dos wikis.

Uma outra solução, que me parece promissora, é a que estão a usar no DjangoBook (um livro livre sobre o projecto django). Estão a usar um sistema (desenvolvido pelos próprios mentores do projecto) com umas funcionalidades engraçadas, nomeadamente, permite à comunidade comentar o livro que estão a escrever com a granularidade de parágrafos. A ideia é posteriormente exportar os conteúdos para um qualquer formato mais orientado à impressão. O código deste projecto não está disponível, mas encontrei entretanto um outro projecto paralelo, que é praticamente uma cópia do anterior. Ainda lhe devo dar uma vista de olhos com mais atenção, mas parece-me apesar de tudo algo aquém do que queria, sobretudo porque não vejo forma de versionar o documento e as limitações do editor que encontro num wiki mantêm-se também aqui.

Além destas, haverá mais alguma opção digna de nota?