L2: Markdown y Github Wiki - myTeachingURJC/Mecatronica GitHub Wiki

Sesión Laboratorio 2

  • Tiempo: 2h
  • Objetivos de la sesión:
    • Familiarzarse con el formato Markdown
    • Manejo de la wiki de github
    • ¡Practicar!

Contenido

Introducción

En esta sesión aprenderemos a manejar la Wiki de Github usando el lenguaje de marcado Markdown

Usaremos la wiki con dos propósitos:

  • La creación de tu Bitácora personal: Es con la que se evaluará tu trabajo personal en la asignatura, junto con el repositorio
  • Documentación del proyecto en grupo

Repositorios de trabajo

En la asignatura trabajaremos con dos repositorios: Un repositorio personal (uno por estudiante) y un repositorio del proyecto (uno por grupo de trabajo). Ambos serán públicos

Repositorio personal: Mecatronica-2024-2025

Cada estudiante, a título individual, deberá crear un repositorio personal llamado Mecatronica-2024-2025. Este repositorio será público, y en él se irán subiendo todos los archivos relativos a las pruebas/experimentos que cada uno realiza para aprender o practicar

En este repositorio se debe crear una wiki que alojará la bitácora de trabajo personal de cada uno: dibujos, diseños, ... en general la evolución personal dentro de la asignatura. Las bitácoras son documentos personales y por tanto el lenguaje puede ser coloquial y poco preciso. Dan una idea cómo has ido evolucionando en la asignatura: qué cosas estás aprendiendo, qué diseños estás haciendo, qué errores has cometido y cómo los has solucionado. Todo esto a título personal

El objeto de esta bitácora, además de servir de documentación, es la de practicar el uso de las wiki y el Markdown. ¡La única manera de aprender es practicando!

Repositorio del grupo: Mecatronica-Proyecto

El proyecto de mecatrónica lo realizarás con tu grupo de trabajo en un repositorio público de Github. Primero debéis elegir a un representante de vuestro grupo de trabajo

  • El representante de cada grupo deberá crear el repositorio: Mecatronica-Proyecto. En ese repositorio se almacenarán todos los ficheros del proyecto (dibujos, imágenes, archivos 3D, código...)

  • El representante del grupo deberá dar permisos de escritura en ese repositorio a todos los miembros de su grupo de trabajo, para que puedan hacer sus commits directamente (Los miembros también pueden hacer un fork y emitir pull-request, pero es más rápido y fácil si envían directamente los commits)

  • La memoria del proyecto se realizará en formato markdown en la wiki del proyecto

  • El representante deberá crear la wiki, y dar permisos al resto de miembros de su grupo para editarla

  • En la página principal de la wiki deberá figurar también la información de todos los miembros del grupo, con los enlaces a sus cuentas de github

Parte I: Introducción a los Lenguajes de marcado

Antes de empezar con el lenguaje markdown vamos a presentar su contexto, y tener una idea más precisa del ecosistema de los lenguajes de marcado

Lenguajes y Metalenguajes

Para describir o explicar un proyecto en ingeniería utilizamos un lenguaje humano, como por ejemplo el Español (pero podría ser también el Inglés). Usando este lenguaje podemos escribir un documento técnico

Imaginemos que estamos escribiendo un documento técnico para describir nuestro último robot. Este es uno de los fragmentos:

Observamos varias cosas:

  • El documento tiene una estructura. Tiene un apartado, numerado como 1, y dentro hay un sub-apartado, denotado por 1.1 y a su vez, dentro de este hay un párrafo
  • Hay palabras especiales, que se han resaltado frente a otras. Aparecen con un estilo diferente: negrita
  • El apartado y el subapartado están numerados. Además de establecerse un orden, estos números nos permiten referenciar esos elementos. Así, en otras partes del documento podemos mencionar el apartado 1, el sub-apartado 1.1, etc...

Metalenguajes

Imaginemos ahora que este documento lo queremos escribir a través de otra persona, dictándoselo, o a través de una máquina con reconocimiento de voz, como Alexa. Si queremos obtener un resultado similar al anterior, no podemos meramente leer el texto tal cual. Es decir, NO funcionaría si decimos esto:

