emacs, ikiwiki, software libre, texinfo

Aprendiendo ikiwiki

Recientemente he descubierto ikiwiki. Y diréis ¿para qué otro wiki? pues bien a mi me resuelve muchos problemas, pero hay uno que es importante y es poder editar las entradas de mi sitio web personal directamente con mi emacs y poder administrarlas con un sistema de control de versiones, sin el desfase de usar un sitio html estático, ni el atraso de usar herramientas privativas como disqus. Así que es probable que este sitio en un futuro esté construido con ikiwiki, pero por ahora solo lo estoy evaluando. Dejo aquí mis impresiones:

¿Qué es ikiwiki?

ikiwiki is un compilador wiki. Construye páginas html para un wiki desde un fuente en el lenguajes de marcas ikiwiki (u otros).

Instalación

Muy sencillo en debian/ubuntu:

sudo apt-get install ikiwiki apache2

Y seguir los pasos de debconf para el tipo de control de version, la carpeta donde se situará el repositorio, etc.

Por tanto, también habrá que instalar un sistema de control de versiones, por defecto se usa git, aunque yo también he testeado bzr y funciona sin problemas.

En caso de elegir git:

sudo apt-get install git gitweb

Después habra que compilar un wiki local:

ikiwiki --setup /etc/ikiwiki/auto.setup

Es posible que tengas que configurar mínimamente el apache. Por ejemplo, habilitar el módulo userdir:

a2enmod userdir

O habilitar el uso de cgi.

Instalar plugins

  1. Descargar plugins desde http://ikiwiki.info/plugins/ a la carpeta ~/.ikiwiki/IkiWiki/Plugin/
  2. Especificar el lugar del fichero de configuración del wiki desde ~/.ikiwiki/wikilist (En mi caso es ~/wiki.setup)
  3. Aplicar los cambios con ikiwiki -setup /home/davidam/wiki.setup -rebuild -v

A modo de ejercicio, os proponemos que también instaleis el plugin de org-mode y de texinfo que a pesar de no ser plugins estables son poderosos :-).

Habilitar multilenguaje con po

Quienes estén familiarizados con el proceso de traducción en gnu estarán familiarizados con gettext y los ficheros .po, sino es posible echar un vistazo a Traduciendo Documentación en Texinfo con emacs y po4a

Para que nuestro sitio sea multilingüe usando ficheros .po es necesario modificar la configuración de ikiwiki y el apache.

Primero modifiquemos la configuración de ikiwiki:

  1. Habilito po en la configuración
  2. master language: en|English
  3. slave languages: es|Español
  4. PageSpec controlling which pages are translatable: index or po-test (dos páginas para comprobar que todo va bien)
  5. internal linking behavior: default

Después la configuración de Apache:

  1. Añadir la siguiente línea a por ejemplo /etc/apache2/sites-available:
    DirectoryIndex index.html index.htm index.en.html index.es.html
  2. Añadir a /etc/apache2/httpd.conf lo siguiente:
    AddType application/rss+xml;qs=0.8 .rss 
    AddType application/atom+xml;qs=0.8 .atom
    

Habilitando búsquedas

  1. Se habilita search en la configuración
  2. Al aplicar los cambios encuentro el siguiente error:
    Can't locate Search/Xapian.pm in @INC (@INC contains: /home/davidam/.ikiwiki /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at (eval 342) line 2.
    BEGIN failed--compilation aborted at (eval 342) line 2.
    
  3. Lo soluciono con:
    sudo apt-get install libsearch-xapian-perl xapian-omega

Habilitando barra lateral

  1. Habilitar sidebar en la configuración
  2. Crear una página sidebar.mdwn con el contenido que se desee

Modificando el aspecto

Lo más sencillo es habilitar themes en la configuración y elegir un tema. Pero para afinar más se puede crear un fichero local.css en el directorio raíz subirlo al repositorio e (importante) reconstruir el wiki con

ikiwiki -setup /home/davidam/wiki.setup -rebuild
Anuncios
Estándar
emacs, software libre, texinfo

Traduciendo Documentación en Texinfo con emacs y po4a

Texinfo es el formato de marcas estándar para documentación de GNU. Permite crear manuales en formato pdf, info, html, etc. desde un solo fichero fuente .texi con las características avanzadas que debería tener un buen manual.

Antes de familiarizarnos con los comandos del proceso de traducción instalemos los paquetes debian que vamos a utilizar:

apt-get install texlive texinfo texi2html emacs23 gettext-el po4a aspell-es dict dict-freedict-eng-spa dict-freedict-spa-eng dictionary-el dict-gcide

Si tenemos un fichero texinfo y queremos convertirlo a pdf se puede usar el siguiente comando:

texi2pdf myfile.texi

El problema con texi2pdf es que a veces no ofrece buenos mensajes de depuración, para depurar es mejor hacerlo con:

makeinfo myfile.texi

Además con este comando se crea el fichero .info

Si queremos crear un sitio web con nuestro documento podemos usar:

texi2html myfile.texi

Si se desea traducir el fichero del inglés al español u otras lenguas es posible utilizar gettext gracias a po4a. Siguiendo estos pasos:

  1. po4a-gettextize -f texinfo -m myfile.texi -p myfile.pot # Crea un fichero .pot a partir de un .texi
  2. cp myfile.pot myfile.es.po
  3. Se traduce del inglés al español abriendo myfile.es.po con emacs en modo po-mode
  4. po4a-translate -f texinfo -m myfile.texi -p myfile.es.po -l myfile.es.texi # Creamos myfile.es.texi, el texi traducido

Es probable que con el tiempo salgan nuevas actualizaciones del fichero .texi original, podemos actualizarnos con msgmerge del siguiente modo:

  1. po4a-gettextize -f texinfo -m myupdated.texi -p myupdated.pot # Crea el fichero .pot actualizado a partir del nuevo .texi
  2. msgmerge myold.es.po myupdated.pot > myupdated.es.po

Las frases en las que haya habido variaciones aparecerán como fuzzy debiendo ser debidamente revisadas.

Y ahora vemos algo de configuración del .emacs para hacer más fácil y divertida la traducción:


;;;; PO-MODE ;;;;
(require 'po-mode)
(defun iacute()
(interactive)
(insert "@'{@dotless{i}}"))
;; El atajo C-i insertará i acentuada, a la manera nativa de texinfo
(define-key po-subedit-mode-map "\C-i" 'iacute)

;; Debe cortar las líneas automáticamente
(add-hook 'po-subedit-mode-hook 'auto-fill-mode)

;;;; ASPELL ;;;;
;; Para que avise
(setq ispell-program-name "aspell"
ispell-extra-args '("--lang=es"))
(add-hook 'po-subedit-mode-hook
(lambda()
(flyspell-mode 1)))

;;;; Dictionary ;;;;
(global-set-key "\C-cs" 'dictionary-search)
(global-set-key "\C-cm" 'dictionary-match-words)

Estándar