Un Codelab es un conjunto de diapositivas que sirven como tutorial interactivo, se puede crear utilizando Google Docs o un archivo markdown. Para ver algunos ejemplos de Codelabs, se puede visitar el sitio de Google Codelabs.

Características

Principalmente, un archivo md para Codelabs se compone de 2 partes:

  1. Metadata: son datos que usa el motor de Codelab para publicar correctamente el Codelab. .
  2. Conetenido: es tal cual el contenido del Codelab, éste es escrito utilizando markdown. Si se requiere, se puede leer esta guía básica de sintaxis markdown.

La metadata es lo primero que se debe agregar en el archivo markdown con el formato key: value. La metadata requerida para la publicación del Codelab es:

summary: How to Write a Codelab
id: how-to-write-a-codelab
categories: howto
tags: howto, Codelabs, tutorial
status: Draft
authors: Erik Valdivieso, Miguel Osbaldo

Como ya se mencionó antes, se requiere de un documento markdown para crear un Codelab. Este documento tiene una sintaxis normal de markdown, a excepción de los headers que ya se explicaron anteriormente y de la estimación de tiempo por paso.

El header # será el título/nombre d,

También se debe seguir unos formatos específicos para la inserción de fragmentos de código, más adelante se especificará éstos.

Para indicar un estimado de cuánto tiempo tomará avanzar por las diapositivas, se utiliza el metadata Duration insertándolo debajo de cada encabezado de nivel 2 (es decir ##).

A esta metadata se le asigna un valor entero, el cual indica los minutos que se estima se tardará en completar la diapositiva, p.e Duration: 4 indica que se estima que esa diapositiva se completará en 4 minutos.

El tiempo total se calculará automáticamente y se mostrará en el Codelab una vez se haya creado.

El motor de Codelabs interpreta estos fragmentos de código y les da un formato dependiendo de cómo se inserten. Para incluir fragmentos de código, se debe hacer de dos formas:

JavaScript

Si se inserta un bloque de código Javascript, se tendría que escribir de la siguiente manera:

```javascript
{
  key1: "string",
  key2: integer,
  key3: "string"
}
```

Esto se vería de la siguiente forma:

  {
    key1: "string",
    key2: integer,
    key3: "string"
  }

Java

Si el código es en lenguaje Java

```java
for (int i = 1; i < length i++;) {
  // bloque de código
}
```

El resultado sería:

for (int i = 1; i < length i++;) {
  // bloque de código
}

Para publicar un Codelab en CONACyT se debe cumplir con ciertas reglas:

  ejemplo-de-nombre-1.md
  +---- assets
        +---- ejemplo-de-nombre-1
             |---- imagen-1.png
             |---- imagen-2.png
             |---- imagen-3.png

Las categorias por default de Codelabs son:

drawing about

drawing ads

drawing analytics

drawing android, android-kotlin, android-tv

drawing android-auto

drawing android-things

drawing android-wear

drawing assistant

drawing ar, ar-core, augmented-reality, augmented-reality-core

drawing cardboard, games, play-games, vr, virtualreality, virtualreality-games, virtual-reality, virtual-reality-games

drawing gsuite, g-suite, apps

drawing docs

drawing drive

drawing sheets

drawing slides

drawing blockly

drawing cast, chromecast, chrome-cast

drawing chrome, google-chrome, googlechrome

drawing cloud, cloud-about, cloud-general, cloud-other, cloud-others, cloud-platform, cloud-tools, cloud-cloud-tools

drawing cloud-appengine, cloud-app-engine

drawing cloud-bigquery, cloud-big-query, bigquery, big-query

drawing cloud-build

drawing cloud-compute, cloud-compute-engine

drawing cloud-data, cloud-sql

drawing cloud-datalab, cloud-data-lab

drawing cloud-iam

drawing cloud-iot, cloud-iot-core, iot-core, iot

drawing cloud-key-management-service, cloud-kms

drawing cloud-ml, cloud-machine-learning

drawing cloud-monitoring, cloud-monitor

drawing cloud-networking, cloud-network

drawing cloud-security, cloud-security-command-center

drawing cloud-web, web

drawing design

drawing firebase, firebase-web

drawing flutter, flutter-firebase, flutter-android, design-flutter

drawing google-maps, googlemaps, maps, geo

drawing nest

drawing openthread, open-thread

drawing search

drawing slurm, hpc, cloud-hpc

drawing tensorflow, tensor-flow

drawing unity

drawing weave

drawing wear, wear-os

Además de los agregados por default, se agregaron las siguientes categorías para el CONACyT:

drawing vuejs

drawing git

drawing java

drawing docker

drawing api

drawing jhipster

drawing ci-cd

drawing howto

A continuación se muestra un ejemplo sencillo de un Codelab en Markdown (también es posible verlo como un Codelab real).

    summary: How to Write a Codelab
    id: how-to-write-a-codelab
    categories: Sample
    tags: medium
    status: Published 
    authors: Zarin
    Feedback Link: https://zarin.io

    # How to Write a Codelab
    <!-- ------------------------ -->
    ## Overview 
    Duration: 1

    ### What You'll Learn 
    - how to set the amount of time each slide will take to finish 
    - how to include code snippets 
    - how to hyperlink items 
    - how to include images 
    - other stuff

    <!-- ------------------------ -->
    ## Setting Duration
    Duration: 2

    To indicate how long each slide will take to go through, set the `Duration` under each Heading 2 (i.e. `##`) to an integer. 
    The integers refer to minutes. If you set `Duration: 4` then a particular slide will take 4 minutes to complete. 

    The total time will automatically be calculated for you and will be displayed on the codelab once you create it. 

    <!-- ------------------------ -->
    ## Code Snippets
    Duration: 3

    To include code snippets you can do a few things. 
    - Inline highlighting can be done using the tiny tick mark on your keyboard: "`"
    - Embedded code

    ### JavaScript

    ```javascript
    { 
      key1: "string", 
      key2: integer,
      key3: "string"
    }
    ```
    
    ### Java

    ```java
    for (statement 1; statement 2; statement 3) {
      // code block to be executed
    }
    ```

    <!-- ------------------------ -->
    ## Hyperlinking and Embedded Images
    Duration: 1
    ### Hyperlinking
    [Youtube - Halsey Playlists](https://www.youtube.com/user/iamhalsey/playlists)

    ### Images
    ![alt-text-here](assets/how-to-write-a-codelab/puppy.jpg)

    <!-- ------------------------ -->
    ## Other Stuff|
    Duration: 1

    Checkout the official documentation here: [Codelab Formatting Guide](https://github.com/googlecodelabs/tools/blob/master/FORMAT-GUIDE.md)

Si se quiere tener un ambiente local donde poder previsualizar los borradores de los Codelabs, se puede seguir este tutorial.

Para más detalles sobre la estructura del Codelab, se puede consultar la guía de formato para Codelab

Si se requiere aprender sobre los archivos Markdown, se puede leer esta guía básica de sintaxis markdown.