Saltar a contenido

1. Sistemas de documentación

Dos partes: Sistemas de documentación web y de indexación

1.1 Gestion Documentos web

Algunos de los paquetes disponibeles:
- Sphinx and ReadTheDocs y - web
- https://matplotlib.org/sampledoc/

1.1.1 MKDOCS

Simple y directo para creación de páginas estáticas [Mkdocs web])https://www.mkdocs.org/)

Módulos en python. Guia de inicio
En este servidor instalado en el entorno ./Proy/mienv, que debe activarse...

pip install mkdocs
Otros paquetes necesarios:
* Material para mkdocs

pip install mkdocs-material
* mermaid2 plugin ver mkdocs marmaid 2

pip install mkdocs-mermaid2-plugin[test]
* Monorepo en github

pip install mkdocs-monorepo-plugin
* Enumerating headinn plugin

pip3 install mkdocs-enumerate-headings-plugin

1.1.1.1 Commands

For full documentation visit mkdocs.org. * mkdocs new [dir-name] - Create a new project. * mkdocs serve - Start the live-reloading docs server. * mkdocs build - Build the documentation site. * mkdocs -h - Print help message and exit.

1.1.1.2 Project layout

bubble_sort.py
    mkdocs.yml    # The configuration file.
    docs/
        index.md  # The documentation homepage.
        ...       # Other markdown pages, images and other files.

1.1.1.3 Code Blocks (ver doc)

La colorización de la sintásis de los bloques de código se realiza en el desarrollo con Pygments y en tiempo ejecución con Javascript

Configuración
en mkdocs.yml:

markdown_extensions:
  - pymdownx.highlight:
      anchor_linenums: true
  - pymdownx.inlinehilite
  - pymdownx.snippets
  - pymdownx.superfences
Algunos usos para los bloques de código

Enlaces

titulo

ejemplo
Añadimos la siguiente línea en la cabecera del bloque
py title="bubble_sort.py"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
Da como resultado
bubble_sort.py
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]

Número de líneas py linenums="1"

Subrayado de lineas

py hl_lines="2 3"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
Se ve:
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]

Bloques código inline

Es necesario activar la extensión de markdown inlineHilite.

Se activa en mkdocs.yml

markdown_extensions:
  - pymdownx.highlight
  - pymdownx.inlinehilite
Los bloques se señalan con el prefijo #! seguido del lenguaje entre estos lenguajes.

Ejemplo:

The `#!python range()` function is used to generate a sequence of numbers.
Se muestra:
The range() function is used to generate a sequence of numbers.

Incluir ficheros Con la extensión de markdown snippet configurada se pueden incluir ficheros de cualquier tipo.
Se configuran con

markdown_extensions:
  - pymdownx.snippets
Se utiliza incluyendo #!--8<-- notation dentro del bloque de código, como en :

   ``` title=".browserslistrc"
    --8<--​ ".browserslistrc"
    ```
Da como resultado:
.browserslistrc
--8<--​".browserslistrc"
revisar no funciona

1.1.1.4 Plugin

Existen dos tipos de plugin: incluidos con mkdocs y de terceros.
Como ejemplo de los plugin incluidos, tenemos search.
Para la lista de plugins:

Tenemos la lista de plugin en github, y una amplio artículo sobre plugin disponibles y mas

Cuando se incluyen otros plugin, se deben configurar los incluidos:

plugins:
    search: {}
    your_other_plugin:
        option1: value
        option2: other value

1.1.1.4.2 mkpdf

Genera documentación en formato pdf (en git)

plugins:
    - search
    - mkpdfs
Requisitos:
* this package requires MkDocs version 1.0 * Python 3.4 or higher * WeasyPrint depends on cairo, Pango and GDK-PixBuf which need to be installed separately. Please follow your platform installation instructions carefully: * Linux * MacOS * Windows

Para Ubuntu, instalar primero:

apt install python3-pip python3-cffi python3-brotli libpango-1.0-0 libharfbuzz0b libpangoft2-1.0-0
python3 --version
pango-view --version
If the version of Pango provided by your distribution is too old, you can use version 52.5 of WeasyPrint which does not need recent Pango features.

pip install weasyprint
weasyprint --info
1.1.1.4.3 Material for mkdocs

El mejor plugin de tema : material for mkdocs
Enlace a ref de material Algunas configuraciones usadas: Navigation tabs. Muestra barra de navegación en la cabecera con pantallas grandes.