"Uno punto estructura mecánica está formada por las siguientes partes dos puntos chásis, cubierta y ruedas uno punto uno Chásis el chásis está diseñado para ser impreso en 3D punto consiste en una base hexagonal con dos vaciados rectangulares para el alojamiento de los motores..."

No funciona porque tenemos que añadir más información, no sólo el texto a escribir. Tenemos que explicar o indicar a qué categoría pertenece cada palabra (apartado, sub-apartado, párrafo), o qué atributos tiene esta palabra (negrita, cursiva) por ejemplo

Cuando usamos un lenguage para describir otro lenguaje o hablar sobre él, lo denominamos metalenguaje. Así, para obtener un documento como nosotros queremos tendríamos que decir algo como lo siguiente. Entre paréntesis se incluyen las palabras nuevas, que NO forman parte del texto que queremos escribir. Son las palabras del metalenguaje

"(Alexa comienza un documento nuevo) (Apartado 1) Estructura mecánica (Párrafo) Está formada por las siguientes partes: (Activa negrita)Chásis, cubierta y ruedas(Desactiva negrita) (Sub apartado 1.1) Chásis (Párrafo) El chásis está diseñado para ser (Activa negrita) impreso en 3D. Consiste en una (Activa negrita)base hexagonal(Desactiva negrita) con dos vaciados rectangualres..."

Las nuevas palabras que hemos añadido, NO tienen nada que ver con el documento técnico. No forman parte de este documento técnico. No se usan para describir nuestro robot ni aportar información técnica. Se usan para describir cómo representar las palabras del documento técnico: cada una, según su posición, con un estilo diferente

Así, las palabras y frases que hemos tenido que añadir para que una persona o una máquina (Alexa) nos escriba el documento técnico por nosotros son:

  • Comienza un documento nuevo
  • Apartado x
  • Sub-apartado x
  • Párrafo
  • Activa negrita
  • Desactiva negrita

Estas palabras forman nuestro Metalenguaje. Es nuestro LENGUAJE DE MARCADO, que nos permite hablar sobre el texto de nuestro interés. Con este ejemplo del dictado hemos visto que ESTAMOS OBLIGADOS a que existan estos metalenguajes, o de lo contrario no podríamos tener la posibilidad de desarrollar tecnología para que una máquina escriba o procese documentos por nosotros

Procesamiento automático

Disponer de un documento descrito con un lenguaje de marcado nos permite crear una estructura de datos en árbol para representarlo. Esto permite que otros programas puedan recorrer este árbol para analizar todas sus partes y procesarlas

En una primera fase, un analizador síntáctico lee el documento y crea la estructura de árbol, siempre y cuando la sintáxis del documento sea correcta. En caso de no serlo el analizador reporta un error

En una segunda fase, este árbol se le pasa a otro programa para que lo recorra y procese la información. Ejemplos de procesado automático sería la generación de una tabla de contenidos, la traducción a otro lenguaje (como HTML, PDF...), su representación en un dispositivo, etc.

Sintaxis del marcado: Etiquetas

La sintaxis usada para dotar de estructura a los documentos depende del lenguaje de marcado empleado. En lenguajes como GML, SGML, XML, HTML, XHTML, etc se utilizan etiquetas para delimitar las zonas del documento. Típicamente las etiquetas (tags) se escriben usando una palabra situada entre los símbolos < y >. Hay una etiqueta para comenzar el nuevo bloque, y otra para terminarlo:

  • Etiqueta de comienzo de bloque: <nombre>
  • Etiqueta de final de bloque: </nombre>

Para dar estructura a nuestro ejemplo, podríamos definir las siguientes etiquetas:

  • Documento: <documento> y </documento>
  • Apartado: <apartado> y </apartado>
  • Sub-apartado: <subapartado> y </subapartado>
  • Párrafo: <parrafo> y </parrafo>
  • Negrita: <negrita> y </negrita>

Usando estas etiquetas, nuestro documento ejemplo lo escribiríamos así:

