**Cartofonías**

Esta es una narrativa de datos, es decir un documento que combina prosa, código, datos y visualizaciones,
para dar cuenta de un argumento.
Es nuestro caso, la presente narrativa corresponde al proyecto Amanecer la Palabra de revitalización lingüística de las lenguas de Los Pueblos del Centro, en La Chorrera, Amazonas colombiano.
Específicamente, esta narrativa se articula al [microwiki de Cartofonías](https://paula2.tiddlyhost.com/), que explica en mayor detalle el proyecto.
Acá cubriremos temas como:
- [x] Unas breves convenciones de lectura.
- [x] Prerrequisitos de software para poder ejecutar esta narrativa de datos e importarla en el computador propio.
- Respecto al microwiki
- [x] Cómo visualizarlo, mostrando la plantilla base y el nuevo material creado.
- [x] Cómo crear trazabilidad histórica (copias de seguridad).
- [x] Cómo descargarlo, de forma que pueda ser usado fuera de línea, particularmente en los territorios selváticos.
# Convenciones de lectura
- El texto en azul corresponde a los hiperenlaces. Por ejemplo, este es un enlace al [microwiki de Cartofonías](https://paula2.tiddlyhost.com/).
- El texto en versalitas corresponde a código computacional en Pharo.
Por ejemplo:
`ProfStef pharoZenValues "muestra los valores del Zen de Pharo."`
- `>>> Los tres signos "mayor que" seguidos indican el resultado de un cálculo desde Pharo.`
# Prerrequisitos
Esta narrativa de datos
está escrita desde [Lepiter](https://lepiter.io/feenk/introducing-lepiter--knowledge-management--e2p6apqsz5npq7m4xte0kkywn/), en el [Glamorous Toolkit](https://gtoolkit.com/).
Una familiaridad inicial con ambos entornos es necesaria para ejecutar dicha narrativa.
En caso de que no se tenga, recomendamos vincularse a la comunidad de [Grafoscopio](https://mutabit.com/grafoscopio/)
para aprender con ella y los distintos canales de comunicación y materiales educativos que han preparado,
en clave de alfabetismos críticos en datos y código usando estas plataformas.
**Necesario**:
* [TiddlyWiki](https://tiddlywiki.com/): el motor de microwikis minimalista y autocontenido en un archivo HTML.
* [Glamorous Toolkit](https://gtoolkit.com/) (o GToolkit): El entorno interactivo de cómputo donde se escribió y ejecuta la narrativa.
* [MiniDocs](https://code.tupale.co/Offray/MiniDocs/): Herramientas de documentación minimalista, utilizadas para compartir y publicar esta narrativa, así como para interactuar con sistemas exteros de documentación ligera (HedgeDoc, Markdown, Markdeep).
* [TiddlyWikiPharo](https://code.sustrato.red/Offray/TiddlyWikiPharo): Herramienta para gestionar microwikis, hechos en TiddlyWiki, desde el entorno de programación Pharo/GToolkit.
* [Nim](https://nim-lang.org/): Lenguaje de programación para escribir rutinas de optimización en la lectura y transformación de archivos.
Algunas veces usamos MiniDocs en interacción con Nim para escribir pequeños programas autocontenidos y multiplataforma,
que no están disponibles en el ecosistema de Pharo, que es la plataforma sobre la que está construido GToolkit o que se ejecutan más rápido o de modos más robustos.
La intensión es que este requerimiento sea temporal y a futuro MiniDocs descargue los binarios
para cada plataforma donde se ejecuta (Windows, Gnu/Linux y/o Mac) de manera automática.
* [Fossil SCM](https://fossil-scm.org/): Es el sistema donde almacenamos y publicamos nuestras narrativas de datos y sus historiales.
**Recomendable**:
# Importar esta narrativa de datos
Para importar esta narrativa de datos en tu propio computador ejecuta este trozo de código:
# Visualizar el wiki
Definamos el wiki
Hagamos una mirada panorámica de todos las hiperfichas o tiddlers (en la terminología de TiddlyWiki, el motor wiki que usamos para este proyecto) que creamos para el mismo.
Con el siguiente comando aparecerán resaltadas en azul los tiddlers creados después de el primero de octubre de 2023,
cuando empezamos a implementar el microwiki para el proyecto:

Notamos que el wiki tiene una zona muy densa de conexiones y unos clusters en la periferia con conexiones entre ellos.
Los clusters pefiréricos en azul corresponde a los índices de contenido del proyecto,
que apuntan a otras hiperfichas con información puntual para cada uno de los pueblos del centro y sus cantos/arrullos.
# Trazabilidad histórica
Por omisión, TiddlyWiki no implementa un mecanismo de versionado para crear históricos de sus contenidos,
a diferencia de la mayoría de motores wiki existentes.
Esto debido a su historia y diseño, que lo pensó como un wiki personal más que colectivo,
por un lado y por otro, a que pudiera funcionar sin las complejidades de un servidor.
Por lo anterior, la comunidad de TiddlyWiki implementando distintos mecanismos de gestión de históricos y este proyecto usa tres:
1. los provistos por [TiddlyHost](https://tiddlyhost.com/), el sitio donde hospedamos estos wikis,
2. los provistos por [Timini](https://github.com/ibnishak/Timimi), el plugin para almacer y modificar los wikis fuera de línea y
3. un desarrollo propio, combinando [TiddlyWikiPharo](https://code.sustrato.red/Offray/TiddlyWikiPharo) con [Fossil](https://fossil-scm.org/),
que nos permite compartir los cambios que hagamos en y fuera de línea,
tener control preciso de cuándo los sincronizamos y ver las diferencias precisas entre versiones.
Una consecuencia colateral de este enfoque, es que desplegamos con él un sistema robusto y redundante de copias de seguridad para el trabajo realizado,
así como la posibilidad de sincronizar el trabajo que se haga en contextos de conectividad baja o intermitente,
como las de este proyecto.
Esta sección hablará de cómo desplegar la tercera opción.
Empecemos por seleccionar todos los tiddlers que han sido creados para este proyecto,
lo cual se puede hacer por la fecha de creación:
`>>> an Array(a Tiddler( Amanecer la Palabra ) a Tiddler( BotonNuevaCartofonia ) a Tiddler( CajaDeHerramientas ) a Tiddler( Canto Lagartija ) a Tiddler( Cartofonía Pueblo Bora ) a Tiddler( Cartofonía Pueblo Muinane ) a Tiddler( Cartofonía Pueblo Okaina ) a Tiddler( Cartofonía Pueblo Uitoto ) a Tiddler( Cartofonías ) a Tiddler( Cartofonías de Ejemplo ) a Tiddler( CartofoniasMacros ) a Tiddler( Ceniza ) a Tiddler( Créditos ) a Tiddler( defaultTid ) a Tiddler( Diccionario Lengua Bora ) a Tiddler( Diccionario Lengua Muinane ) a Tiddler( Diccionario Lengua Okaina ) a Tiddler( Diccionario Lengua Uitoto ) a Tiddler( DiccionarioBoraTemplate ) a Tiddler( DiccionarioTemplate ) a Tiddler( El Achero ) a Tiddler( El Armadillo y el Zancudo ) a Tiddler( El Baile de los Puercos ) a Tiddler( El Búho ) a Tiddler( El Camarón ) a Tiddler( El Cangrejo ) a Tiddler( El Canto Ritual ) a Tiddler( El Diablo ) a Tiddler( El Maní ) a Tiddler( El Pájaro Pichichui ) a Tiddler( El Pez y el Pájaro ) a Tiddler( El Tente ) a Tiddler( El Tintín ) a Tiddler( El Tucán ) a Tiddler( El Tucán Contento ) a Tiddler( Entregables ) a Tiddler( Ficha cartofónica canto ) a Tiddler( Ficha cartofonica georeferenciada ) a Tiddler( Ficha cartofonica georeferenciada 1 ) a Tiddler( FichaCartofoniaTemplate ) a Tiddler( La Araña y la Danta ) a Tiddler( La Danta y la Sanguijuela ) a Tiddler( La Hormiga ) a Tiddler( La Serpiente y la Niña/Niño ) a Tiddler( Mico ) a Tiddler( PersonalizacionesDelWiki ) a Tiddler( Plantilla de ficha para cartofonía ) a Tiddler( PruebaDeCartofoniasClasicas ) a Tiddler( Ratón en la Trampa ) a Tiddler( Refrescar las cookies ) a Tiddler( SnapRuleMode ) a Tiddler( Tintín ) a Tiddler( Wikis interpersonales ))`
Agreguemos ahora los tiddlers de acuerdo al usuario que aparece como su modificador.
Requerimos para ello que su modificador no sea nulo
y que pertenezca a un listado de autores predeterminado que corresponde a nuestros usuarios en cada uno de los wikis interpersonales.
Primero ubiquemos el conjunto de todos los editores en el microwiki:
`>>> a Set('Sttot' 'arunnbabu81' 'Offray Luna' 'mutabit' 'Offray Vladimir Luna Cárdenas' 'MAS' 'Sylvain Comte' 'Offray Luna-Cárdenas' nil 'BJ')`
Y definamos como nuestros editores del wiki, el resultado anterior sin los usuarios que son editores externos (por ejemplo aquellos del wiki que usamos como plantilla).
`>>> a Set('Offray Luna' 'mutabit' 'Offray Vladimir Luna Cárdenas' 'Offray Luna-Cárdenas')`
!!! tip
Nota que los tiddlers realizadas por otras editoras estan los resultados almacenados en la variable `datedTiddlers`, que calculamos previamente.
Sin embargo el código previo nos permite capturar, además de los wikis por fecha, los wikis por autor/editor.
En la medida en que vayamos configurando mejor los wikis interpersonales que se juntan en este proyecto,
se harán más explicitos las otras co-autorías, con el nombre de usuario configurado en cada wiki.
Encontremos los wikis que corresponden a nuestras ediciones
`>>> an Array(a Tiddler( AlterItem ) a Tiddler( CheckItem ) a Tiddler( CheckItemDoc ) a Tiddler( ChecklistWidget ) a Tiddler( ContadorPalabras ) a Tiddler( DicierFontStyle ) a Tiddler( DicierMacro ) a Tiddler( FontsTest ) a Tiddler( GuiaMacro ) a Tiddler( ImgCentered ) a Tiddler( KeyboardShortcuts ) a Tiddler( KeyboardShortcutsDoc ) a Tiddler( KeyboardStyle ) a Tiddler( KeyboardStylePruebas ) a Tiddler( leinonen-software-2008 ) a Tiddler( leyendaFigura ) a Tiddler( LinkAliases ) a Tiddler( LinkedScaledImageDoc ) a Tiddler( LinkedScaledImageMacro ) a Tiddler( Pocket Infrastructures ) a Tiddler( QuickLinks ) a Tiddler( Tiddlers ) a Tiddler( TrozoDeCodigo ))`
Así, todos los wikis que han sido creados para el proyecto estarán definidos como:
`>>> an Array(a Tiddler( Amanecer la Palabra ) a Tiddler( BotonNuevaCartofonia ) a Tiddler( CajaDeHerramientas ) a Tiddler( Canto Lagartija ) a Tiddler( Cartofonía Pueblo Bora ) a Tiddler( Cartofonía Pueblo Muinane ) a Tiddler( Cartofonía Pueblo Okaina ) a Tiddler( Cartofonía Pueblo Uitoto ) a Tiddler( Cartofonías ) a Tiddler( Cartofonías de Ejemplo ) a Tiddler( CartofoniasMacros ) a Tiddler( Ceniza ) a Tiddler( Créditos ) a Tiddler( defaultTid ) a Tiddler( Diccionario Lengua Bora ) a Tiddler( Diccionario Lengua Muinane ) a Tiddler( Diccionario Lengua Okaina ) a Tiddler( Diccionario Lengua Uitoto ) a Tiddler( DiccionarioBoraTemplate ) a Tiddler( DiccionarioTemplate ) a Tiddler( El Achero ) a Tiddler( El Armadillo y el Zancudo ) a Tiddler( El Baile de los Puercos ) a Tiddler( El Búho ) a Tiddler( El Camarón ) a Tiddler( El Cangrejo ) a Tiddler( El Canto Ritual ) a Tiddler( El Diablo ) a Tiddler( El Maní ) a Tiddler( El Pájaro Pichichui ) a Tiddler( El Pez y el Pájaro ) a Tiddler( El Tente ) a Tiddler( El Tintín ) a Tiddler( El Tucán ) a Tiddler( El Tucán Contento ) a Tiddler( Entregables ) a Tiddler( Ficha cartofónica canto ) a Tiddler( Ficha cartofonica georeferenciada ) a Tiddler( Ficha cartofonica georeferenciada 1 ) a Tiddler( FichaCartofoniaTemplate ) a Tiddler( La Araña y la Danta ) a Tiddler( La Danta y la Sanguijuela ) a Tiddler( La Hormiga ) a Tiddler( La Serpiente y la Niña/Niño ) a Tiddler( Mico ) a Tiddler( PersonalizacionesDelWiki ) a Tiddler( Plantilla de ficha para cartofonía ) a Tiddler( PruebaDeCartofoniasClasicas ) a Tiddler( Ratón en la Trampa ) a Tiddler( Refrescar las cookies ) a Tiddler( SnapRuleMode ) a Tiddler( Tintín ) a Tiddler( Wikis interpersonales ) a Tiddler( AlterItem ) a Tiddler( CheckItem ) a Tiddler( CheckItemDoc ) a Tiddler( ChecklistWidget ) a Tiddler( ContadorPalabras ) a Tiddler( DicierFontStyle ) a Tiddler( DicierMacro ) a Tiddler( FontsTest ) a Tiddler( GuiaMacro ) a Tiddler( ImgCentered ) a Tiddler( KeyboardShortcuts ) a Tiddler( KeyboardShortcutsDoc ) a Tiddler( KeyboardStyle ) a Tiddler( KeyboardStylePruebas ) a Tiddler( leinonen-software-2008 ) a Tiddler( leyendaFigura ) a Tiddler( LinkAliases ) a Tiddler( LinkedScaledImageDoc ) a Tiddler( LinkedScaledImageMacro ) a Tiddler( Pocket Infrastructures ) a Tiddler( QuickLinks ) a Tiddler( Tiddlers ) a Tiddler( TrozoDeCodigo ))`
Con esta nueva subcolección es posible graficar de nuevo los tiddlers para tener una idea más clara de lo que hemos cocreado para este proyecto:

Si reunimos las gráficas anteriores, los tiddlers cuyos históricos queremos versionar son los que aparecen en siguientes gráficas, coloreados en tanto en azul como en magenta y que están almacenados en la variable `ourTiddlers`:
 
Definamos el lugar del disco duro donde guardaremos el microwiki:
Ahora guardemos cada uno de los tiddlers creados para el proyecto en la subcarpeta `tiddlers/` en dicha localización:

Desde la consola de comandos, ubicados en la ubicación del repositorio de Fossil que hemos creado para el proyecto,
agregamos todos los tiddlers de los cuales queremos tener copias de sus históricos.
~~~bash
fossil add wikis/tiddlers/*
~~~
~~~bash
>>>
ADDED wikis/tiddlers/Amanecer-la-Palabra--TJecuo8fxuut.ston
ADDED wikis/tiddlers/BotonNuevaCartofonia--mNvXV3Nb4WQs.ston
ADDED wikis/tiddlers/CajaDeHerramientas--mmoNT2GvxXwY.ston
ADDED wikis/tiddlers/Canto-Lagartija--TGCXPnWPFpZa.ston
ADDED wikis/tiddlers/CartofoniasMacros--iCM21c1FJ62r.ston
ADDED wikis/tiddlers/Cartofonía-Pueblo-Bora--Wtd4E3DRJHPL.ston
ADDED wikis/tiddlers/Cartofonía-Pueblo-Muinane--z88qgjNYWydG.ston
ADDED wikis/tiddlers/Cartofonía-Pueblo-Okaina--jCBbMPwmDwiQ.ston
ADDED wikis/tiddlers/Cartofonía-Pueblo-Uitoto--peDB9of1ouJa.ston
ADDED wikis/tiddlers/Cartofonías--LgwM71fQLoVg.ston
ADDED wikis/tiddlers/Cartofonías-de-Ejemplo--gsnDfjr1SW7L.ston
ADDED wikis/tiddlers/Ceniza--GRxMKKThjoiv.ston
ADDED wikis/tiddlers/CheckItem--TKSzinnVao9y.ston
ADDED wikis/tiddlers/CheckItemDoc--BdbKdjotBPQc.ston
ADDED wikis/tiddlers/ChecklistWidget--8XNhLmEYQ5Eu.ston
ADDED wikis/tiddlers/ContadorPalabras--psAgxwTu1geU.ston
ADDED wikis/tiddlers/Créditos--sgBXUZ33ctML.ston
ADDED wikis/tiddlers/Diccionario-Lengua-Bora--Nm1KnwxriRLx.ston
ADDED wikis/tiddlers/Diccionario-Lengua-Muinane--KAzipZCGnK4W.ston
ADDED wikis/tiddlers/Diccionario-Lengua-Okaina--gnDYThiSM5z6.ston
ADDED wikis/tiddlers/Diccionario-Lengua-Uitoto--J7xRwqPhDz7C.ston
ADDED wikis/tiddlers/DiccionarioBoraTemplate--3BXPL2XhY53v.ston
~~~
Y enviamos los cambios al repositorio:
~~~bash
fossil commit -m "Agregando tiddlers/hiperfichas del proyecto al repositorio."
~~~
Si navegamos el repositorio en línea del proyecto por sus archivos veremos que contiene el listado de todos los tiddlers creados para y/o durante el proyecto:
. ](https://i.imgur.com/vyqR470.png)
Podemos notar que, cuando exportamos los tiddlers como archivos,
se agregó un elemento alfanumérico extra al final de su nombre.
Por ejemplo, el tiddler titulado "Amanecer la Palabra", es exportado como `Amanecer-la-Palabra--TJecuo8fxuut.ston`.
Este indicador alfanumérico único (conocido técnicamente como un NanoID)
permite rastrear los cambios en un tiddler, así su título cambie y se convierte en parte de los metadatos del mismo.
Dado que hemos agregado esta metainformación a los tiddlers en el proceso de su exportación,
necesitamos reimportarlos de vuelta al wiki con ella.
A esto nos dedicaremos a continuación.
!!! warning
**Pendiente**: Faltan documentar y desarrollar las narrativas de datos y funcionalidades para:
- [x] Serialización de tiddlers con metadatos nuevos.
- [x] Reimportación del wiki en línea con tiddlers actualizados.
- [x] Descarga del wiki fuera de línea, incluyendo material multimedia (imagen audio y video).
- [ ] Depuración de errores en la descarga de archivos (ejemplo: nombres de archivos con extensiones en mayúsculas, como `JPG` en vez de `jpg`.
Creemos un nuevo microwiki donde podamos importar sólo los tiddler creados y exportados con los metadatos extra
Mientras se hacía la exportación de los tiddlers con los nuevos metadatos agregados,
se descubrió un inconveniente con la manera en que se estaba recuperando los tiddlers desde el formato STON
(de ahí la importacia del control de versiones en la información del wiki!).
Así que es necesario ejecutar un comando que lo corrija:
Y reexportar los tiddlers con las correcciones:
Y luego volvemos a hacer commit en el repositorio:
~~~bash
fossil commit -m "Prueba de etiquetas arregladas."
~~~

Ahora exportemos los tiddlers en un único archivo JSON que podamos arrastrar entre distintas versiones de los wikis
!!! tip
El archivo JSON que produce la anterior exportación puede ser arrastrado desde la carpeta donde se genera a cualquiera de los microwikis de las co-autoras.
Esto sincronizará los wikis entre sí.
Ahora necesitamos explorar cómo hacer que sus contenidos se puedan ver fuera de línea.
# Wiki fuera de línea
Encontremos todos los tiddlers que contienen metadatos que apuntan a recursos externos en Internet:
![ Figure [mediaTiddlers]: Detalle de los (34) tiddlers que contienen enlaces a archivos multimedia externos. ](https://i.imgur.com/D8NvlbD.png)
Tomemos el primer enlace y verifiquemos que podemos descargar todos los archivos multimedia asociados a este y agregar llaves nuevas que apunten a la información original:


Vemos que la mayoría de campos han sido adecuadamente sustituidos, si bien se presentan inconvenientes con algunos, como aquellos en los que la extensión del archivo web está en mayúsculas (`JPG` en lugar de `jpg`, como muestra la gráfica anterior).
Además, el wiki contiene las carpetas con los archivos descargados:

Dado que tenemos una prueba mínima funcional, podemos escalarla a todos los tiddlers del wiki:
!!! tip
El proceso anterior puede tardar bastante tiempo, dependiendo del tamaño de los archivos a descargar.
Una vez haya terminado la descarga y revinculación de los archivos de medios (audio, imagen y video) externos,
es posible comprobar su completitud de dos maneras:
bien sea revisando la subcarpeta `external/` que deberá contener muchos archivos de medios;
o bien tomando cualquiera de los tiddlers en `mediaTiddlers` y revisando las sustituciones del wiki,
que, precisamente, indican a cuales tiddlers se les realizó el cambio de un enlace remoto por uno local:
![ Figure [substitutions]: Diccionario de sustiticiones aplicadas a los tiddlers. ](https://i.imgur.com/HNU3xhR.png)
Como podemos apreciar en la imagen previa, el tamaño de las sustiticiones es el mismo que en la figure [mediaTiddlers] (es decir, 34),
con lo cual vemos que todas las substituciones fueron aplicadas.
Dado que la información sobre las sustituciones puede ser útil para auditar y corregir la adecuada descarga de archivos externos vinculado al wiki,
guardémosla en un archivo:
y agreguémosla dentro del repositorio del mismo:
~~~bash
fossil add wikis/substitutions.ston
~~~
Ahora exportemos los tiddlers modificados como archivo JSON y reimportémolos al wiki:
!!! tip
El archivo JSON que produce el paso anterior debe ser arrastrado al archivo HTML que contiene el wiki fuera de línea.
# A modo de cierre
!!! warning
Por redactar.