theme:
  features:
    - navigation.tabs
Para cambiar el ancho del área de presentación del documento:

 .md-grid {
  max-width: initial; 
}
initial indica un ancho de toda la pantalla.

1.1.1.4.4 mkdocs-mermaid2-plugin

Permite incluir ficheros mermaid en ficheros markdown.
Repositorio en github.
Instalación:

pip install mkdocs-mermaid2-plugin
**Configuración ** En el fichero .yml:

plugins:
    - search
    - mermaid2
Uso
Con un bloque "fence" con etiqueta mermaid

graph TD
A[Client] --> B[Load Balancer]
B --> C[Server01]
B --> D[Server02]

graph TD A[Client] --> B[Load Balancer] B --> C[Server01] B --> D[Server02]
No funciona con superfence ver : https://facelessuser.github.io/pymdown-extensions/extras/mermaid/#putting-it-all-together y este otro: https://github.com/fralau/mkdocs-mermaid2-plugin#declaring-the-superfences-extension

Para usar los gráficos mermaid:

1.1.1.4.5 monorepo

Plugin para integrar varios proyecto mkdocs en uno.
Para instalar monorepo:

$ pip install mkdocs-monorepo-plugin
Uso:

1.1.1.4.6 mkdocstring

Documentación automática desde el código fuente para mkdocs (mkdocstring)

1.1.1.5 Como integrar ficheros html

El objetivo sería mantener el menú lateral.

1.2 Sistemas de indexación

Tenemos:

Xapian

1.3 Lenguaje MARKDOWN

Para empezar esta guía opensource que incluye una hoja resumen

En especial, para incluir html seguimos estos consejos

Javascript se pasa tal y como se escribe en el .md.
Si se necesitan librerias se incluyen en el fichero de configuración

1.3.1 Trucos

Para incluir imagenes de Google Drive : Obtenemos la dirección, por ejemplo: https://drive.google.com/file/d/1cMaJWkL_KBACvlXwBqIlCRm1qyYIqeON/view y utilizamos la siguiente notación:

![caja](https://drive.google.com/uc?export=view&id=1cMaJWkL_KBACvlXwBqIlCRm1qyYIqeON) 
Es decir :  
https://drive.google.com/uc?export=view&id=[id_imagen]  id_imagen obtenido del enlace de drive

1.4 Herramientas para enseñar javascript y otros

Un punto de inicio interesante es el proyecto de google Open Online Education y su course builder
Para un manual en español de la uam

Sigue en este documento local

1.5 Otras Herramientas

  • Herramientas video, audio blackboard: artículo

1.5.1 Editor en javascript codemirror

Codemirror es un editor de texto implementado en javascript y con soporte para varios lenguajes de programación

1.5.2 Playground opensource integrables en paginas

1.5.2.1 Runjs

runjs es un playground para desktop.

1.5.2.2 Flems

Flems es una app web estátics permite .... Como editor utiliza codemirror. Para usarlo se utiliza el siguiente código:

<script src="https://flems.io/flems.html" type="text/javascript" charset="utf-8"></script>
<script>
const flems = Flems(document.body, {
    files: [{
        name: 'app.js',
        content: 'm.render(document.body, m("h1", "Hello world"))'
    }],
    links: [{
        name: 'mithril',
        type: 'script',
        url: 'https://unpkg.com/mithril'
    }]
})
</script>
Que se ve en el siguiente enlace

1.5.3 OTROS A EXPLORAR

1.5.3.1 Richie

Richie es un CMS para cursos basado en Django y distribuido usando docker.

1.6 Prueba con botones javascript

---------- - Pandoc **REVISAR** REVISAR APPRUN ------------------------------- ```mermaid graph TD; POM --> ProjectInfo["Información del Proyecto"] POM --> Dependencies["Dependencias"] POM --> Repositories["Repositorios"] POM --> Plugins["Plugins"] POM --> Properties["Propiedades"] POM --> Build["Construcción"] ProjectInfo --> groupId["groupId"] ProjectInfo --> artifactId["artifactId"] ProjectInfo --> version["version"] ProjectInfo --> name["name"] ProjectInfo --> description["description"] Dependencies --> dependency["dependency"] Repositories --> repository["repository"] Plugins --> plugin["plugin"] Properties --> property["property"] Build --> finalName["finalName"] Build --> resources["resources"] Build --> pluginsInBuild["plugins"]