<documento>
  <apartado>1. Estructura mecánica
    <parrafo>
      Está formada por las siguientes partes: <negrita>chásis</negrita>, 
      <negrita>cubierta</negrita> y <negrita>ruedas</negrita>
    </parrafo>
    <subapartado>1.1 Chásis
      <parrafo>
        El chásis está diseñado para ser <negrita>impreso en 3D</negrita>. 
        Consiste en una <negrita>base hexagonal</negrita> con dos vaciados rectangulares para el 
        <negrita>alojamiento de los motores</negrita>...
      </parrafo>
    </subapartado> 
  </apartado>
</documento>

Lenguajes de marcas simplificados o ligeros

Muchas veces utilizamos los lenguajes de marcado (XML o HTML) para escribir documentación. Es decir, les damos una estructura para poder modificar su presentación: que aparezca letras resaltadas en negritas, que las letras de los títulos sean más grandes, etc... En estos casos los lenguajes de marcado se hacen pesados y oscuros. Y no aportan apenas ventajas

Por ello, han aparecido los lenguajes de marcas ligeros. Son los que usan por ejemplo en la Wikipedia, o en el texto que estás leyendo en esta wiki. El lenguaje que vamos a utilizar es markdown

Parte II: Markdown

En esta parte describimos el lenguaje Markdown y lo utilizaremos para crear nuestra primera wiki

El Markdown es un lenguaje de marcado ligero, utilizado en los ficheros Readme.md de github, y también para escribir documentos en su wiki (Es lo que haremos en esta asignatura). Su sintáxis es muy ligera y espartana, lo que hace que se aprenda MUY RÁPIDAMENTE. Es un lenguaje que se ha popularizado muchísimo para escribir las documentaciones e instrucciones de nuestros programas

Encabezados

Los encabezados se escriben con el caracter #. Se pueden tener hasta 6 niveles:

# Encabezado nivel 1
## Encabezado de nivel 2
### Encabezado de nivel 3
#### Encabezado de nivel 4
##### Encabezado de nivel 5
###### Encabezado de nivel 6

Este es el resultado que producen en su presentación

Texto y saltos de línea

El texto se escribe normalmente y se renderiza siempre en la misma línea. Para comenzar un párrafo nuevo hay que introducir dos saltos de línea. También se pueden tener texto en líneas separadas si al final de cada línea se introducen dos espacios y un salto de línea

# Prueba de texto

Este es un texto que está en 
la misma línea, aunque en el 
editor se escribe en líneas separadas

Esto comienza en un párrafo nuevo
porque se han puesto dos saltos de línea

Y esto está en líneas sepadas  
porque tras cada linea hay  
dos espacios y un salto de línea

Al renderizarlo vemos el efecto que tiene

Listas

Las listas sin numeración se crean con un asterisco * al comienzo de la línea. Se pueden anidar colocando dos espacios delante del asterisco

# Listas no ordenadas

* Elemento 1
* Otro elemento
* Más elementos
  * Elemento anidado
  * Anidado 2
    * Anidado 3   

Se renderizan así:

Podemos crear listas ordenadas escribiendo directamente los números seguidos de un punto

# Listas ordenadas

Estos son los puntos a seguir:

1. Leer la documentación
2. Practicar
3. Practicar más
4. Y seguir practicando más y más

Y este es el renderizado:

Resaltado de texto

El texto se puede resaltar en cursiva colocando un * al comienzo y otro al final. Para resaltar en negrita se colocan dos asteriscos consecutivos **

# Resaltado de texto

Ejemplo de *texto en cursiva*  
Ejemplo de **texto en negrita**

Renderizado:

Código

Cuando queremos insertar texto que represente código, utilizamos tres apóstrofos para indicar el comienzo (```) y otros tres para indicar el final

```
# -- Ejemplo de código en python
a = 2
print("Programa en python")
print(f"La variable a vale {a}")
```

Esto se renderiza así:

Si tras el los tres apóstrofos iniciales indicamos el lenguaje de programación usado, se realizará un resaltado de sintáxis básico. Así, como el código anterior es python, lo podríamos poner así:

```python
# -- Ejemplo de código en python
a = 2
print("Programa en python")
print(f"La variable a vale {a}")
```

y se renderizaría así:

También podemos insertar código dentro de la línea, poniéndolo entre apóstrofos (`)

En python la expresión `print(f" a + b = {2 + 1} ")` produce como resultado `a + b = 3` 

Se renderiza así:

Enlaces internos y externos

Los enlaces a una página web externa se define utilizando esta notación: [Texto enlace](URL página). También podemos poner enlaces a cualquier encabezado definido en nuestro documento con esta sintáxis: [Texto enlace interno](#encabezado)

En este ejemplo se definen dos enlaces, uno externo y otro interno, al encabezado Enlaces

# Enlaces 

## Enlaces externos

En wikipedia encontramos más información sobre [markdown](https://es.wikipedia.org/wiki/Markdown)

## Enlaces internos

Aquí hay información sobre [los enlaces](#Enlaces) en markdwon

Esto es lo que se ve en el renderizado:

Imágenes

Las imágenes se introducen en el documento con la siguiente sintáxis: ![](imagen) donde imagen puede ser bien el nombre del fichero dentro de nuestro sistema de ficheros local o bien una URL de una imagen de internet

# Imágenes

## Imagen en fichero local

![](Logo-urjc.png)


## Imagen en URL

![](https://upload.wikimedia.org/wikipedia/commons/2/2f/CC_BY-SA_3.0.png)

Si tenemos el fichero Logo-urjc.png en la misma carpeta donde está guardado este fichero en markdown, el renderizado sería el siguiente:

Citas

Las citas se pone con el carácter > al comienzo:

# Citas

Un par de citas de Isaac Asimov:

> Escribo por la misma razón por la que respiro, porque si no lo hiciera, moriría

> Estoy convencido de que la autoeducación es el único tipo de educación que existe

Este es el renderizado:

Tablas

Se pueden hacer tablas muy básicas. El formato es el que utilizariamos si las quisieramos construir usando caracteres ASCII en un archivo de texto:

|         | Col 1 | Col 2| Col 3| Col4 |
|---------|-------|------|------|------|
|  Fila 1 |   1   |   2  |   3  |  4   |
|  Fila 2 |   2   |   4  |   6  |  8   |
|  Fila 3 |   3   |   6  |   9  |  12  |

El renderizado queda así:

Esta es otra tabla que incluye texto y enlaces. Fijate que la cantidad de espacios usados no influye. Las celdas pueden estar descuadradas. Es el renderizador el que dibuja la tabla con el tamaño exacto:

|          |  node.js  | Django | Flask | Electron |
|----------|-----------|--------|-------|----------|
| Lenguaje | Js        | Python | Python| js       |
| URL      | [link](https://nodejs.org/es/) | [link](https://www.djangoproject.com/)  | [Link](https://flask.palletsprojects.com/en/1.1.x/) | [Link](https://www.electronjs.org/) |
| Versión  |  14.15.5  | 3.1.6  | 1.1.2 | 11.2.3 |

Al renderizarlo queda así:

Parte III: Actividades guiadas

Es el momento de practicar. Primero practicaremos con el markdown, usando el VSCode. Después usaremos el markdown directamente en la wiki de nuestro repositorio personal

Practicando con Markdown en el VSCode

Todas las prácticas las haremos en nuestro repositorio personal, que debes crear en tu cuenta de github. Usa como nombre Mecatronica-2024-2025. Si no tienes el repositorio creado, aprovecha para crearlo ahora mismo

  • Crea el repositorio Mecatronica-2024-2025

La creación de repositorios la vimos en la sesión de laboratorio L1. Pon un texto en la descripción y pincha en la casilla de verificación corespondiente para que se cree un fichero README.md inicial

  • Clona el repositorio en tu orenador de trabajo
  • Abre el proyecto desde el VSCode
  • Visualiza el fichero README.md

Esto es lo que te debe aparecer:

Fíjate que el fichero README.md tiene la extensión .md. Esto significa que se trata de un fichero Markdown. Esto lo puedes ver también en la parte inferior derecha de la ventana del VSCode. Verás que dice Markdown

Los ficheros en Markdown están en texto plano por lo que se pueden editar con cualquir editor de textos. El VSCODE trae por defecto un visualizador de Markdowns, que nos permite ver una vista previa. Para ello pinchamos en el icono de la parte superior derecha (remarcado en rojo en la figura anterior). En la parte de la derecha nos aparecerá el texto renderizado

Vamos a practicar. Crearmos el fichero nuevo test.md. Como hemos usado la extensión .md el VSCode lo reconoce como Markdown y lo vemos escrito en la parte inferior

Ocultamos el explorador de archivos del VSCode (panel izquierdo) y abrimos la previsualización del fichero test.md

El previsualizador se actualiza según añadimos el código markdown, lo que resulta muy útil. Empezamos definiendo un encabezado y escribiendo un texto

Y ahora vamos añadiendo todos los elementos descritos en la sección anterior, para aprender y practicar (Se deja como ejercicio). No te olvides de subir la imagen del logo de la URJC (Logo-urjc.png), que debe estar junto al fichero test.md

El documento final será parecido a este:

Generar un fichero PDF a partir de Markdown

A partir de un documento en markdown se pueden generar documentos en PDF y html. Desde VSCode hay muchas extensiones que nos permiten trabajar con markdown. Para realizar conversiones podemos usar por ejemplo la extensión Markdown PDF

Para instalarla nos vamos a parte de las extensiones en VSCode y escribirmos Markdown en el buscador. Seleccionamos Markdown PDF y le damos a install

Abrimos el documento test.md y pulsamos con el botón derecho del ratón. Se nos desplegará un menú que tiene las opciones para exportar a los diferentes formatos. Pinchamos en Export (PDF)

Al cabo de unos segundos se nos habrá generado el fichero test.pdf

Nuestra wiki personal en Github

En esta wiki es donde deberás escribir tu Bitácora personal mostrando todos tus avances, los retos realizados y las cosas que vas aprendiendo

Crear la wiki

Empezamos creando primero la wiki. Ve a la página principal de tu repositorio personal (Mecatronica-2024-2025). En mi caso se ve así:

Pinchamos en la pestaña que dice Wiki. Como todavía no tenemos ninguna wiki creada, nos aparecerá una pantalla como esta:

Pinchamos en el botón verde que dice Create the first page. Nos aparecerá una página como esta:

Ya podemos introducir los datos de la nueva página. El título que tiene por defecto es Home. Lo podemos cambiar al que más nos guste (página principal, documentación, etc...)

Por defecto la página está configurada para admitir markdown, que es el que usaremos, pero son válidos otros formatos. En la parte central es donde introducimos el texto. Por defecto se ha inicializado con el mensaje Welcome to the Mecatronica-2024-2025 wiki!

En la parte inferior podemos añadir (opcionalmente) comentarios a los cambios realizados. Pinchamos en el botón Save Page para crear y almacenar la página

Nos aparece el aspecto actual de la página. En la parte superior del navegador tenemos la URL completa de nuestra página principal de la wiki. Esta es la dirección que utilizaremos para dar acceso directo a otras personas a nuestra documentación

La dirección de la wiki de mi repositorio de ejemplo es: https://github.com/Obijuan/Mecatronica-2022-2023/wiki

En la parte superior derecha vemos que pone un "1" al lado de Pages. Esto nos indica que actualmente la wiki contiene sólo 1 página. Es la que acabamos de crear

Editando una página de la wiki

Para modificar una página de la wiki pinchamos en el botón superior derecho que pone Edit. Vamos a editar nuestra página principal:

Al apretar el botón de EDIT entramos en el modo edición y podemos añadir más textos. Por defecto estamos en la pestaña que pone Write: modo de escritura

En cualquier momento podemos pinchar en la pestaña Preview para ver una previsualización del texto markdown actual. Como de momento sólo hemos introducido texto normal, no notaremos mucha diferencia (salvo que en el modo de previsualización NO nos permite escribir)

Volvemos a la pestaña Write para continuar escribiendo. Vamos a escribir un texto en Negrita. Para ello utilizamos los dos asterioscos colocados delante y detrás de la frase a convertir en negrita: **Texto en negrita**

Github nos ofrece la posiblidad de hacerlo a través de la interfaz web, seleccionando el texto y pinchando en el botón B. Nos añade automáticamente los dos asteriscos. En esta animación se muestra el proceso: Se añade el texto en negrita, se previualiza y se vuelve al modo write:

En la barra de formato (Marcada como 1 en la figura) tenemos más opciones: encabezados (h1, h2, h3), itálica, enlace, imágenes... Las netritas están marcadas con el número 2 en la figura:

Una vez terminada la edición, pinchamos en el botón de Save Page. Este es el aspecto actual de nuestra wiki:

Historial de la wiki

Debajo del título (Home en mi caso) nos aparece el número de ediciones que hemos realizado hasta el momento: 2. Si pinchamos en ese enlace vemos el historial de la wiki: todos los cambios que se han realizado hasta llegar a la versión actual

En la izquierda están los comentarios de los cambios (por defecto, nos añade un nombre si nosotros no hemos escrito ningún comentario). En la derecha aparece un código que enlaza a la wiki que había en esa versión. Vamos a pinchar para ver cómo estaba:

En la URL que aparece en el navegador podemos ver si estamos accediendo a la última versión o bien a alguna anterior. Por ejemplo, la URL de la primera versión es:

https://github.com/Obijuan/Mecatronica-2022-2023/wiki/Home/b003e6eb5518355573f50624130c373f598b1b79

Mientras que la última versión de la página principal estará siempre en esta URL:

https://github.com/Obijuan/Mecatronica-2022-2023/wiki

Colocando una imagen de prueba

Las imágenes en la wiki se añaden en dos pasos:

  • Paso 1: Subir la imagen a tu repositorio
  • Paso 2: Enlazar la imagen usando markdown desde la wiki

Como ejemplo de colocar una imagen en la wiki utilizaremos la que ya hemos subido previamente: El logo de la URJC ()

El paso 1 ya está, por tanto, completado: la imagen se encuentra ya en nuestro repositorio. Nos vamos al repositorio en la web y localizamos el fichero: copiamos su URL

Ahora editamos la wiki y ponemos el enlace a la imagen utilizando la notación markdown (también podemos usar la barra de formato)

Animación

Y así es como queda la wiki de momento

¡A Practicar!

La única manera de dominar algo es practicando. Hay que practicar, practicar y practicar. Cuanto más se practique, mucho mejor
Puedes practicar como más te guste, pero yo te propongo aquí algunos retos

Reto 1: Tu CV

Una manera muy buena de comenzar una bitácora de trabajo (pública), es dando información sobre tí (¡Sin poner datos personales!). Una especie de mini-currículum: Formación, Intereses, situación actual, fotos...

Reto 2: Comienza tu bitácora

Piensa en cómo organizar tu bitácora. Esta es la segunda sesión de Laboratorio, y ya hemos practicado con Github/VisualCode y el Markdown. Te propongo empieces la bitácora describiendo estas cosas que has aprendido, los problemas encontrados, cómo tienes pensado organizarla, etc...

Resumen de tareas a realizar

  • Créate el repositorio Mecatronica-2024-2025 en tu cuenta personal de github
  • Créate una wiki en el repositorio Mecatrónica-2024-2025. Ahí estará tu bitácora personal
  • Elige un responsable de tu grupo de trabajo
  • El responsable debe crear el repositorio Mecatronica-Proyectos
  • El responsable dede crear la wiki en el repositorio Mecatronica-Proyectos
  • Haz los ejemplos de la sesión presencial
  • ¡Haz los retos!

Conclusiones

Tras finalizar esta sesión, ya tenemos todas las herramientas listas para documentar y almacenar nuestro proyecto y trabajo personal. Sabemos usar un repositorio desde VSCode, crear documentos en Markdown locales y escribir en las wikis de github

Autores

Licencia

Créditos

Enlaces

⚠️ **GitHub.com Fallback** ⚠️