Julia 2022-09-26 20:49:41 +03:00
Родитель 24688324fd 414d813513
Коммит ed851c5178
51 изменённых файлов: 2614 добавлений и 197 удалений

Просмотреть файл

@ -0,0 +1,3 @@
In this folder, you can find translations of existing workshops in their corresponding folders.
- [Spanish](./es/README.md)

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,3 @@
{
"CurrentProjectSetting": null
}

Просмотреть файл

@ -0,0 +1,11 @@
{
"ExpandedNodes": [
"",
"\\.devcontainer",
"\\.devcontainer\\library-scripts",
"\\all-systems-check",
"\\tests"
],
"SelectedNode": "\\challenge-Data_Exploration.ipynb",
"PreviewInSolutionExplorer": false
}

Двоичные данные
full/explore-analyze-data-with-R/translations/es/.vs/slnx.sqlite Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,139 @@
# Exploración y análisis de datos con R
## Módulo de referencia
[Exploración y análisis de datos con R](https://docs.microsoft.com/es-es/learn/modules/explore-analyze-data-with-r/?WT.mc_id=academic-59300-cacaste)
## Objetivos
¡Hola! Te damos la bienvenida a esta aventura de aprendizaje. En esta carpeta, encontrarás un notebook de exploración de datos. ¡Es un notebook de evaluación guiada de calificación automática que te ayudará a probar tus conocimientos en R para explorar y analizar datos! Esperamos que puedas notar que R, es en esencia, un lenguaje hermoso y elegante para la Ciencia de Datos.
| **Objetivo** | Descripción |
| ----------------------------- | -----------------------------------------------|
| **¿Qué aprenderás?** | Aprenderás a cómo utilizar R para exploración y análisis de datos |
| **Lo qué necesitarás** | [Visual Studio Code](https://code.visualstudio.com?WT.mc_id=academic-59300-cacaste), [Docker Desktop](https://www.docker.com/products/docker-desktop), [Remote Developer Extension](https://aka.ms/vscode-remote/download/extension) y [Git](https://git-scm.com/downloads) |
| **Duración** | 2 horas |
| **Diapositivas** | [Powerpoint](./slides.pptx) |
## Video
¡Vídeo próximamente!
<!---
🎥 Haga clic en esta imagen para ver a Carlotta guiarlo a través del material del taller y para obtener algunos consejos sobre cómo impartir este mismo.
--->
## Pre-aprendizaje
Este taller nos permite aplicar las habilidades aprendidas en el módulo [Exploración y análisis de datos con R](https://docs.microsoft.com/es-es/learn/modules/explore-analyze-data-with-r/?WT.mc_id=academic-59300-cacaste) para realizar análisis y visualización de datos. Por lo tanto, se les invita a que finalicen el módulo de Microsoft Learn antes de comenzar este taller para familiarizarse con algunos de los conceptos que veremos más adelante.
## Requisitos previos
Para preparar, ejecutar y escribir código R en poco tiempo, hemos incluido en este taller un contenedor, de manera que tengas un entorno de programación de R listo para utilizar.
### Configuración del contenedor de desarrollo
Un **contenedor de desarrollo** es un contenedor de [Docker](https://www.docker.com) en ejecución que incluye herramientas y tiempos de ejecución bien definidos así como los requisitos previos. Puedes probar contenedores de desarrollo con **[GitHub Codespaces](https://github.com/features/codespaces)**, **[Binder](https://mybinder.org/)** o **[Visual Studio Code Remote - Containers](https://aka.ms/vscode-remote/containers)**.
#### GitHub Codespaces
Sigue estos pasos para abrir este taller en un Codespace:
1. Haz clic en el menú desplegable Código y selecciona la opción **Open with Codespaces** .
2. Selecciona **+ New codespace** en la parte inferior del panel.
Para más información, consulta la [documentación de GitHub](https://docs.github.com/en/free-pro-team@latest/github/developing-online-with-codespaces/creating-a-codespace#creating-a-codespace).
#### Binder
Este taller también está disponible en Binder. Para abrir el notebook en un entorno de Binder, haz clic en el botón que se encuentra a continuación.
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/carlotta94c/workshop-library/workshop-binding?labpath=%2Ffull%2Fexplore-analyze-data-with-R%2Fsolution%2Fchallenge-Data_Exploration.ipynb)
#### Espacio aislado de Aprendizaje
También puedes completar este desafío aprovechando el espacio asilado de Learn, que se encuentra en la [unidad 9](https://docs.microsoft.com/es-es/learn/modules/explore-analyze-data-with-r/9-challenge-data-exploration) del módulo de Microsoft Learn - Exploración y análisis de datos con R. Solo necesitas iniciar sesión con tu cuenta de Microsoft o GitHub y hacer clic en **Activar el espacio aislado** para iniciar.
#### Contenedores de VS Code Remotos
Sigue estos pasos para abrir este taller en un contenedor usando la extensión VS Code _Remote - Containers_:
1. Si es la primera vez que utilizas un contenedor de desarrollo, asegúrate de que tu sistema cumpla con los requisitos previos (por ejemplo, tener instalado Docker) en la [guía de inicio](https://aka.ms/vscode-remote/containers/getting-started).
2. Presiona <kbd>F1</kbd> y selecciona el comando **Add Development Container Configuration Files...** para **Remote-Containers** o **Codespaces**.
> **Nota:** Si es necesario, puedes arrastrar y soltar la carpeta `.devcontainer` desde esta subcarpeta en una copia clonada localmente de este repositorio en el explorador de archivos de VS Code en lugar de usar el comando.
3. Selecciona esta definición. También debes seleccionar **Show All Definitions...** para que aparezca.
4. Finalmente, presiona <kbd>F1</kbd> y ejecute **Remote-Containers: Reopen Folder in Container** para empezar a usar la definición.
Esta definición incluye un código de prueba que te ayudará a verificar que funciona correctamente en tu sistema. Abre la carpeta `all-systems-check` donde puede elegir ejecutar los scripts `.R`, `.Rmd` o `.ipynb`. Deberías ver "¡Hola, mundo remoto!" en una ventana de terminal R (para `.R` y `.Rmd`) o dentro de un Jupyter Notebook (para `.ipynb`) después de que se ejecute el script respectivo.
En algún momento, es posible que desees realizar cambios en tu contenedor, como por ejemplo, instalar un nuevo paquete. Deberás reconstruir tu contenedor para que los cambios surtan efecto.
## Lo que vas a aprender
Supongamos que el Departamento de Transporte está considerando construir un nuevo aeropuerto. Como el increíble científico de datos que eres, se te ha pedido que explores los datos existentes. Los resultados de su análisis pueden formar la base de un informe o un modo de aprendizaje automático.
En este desafío, explorarás un conjunto de datos del mundo real que contiene datos de vuelos del Departamento de Transporte de EE. UU.
## Paso 1: Limpieza de datos
Rara vez encontramos datos en la forma correcta para el análisis. Como tal, una vez que hayas importado tus datos, un buen lugar para comenzar su análisis es respondiendo a la pregunta: "_¿Son los datos precisos y apropiados para el análisis deseado?_". La limpieza de datos para resolver errores, valores faltantes y otros problemas vale la pena a largo plazo y permite un análisis exploratorio de datos más fácil y preciso.
En esta sección:
- Identificarás cualquier dato nulo o faltante e agregará valores de reemplazo apropiados.
- Identificarás y eliminará cualquier valor atípico en las columnas DepDelay y ArrDelay.
## Paso 2: Análisis exploratorio de datos (EDA)
El análisis exploratorio de datos, conocido popularmente como EDA, es utilizado por los científicos de datos para analizar e investigar conjuntos de datos y resumir sus características principales, por ejemplo, la distribución, a menudo visualizando y transformando datos.
En esta sección:
- Observarás las estadísticas de resumen para los campos numéricos en el conjunto de datos.
- Determinarás la distribución de las columnas DepDelay y ArrDelay.
### Más EDA
El objetivo de EDA es desarrollar una mejor comprensión de sus datos. La mayoría de las veces, EDA implicará formular algunas preguntas de sondeo sobre sus datos, buscar respuestas mediante la visualización y transformación de datos y, finalmente, utilizar la comprensión adquirida para refinar las preguntas, descartarlas por completo y/o generar nuevas preguntas.
En esta sección:
- Utilizarás estadísticas, funciones agregadas y visualizaciones para responder las siguientes preguntas:
- ¿Cuáles son los retrasos promedio (media) de salida y llegada?
- ¿Cómo se comparan los transportistas en términos de rendimiento de retrasos en la llegada?
- ¿Hay una diferencia notable en los retrasos de llegada para los diferentes días de la semana?
- ¿Qué aeropuerto de salida tiene el retraso medio de salida más alto?
- ¿Las salidas tardías tienden a resultar en retrasos de llegada más prolongados que las salidas a tiempo?
- ¿Qué ruta (del aeropuerto de origen al aeropuerto de destino) tiene más llegadas tardías?
- ¿Qué ruta tiene el promedio de retraso de llegada más alto?
## Prueba
Evalúa sus conocimientos con [una breve prueba](https://docs.microsoft.com/en-us/learn/modules/explore-analyze-data-with-r/8-knowledge-check).
## Próximos pasos
¡Felicidades por finalizar este reto 🏅!
Hay otros talleres sobre el uso de R para Ciencia de Datos. En este taller, aprendimos cómo limpiar, visualizar y transformar datos para obtener información. El siguiente conjunto de talleres te enseñará [cómo crear modelos de regresión](../../../intro-regression-R-tidymodels/), [cómo crear modelos de clasificación](../../../intro-classification-R-tidymodels/) y cómo crear modelos de agrupamiento (¡muy pronto!). ¡Asegúrate de echarles un vistazo!
## Práctica
En este taller utilizaste preguntas ya proporcionadas para guiar su EDA. A veces este no es el caso. Intenta generar tus propias preguntas y responderlas utilizando las habilidades de transformación y visualización de datos que had adquirido en este módulo. ¿Qué nueva información has obtenido?
## Agradecimientos ❤️
¡Muchísimas gracias a Felipe Flores (@FelFT) por haber traducido todo este contenido a español! 🚀 ✨
## Feedback
Asegúrate de dejarnos tus [comentarios sobre este taller](https://forms.office.com/r/MdhJWMZthR). ¡Feliz aprendizaje!
[Código de conducta](../../../../CODE_OF_CONDUCT.md)

Просмотреть файл

@ -0,0 +1,7 @@
# Función que devuelve un mensaje impresionante
say_hello <- function(name) {
message(paste0("Hola, ", name, ":) En este módulo, aprenderemos a explorar
y analizar datos con R."))
}
say_hello("mundo remoto")

Просмотреть файл

@ -0,0 +1,41 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "r"
}
},
"outputs": [],
"source": [
"# Función que devuelve un mensaje impresionante\n",
"say_hello <- function(name) {\n",
" message(paste0(\"Hola, \", name, \":) En este módulo, aprenderemos a explorar\n",
" y analizar datos con R.\"))\n",
"}\n",
"\n",
"say_hello(\"mundo remoto\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "4.1.2"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}

Просмотреть файл

@ -0,0 +1,19 @@
// Coloque los enlaces de clave en este archivo para invalidar los valores predeterminados
// Métodos abreviados de teclado para operadores de R comunes
[
// Agregar operador de asignación
{
"key": "Alt+-",
"command": "type",
"args": { "text": " <- " }
//"when": "editorTextFocus && editorLangId == r"
},
// Agregar pipe
{
"key": "Ctrl+Shift+m",
"command": "type",
"args": { "text": " %>% " }
//"when": "editorTextFocus && editorLangId == r"
}

Просмотреть файл

@ -0,0 +1,25 @@
---
title: "R Notebook"
output: html_notebook
---
Este es un notebook [R Markdown](http://rmarkdown.rstudio.com). Cuando ejecuta código dentro del notebook, los resultados aparecen debajo del código.
Intente ejecutar este fragmento haciendo clic en el botón *Ejecutar* dentro del fragmento o colocando el cursor dentro de él y presionando *Ctrl+Shift+Enter*.
```{r}
plot(cars)
```
¿Quiere probar una función también?
```{r}
# Función que devuelve un mensaje impresionante
say_hello <- function(name) {
message(paste0("Hola, ", name, ":) En este módulo, aprenderemos a explorar
y analizar datos con R."))
}
say_hello("mundo remoto")
```

Двоичные данные
full/explore-analyze-data-with-R/translations/es/slides.pptx Normal file

Двоичный файл не отображается.

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,43 @@
test = list(
name = "Question 1",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "Excelente. Ha seleccionado correctamente las columnas **DepDelay** y **DepDel15** y, a continuación, ha filtrado el conjunto de datos para incluir solo filas en las que el valor de **DepDel15** es NA.",
failure_message = "¡Vaya! Vamos a intentarlo de nuevo. Asegúrate de haber seleccionado las columnas **DepDelay** y **DepDel15** y, a continuación, filtrado el conjunto de datos para incluir solo filas donde el valor de **DepDel15** es NA.",
code = {
suppressPackageStartupMessages({
library(testthat)
library(ottr)
})
## Test ##
test_that('the first column has no NA while the second has 2761 NAs', {
expect_equal(sum(is.na(flights_depdel$DepDelay)), 0)
expect_equal(sum(is.na(flights_depdel$DepDel15)), 2761)
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Fantástico! Sus dimensiones tibble también son correctas.",
failure_message = "¡Casi allí! Asegúrate de haber seleccionado las columnas **DepDelay** y **DepDel15** y, a continuación, filtra el conjunto de datos para incluir solo filas donde el valor de **DepDel15** es NA.",
code = {
suppressPackageStartupMessages({
library(testthat)
library(ottr)
})
## Test ##
test_that('data dimensions correct', {
expect_output(glimpse(flights_depdel), "Rows: 2,761\nColumns: 2")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,46 @@
test = list(
name = "Question 10",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Ese es un gran comienzo! Ha codificado correctamente **DepDel15** como variable categórica.",
failure_message = "Casi allí. Asegúrate de haber modificado la columna **DepDel15** a una variable de factor/categoría.",
code = {
## Prueba ##
test_that('DepDel15 is a factor variable', {
expect_equal(class(df_flights$DepDel15), "factor")
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Gran trabajo! Ahora tienes un hermoso e informativo gráfico de diagrama de caja. Como puedes ver, los vuelos con una salida retrasada tienen un valor medio más alto para sus tiempos de retraso de llegada. De hecho, las salidas tardías tienden a dar lugar a retrasos de llegada más largos. ",
failure_message = "Vamos a intentarlo de nuevo. Asegúrate de haber asignado la estética x a **DepDel15**, y la estética a **ArrDelay** y la estética de relleno a **DepDel15**.",
code = {
## Prueba ##
test_that('plot has expected aesthetic mappings', {
expect_equal(class(arr_delay_plot$layers[[1]]$geom)[1], "GeomBoxplot")
expect_equal(arr_delay_plot$labels$x, "DepDel15")
expect_equal(arr_delay_plot$labels$y, "ArrDelay")
expect_equal(arr_delay_plot$labels$fill, "DepDel15")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,42 @@
test = list(
name = "Question 11",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Ese es un gran comienzo! ¡Tus dimensiones tibble se ven geniales!",
failure_message = "Casi allí. Revisemos de nuevo las dimensiones de tibble. El tibble de salida debe tener las columnas **Route** y **ArrDelay**.",
code = {
## Test ##
test_that('summary tibble has correct dimensions', {
expect_output(glimpse(df_route_arrdelay), "Rows: 2,479\nColumns: 2", fixed = TRUE)
expect_equal(sort(names(df_route_arrdelay)), c("ArrDelay", "Route"))
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Fantástico! Ha agrupado _(grouped_by)_, resumido y organizado con éxito las observaciones en orden descendente de sus tiempos medios de retraso de llegada.",
failure_message = "Casi allí. Asegúrate de que el tibble esté dispuesto en orden descendente de su tiempo medio de retraso.",
code = {
## Test ##
test_that('summary tibble has correct values', {
expect_equal(slice(df_route_arrdelay, 1)$ArrDelay, 24.5)
expect_equal(slice(df_route_arrdelay, 2476)$Route, "Eppley Airfield>LaGuardia")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,34 @@
test = list(
name = "Question 2",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Buen trabajo! No hay más valores faltantes en la columna DepDel15.",
failure_message = "¡Casi allí! Asegúrate de que has reemplazado los valores que faltan en la columna DepDel15 por un 0. Tal vez intenta experimentar con **mutate** y **replace_na**.",
code = {
## Test ##
test_that('data has no missing values', {
expect_false(anyNA(df_flights), FALSE)
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "Fantástico. Sus dimensiones tibble también son correctas.",
failure_message = "¡Casi allí! Asegurate de que está comenzando con tibble **df_flights** y luego reemplazó los valores que faltan en la columna **DepDel15** con un 0.",
code = {
## Test ##
test_that('data dimensions correct', {
expect_output(glimpse(df_flights), "Rows: 271,940")
expect_output(glimpse(df_flights), "Columns: 20")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,37 @@
test = list(
name = "Question 3",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Fantástico! Ha seleccionado correctamente la columna **DepDelay**",
failure_message = "¡Casi allí! Asegúrate de haber seleccionado la columna **DepDelay**",
code = {
## Test ##
test_that('df_col corresponds to DepDelay', {
expect_equal(colnames(df_col), "DepDelay")
expect_output(glimpse(df_col), "Rows: 271,940\nColumns: 1")
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Sus estadísticas resumidas también se ven muy bien!",
failure_message = "¡Casi allí! Asegúrate de haber seleccionado la columna DepDelay para obtener las estadísticas de resumen deseadas.",
code = {
## Test ##
test_that('the distribution of DepDelay is correct', {
expect_equal(show_distribution(var_data = df_col, binwidth = 100)[[1]], "Minimum: -63.00\nMean: 10.35\nMedian: -1.00\nMode: -3.00\nMaximum: 1425.00")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,38 @@
test = list(
name = "Question 4",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Fantástico! Has seleccionado correctamente la columna **ArrDelay**",
failure_message = "¡Casi allí! Asegúrate de haber seleccionado la columna **ArrDelay**",
code = {
## Test ##
test_that('df_col corresponds to ArrDelay', {
expect_equal(colnames(df_col), "ArrDelay")
expect_output(glimpse(df_col), "Rows: 271,940\nColumns: 1")
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Tus estadísticas resumidas también se ven muy bien!",
failure_message = "¡Casi allí! Asegúrate de haber seleccionado la columna ArrDelay para obtener las estadísticas de resumen deseadas.",
code = {
## Test ##
test_that('the distribution of ArrDelay is correct', {
expect_equal(show_distribution(var_data = df_col, binwidth = 100)[[1]], "Minimum: -75.00\nMean: 6.50\nMedian: -3.00\nMode: 0.00\nMaximum: 1440.00")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,20 @@
test = list(
name = "Question 5",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 1.0,
success_message = "¡Bien hecho! Ha filtrado con éxito los datos para incluir observaciones cuyo retraso de llegada se encuentra dentro de los quantiles 1 y 90.",
failure_message = "¡Casi allí! Asegúrate de haber filtrado los datos **df_flights** para incluir solo filas en las que la entrada para la columna **ArrDelay** sea mayor que **arrdelay_01pcntile** y menor que **arrdelay_90pcntile**",
code = {
## Test ##
test_that('there are no outliers', {
expect_equal(sum(df_flights$ArrDelay < arrdelay_01pcntile), 0)
expect_equal(sum(df_flights$ArrDelay > arrdelay_90pcntile), 0)
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,20 @@
test = list(
name = "Question 6",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 1.0,
success_message = "¡Eso es todo! Tienes los valores correctos para los percentiles 1 y 90.",
failure_message = "¡Vamos a intentarlo de nuevo! Asegúrate de que tus _quantiles_ **DepDelay** correspondan a una probabilidad de 0,01 (1%) y 0,90 (90%)",
code = {
## Test ##
test_that('quantile values are correct', {
expect_equal(depdelay_01pcntile, -12)
expect_equal(depdelay_90pcntile, 17)
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,20 @@
test = list(
name = "Question 7",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 1.0,
success_message = "¡Bien hecho! Has filtrado con éxito los datos para incluir observaciones cuyo retraso de salida se encuentra dentro de los cuantiles 1 y 90.",
failure_message = "¡Casi allí! Asegúrate de haber filtrado los datos **df_flights** para incluir solo filas en las que la entrada de la columna **DepDelay** sea mayor que **depdelay_01pcntile** y menor que **depdelay_90pcntile**",
code = {
## Test ##
test_that('there are no outliers', {
expect_equal(sum(df_flights$DepDelay < depdelay_01pcntile), 0)
expect_equal(sum(df_flights$DepDelay > depdelay_90pcntile), 0)
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,21 @@
test = list(
name = "Question 8",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 1.0,
success_message = "¡Fantástico! Has encontrado con éxito el tiempo de atraso medio en las columnas **DepDelay** y **ArrDelay**.",
failure_message = "¡Vamos a intentarlo de nuevo! Asegúrate de que a partir de **df_flights** estas creando una tabla de resumen que contiene la media entre las columnas **DepDelay** y **ArrDelay**.",
code = {
## Test ##
test_that('summary tibble has correct values', {
expect_output(glimpse(df_delays), "Rows: 1\nColumns: 2", fixed = TRUE)
expect_equal(df_delays$DepDelay, -0.921692)
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,40 @@
test = list(
name = "Question 9",
cases = list(
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Ese es un gran comienzo! Ha codificado correctamente **DayOfWeek** como variable categórica.",
failure_message = "Casi allí. Asegúrate de haber modificado la columna **DayOfWeek** a una variable de factor/categoría.",
code = {
## Test ##
test_that('DayOfWeek is a factor variable', {
expect_equal(class(df_flights$DayOfWeek), "factor")
})
}
),
ottr::TestCase$new(
hidden = FALSE,
name = NA,
points = 0.5,
success_message = "¡Gran trabajo! Ahora tienes un hermoso gráfico de caja. Como puedes ver, no parece haber una gran variación de retraso de salida entre los diferentes días de la semana.",
failure_message = "Vamos a intentarlo de nuevo. Asegúrate de haber asignado la estética _x_ a **DayOfWeek** y la estética _y_ a **DepDelay**.",
code = {
## Test ##
test_that('plot has expected aesthetic mappings', {
expect_equal(dep_delay_plot$labels$x, "DayOfWeek")
expect_equal(dep_delay_plot$labels$y, "DepDelay")
})
}
)
)
)

Просмотреть файл

@ -0,0 +1,26 @@
# Exploración y análisis de datos con R
## Módulo de referencia
[Exploración y análisis de datos con R](https://docs.microsoft.com/es-es/learn/modules/explore-analyze-data-with-r/?WT.mc_id=academic-59300-cacaste)
## Etapa 1: Resultados esperados
1. Los estudiantes serán capaces de:
- Limpiar datos del mundo real
- Realizar análisis de datos exploratorios (EDA) a través de paquetes de R Tidyverse
2. Los estudiantes podrán utilizar su aprendizaje de forma independiente para:
- Generar preguntas por sí mismos para guiar un proceso de EDA
- Responder estas preguntas usando las habilidades de visualización y transformación de datos adquiridas en este módulo
## Etapa 2: Evidencia
- Desafío práctico como parte del módulo de aprendizaje, siguiendo el notebook [challenge-Data_Exploration.ipynb](./solution/challenge-Data_Exploration.ipynb)
- Prueba de conocimientos
## Etapa 3: Plan de aprendizaje
- Introducción
- Análisis exploratorio de datos
- Examinar datos del mundo real
- Desafío - Exploración de datos
- Prueba de conocimientos

Двоичные данные
full/ml-model-custom-vision/images/video.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 235 KiB

Просмотреть файл

@ -11,13 +11,13 @@ En el transcurso de este taller construirá un modelo para detectar razas de per
| **¿Qué aprenderás?** |El uso de imágenes para entrenar un modelo capaz de realizar inferencias para clasificar imágenes. |
| **¿Qué necesitarás?** | Python 3.8+, Visual Studio Code, Git |
| **Duración** | 1 hora |
| **¿Quieres ver el resultado?** | [Solución](../../solution) |
| **¿Quieres ver el resultado?** | [Solución](./solucion/) |
| **Slides** | [Powerpoint](./slides_ES.pptx)
| **Autor** | [Christopher Harrison](https://geektrainer.dev)
## Video Tutorial
🎥 Haz click en la imagen para ver a Christopher explicar paso a paso el taller.
[![Recorrido del taller](../../images/promo.png)](https://youtu.be/YWTDxcHAfkA "workshop walk-through")
[![Recorrido del taller](../../images/video.gif)](https://youtu.be/YWTDxcHAfkA "workshop walk-through")
## Lo que vas a construir con CustomVision.ai

Просмотреть файл

@ -7,7 +7,7 @@ Veamos que tan bien funciona nuestro modelo. Es importante usar imágenes que no
1. Selecciona **Quick Test**
2. Selecciona **Buscar en archivos locales**
4. Navega a **imagenes de prueba** y selecciona una de las imágenes de perros
4. Navega a [**imagenes de prueba**](../../testing-images/) y selecciona una de las imágenes de perros
5. Selecciona **Abrir**
6. Observe las puntuaciones de **Etiqueta/Categoria** _tag_ y **Probabilidad**
@ -137,7 +137,7 @@ Anteriormente configuramos algunas variables de entorno como nuestra clave y end
### Realiza la predicción
¡Ahora podemos realizar nuestra predicción! Usaremos una de las imágenes de la carpeta de prueba.
¡Ahora podemos realizar nuestra predicción! Usaremos una de las [imágenes de la carpeta de prueba](../../testing-images/).
1. Al final de **predict.py**, agrega el siguiente código para realizar la predicción de una raza de perro

Просмотреть файл

@ -0,0 +1,33 @@
# Cliente de predición
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
# Key class para azure
from msrest.authentication import ApiKeyCredentials
# dotenv para cargar key
from dotenv import load_dotenv
# Importa os para leer variables de entorno
import os
# Cargar key y valores de punto final (endpoints)
load_dotenv()
# Establecer los valores en variables
key = os.getenv('KEY')
endpoint = os.getenv('ENDPOINT')
project_id = os.getenv('PROJECT_ID')
published_name = os.getenv('PUBLISHED_ITERATION_NAME')
# Credenciales de configuración para el cliente
credentials = ApiKeyCredentials(in_headers={'Prediction-key':key})
# Crear cliente, que se utilizará para hacer predicciones
client = CustomVisionPredictionClient(endpoint, credentials)
# Abre el archivo de prueba
with open('../testing-images/american-staffordshire-terrier-10.jpg', 'rb') as image:
# Realizar la predicción
results = client.classify_image(project_id, published_name, image.read())
# Debido a que podría haber múltiples predicciones, recorremos cada una de ellas.
for prediction in results.predictions:
# Muestra el nombre de la raza y el porcentaje de probabilidad
print(f'{prediction.tag_name}: {(prediction.probability):.2%}')

Просмотреть файл

@ -0,0 +1,2 @@
azure-cognitiveservices-vision-customvision
python-dotenv

Просмотреть файл

@ -24,7 +24,7 @@ Una vez que nuestro proyecto ha sido creado, es el momento de subir nuestras im
1. Selecciona **Agregar imágenes**
3. Ve a **Imágenes de entrenamiento**
3. Ve a [**Imágenes de entrenamiento**](../../training-images/)
4. Selecciona todas las imágenes marcadas como **american-staffordshire-terrier** en la carpeta, y seleccione **Abrir**
5. Escribe **american-staffordshire-terrier** en la etiqueta y selecciona **Subir 8 archivos**
6. Selecciona **Hecho**

Просмотреть файл

@ -0,0 +1,17 @@
## Construye un modelo de Machine Learning
## Etapa 1: Resultados deseados
1. Los estudiantes serán expertos en el uso del servicio Custom Vision AI para entrenar un modelo de imagen para la clasificación, y usarán Python para probar estas clasificaciones.
1. Los estudiantes podrán usar de forma independiente su aprendizaje para construir un nuevo modelo utilizando sus propias imágenes.
## Etapa 2: Evidencia
A los estudiantes se les ofrece un desafío al final del último módulo para mostrar el conocimiento de transferencia
## Etapa 3: Learning Plan
- Instalar y configurar herramientas
- Entrena tu modelo
- Clasifica imágenes usando tu modelo

Просмотреть файл

@ -18,7 +18,7 @@
},
"devDependencies": {
"typescript": "^4.6.3",
"vite": "^2.9.0",
"vite": "^2.9.13",
"vite-plugin-pwa": "^0.11.13"
}
},
@ -1513,6 +1513,19 @@
"node": ">=6.9.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
@ -1521,15 +1534,32 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
"version": "0.3.14",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@ -3246,9 +3276,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/nanoid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
"integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
@ -3338,9 +3368,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.12",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
"integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
"version": "8.4.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
"integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
"dev": true,
"funding": [
{
@ -3353,7 +3383,7 @@
}
],
"dependencies": {
"nanoid": "^3.3.1",
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@ -3764,13 +3794,13 @@
}
},
"node_modules/terser": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
"integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@ -3780,14 +3810,6 @@
"node": ">=10"
}
},
"node_modules/terser/node_modules/source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"engines": {
"node": ">= 8"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -3927,13 +3949,13 @@
}
},
"node_modules/vite": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.0.tgz",
"integrity": "sha512-5NAnNqzPmZzJvrswZGeTS2JHrBGIzIWJA2hBTTMYuoBVEMh0xwE0b5yyIXFxf7F07hrK4ugX2LJ7q6t7iIbd4Q==",
"version": "2.9.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
"integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
"dev": true,
"dependencies": {
"esbuild": "^0.14.27",
"postcss": "^8.4.12",
"postcss": "^8.4.13",
"resolve": "^1.22.0",
"rollup": "^2.59.0"
},
@ -5213,20 +5235,44 @@
"to-fast-properties": "^2.0.0"
}
},
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
"integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew=="
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg=="
},
"@jridgewell/trace-mapping": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
"version": "0.3.14",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
"requires": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@ -6394,9 +6440,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"nanoid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
"integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true
},
"node-releases": {
@ -6459,12 +6505,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"postcss": {
"version": "8.4.12",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
"integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
"version": "8.4.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
"integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
"dev": true,
"requires": {
"nanoid": "^3.3.1",
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
@ -6751,21 +6797,14 @@
}
},
"terser": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
"integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
}
}
},
"to-fast-properties": {
@ -6863,14 +6902,14 @@
}
},
"vite": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.0.tgz",
"integrity": "sha512-5NAnNqzPmZzJvrswZGeTS2JHrBGIzIWJA2hBTTMYuoBVEMh0xwE0b5yyIXFxf7F07hrK4ugX2LJ7q6t7iIbd4Q==",
"version": "2.9.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
"integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
"dev": true,
"requires": {
"esbuild": "^0.14.27",
"fsevents": "~2.3.2",
"postcss": "^8.4.12",
"postcss": "^8.4.13",
"resolve": "^1.22.0",
"rollup": "^2.59.0"
}

Просмотреть файл

@ -22,7 +22,7 @@
},
"devDependencies": {
"typescript": "^4.6.3",
"vite": "^2.9.0",
"vite": "^2.9.13",
"vite-plugin-pwa": "^0.11.13"
},
"prettier": {

Просмотреть файл

@ -1514,6 +1514,19 @@
"node": ">=6.9.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
@ -1522,15 +1535,32 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
"version": "0.3.14",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@ -3789,13 +3819,13 @@
}
},
"node_modules/terser": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
"integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@ -3805,14 +3835,6 @@
"node": ">=10"
}
},
"node_modules/terser/node_modules/source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"engines": {
"node": ">= 8"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -5238,20 +5260,44 @@
"to-fast-properties": "^2.0.0"
}
},
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
"integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew=="
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg=="
},
"@jridgewell/trace-mapping": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
"version": "0.3.14",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
"requires": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@ -6800,21 +6846,14 @@
}
},
"terser": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
"integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
}
}
},
"to-fast-properties": {

Просмотреть файл

@ -1514,6 +1514,19 @@
"node": ">=6.9.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
@ -1522,15 +1535,32 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg=="
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
"version": "0.3.14",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@ -3789,13 +3819,13 @@
}
},
"node_modules/terser": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
"integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@ -3805,14 +3835,6 @@
"node": ">=10"
}
},
"node_modules/terser/node_modules/source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"engines": {
"node": ">= 8"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@ -5238,20 +5260,44 @@
"to-fast-properties": "^2.0.0"
}
},
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
"integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew=="
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg=="
},
"@jridgewell/trace-mapping": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
"version": "0.3.14",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
"requires": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@ -6800,21 +6846,14 @@
}
},
"terser": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
"integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
}
}
},
"to-fast-properties": {

Просмотреть файл

@ -18,7 +18,7 @@
"devDependencies": {
"localforage": "^1.10.0",
"typescript": "^4.6.3",
"vite": "^2.9.1",
"vite": "^2.9.13",
"vite-plugin-pwa": "^0.11.13",
"workbox-core": "^6.5.3"
}
@ -3301,9 +3301,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/nanoid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
"integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
@ -3393,9 +3393,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.12",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
"integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
"version": "8.4.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
"integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
"dev": true,
"funding": [
{
@ -3408,7 +3408,7 @@
}
],
"dependencies": {
"nanoid": "^3.3.1",
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@ -3974,13 +3974,13 @@
}
},
"node_modules/vite": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
"integrity": "sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==",
"version": "2.9.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
"integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
"dev": true,
"dependencies": {
"esbuild": "^0.14.27",
"postcss": "^8.4.12",
"postcss": "^8.4.13",
"resolve": "^1.22.0",
"rollup": "^2.59.0"
},
@ -6561,9 +6561,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"nanoid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz",
"integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==",
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true
},
"node-releases": {
@ -6626,12 +6626,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"postcss": {
"version": "8.4.12",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
"integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
"version": "8.4.16",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
"integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
"dev": true,
"requires": {
"nanoid": "^3.3.1",
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
@ -7023,14 +7023,14 @@
}
},
"vite": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
"integrity": "sha512-vSlsSdOYGcYEJfkQ/NeLXgnRv5zZfpAsdztkIrs7AZHV8RCMZQkwjo4DS5BnrYTqoWqLoUe1Cah4aVO4oNNqCQ==",
"version": "2.9.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.13.tgz",
"integrity": "sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw==",
"dev": true,
"requires": {
"esbuild": "^0.14.27",
"fsevents": "~2.3.2",
"postcss": "^8.4.12",
"postcss": "^8.4.13",
"resolve": "^1.22.0",
"rollup": "^2.59.0"
}

Просмотреть файл

@ -21,7 +21,7 @@
"devDependencies": {
"localforage": "^1.10.0",
"typescript": "^4.6.3",
"vite": "^2.9.1",
"vite": "^2.9.13",
"vite-plugin-pwa": "^0.11.13",
"workbox-core": "^6.5.3"
},

Просмотреть файл

@ -0,0 +1,85 @@
# Crie um aplicativo sem usar nenhum código com o Microsoft Power Platform
## Módulo de Referência
[Como criar um aplicativo de tela](https://docs.microsoft.com/pt-br/learn/modules/build-app-solution/?WT.mc_id=academic-56577-hmitra)
## Objetivos
Neste workshop, discutiremos como criar um aplicativo *no-code* da maneira com *low-code* com o Power Apps.
| **Objetivo** | Descrição |
|------------------------------|---------------------------------------------------------------------------------------------------------------|
| **O que você vai aprender** | Como criar e personalizar um aplicativo com o Power Apps e conhecer todos os seus elementos |
| **Do que você irá precisar** | [Inscrição no M365](https://developer.microsoft.com/microsoft-365/dev-program?WT.mc_id=academic-56577-hmitra) |
| **Duração** | 1 hora |
| **Slides** | [Powerpoint](../../slides.pptx) |
## Passo a passo em vídeo
[![passo a passo do workshop](../../images/promo.png)](https://youtu.be/NLXtRjXgMBo "workshop walk-through")
> 🎥 Clique nesta imagem para ver Someleze te guiar pelo workshop
## Pré-aprendizagem
- [Introdução à Microsoft Power Platform](https://docs.microsoft.com/pt-br/learn/modules/introduction-power-platform/?WT.mc_id=academic-56577-hmitra)
## Pré-requisitos
- [Inscrição no M365](https://developer.microsoft.com/pt-br/microsoft-365/dev-program?WT.mc_id=academic-56577-hmitra)
## O que você vai aprender
Você deseja criar um aplicativo, mas a quantidade de conhecimento de desenvolvimento necessária para começar a criar um aplicativo está impedindo você? Em caso afirmativo, transforme suas ideias em realidade com o Microsoft Power Apps.
![Captura de tela do projeto final](../../images/project.png)
## Fluxo do workshop
### Configure seu ambiente
Se certificando de que você tenha uma assinatura do M365, visite [Power Apps studio](https://make.powerapps.com?WT.mc_id=academic-56577-hmitra) e entre com sua conta.
Caso contrário, [configure e prepare um ambiente](https://docs.microsoft.com/pt-br/power-platform/admin/create-environment?WT.mc_id=academic-56577-hmitra).
### Crie a aplicação
Depois de configurar o ambiente e abrir o [Power Apps studio](https://make.powerapps.com?WT.mc_id=academic-56577-hmitra), clique em 'Criar' no painel esquerdo.
### Escolhendo dados
Você pode usar alguns dados de amostra no [arquivo zip](../../data/Contoso-Site-Tracking.zip) anexado. Extraia e carregue o arquivo zip usando o One Drive, escolhendo "One Drive for Business" como fonte de dados.
### Explorando os vários elementos
Para adicionar mais detalhes ao aplicativo, explore os vários [elementos](https://docs.microsoft.com/pt-br/learn/modules/build-app-solution/2-learn-basic-elements?WT.mc_id=academic-56577-hmitra) e serviços.
### Adicione lógica
Adicione lógica ao aplicativo usando [funções](https://docs.microsoft.com/pt-br/learn/modules/build-app-solution/4-get-started-functions-power-apps?WT.mc_id=academic-56577-hmitra) do Power Apps.
### Compartilhe sua aplicação
Agora é hora de compartilhar! Você pode publicar seu aplicativo na organização usando [Power Apps](https://docs.microsoft.com/pt-br/learn/modules/build-app-solution/5-share-app?WT.mc_id=academic-56577-hmitra).
## Próximos passos
Saiba mais sobre o Power Apps visitando os seguintes links:
[Navegação em um aplicativo de tela no Power Apps](https://docs.microsoft.com/pt-br/learn/modules/navigation-canvas-app/?WT.mc_id=academic-56577-hmitra)
[Personalizar um aplicativo de tela no Power Apps](https://docs.microsoft.com/pt-br/learn/modules/customize-apps-in-powerapps/?WT.mc_id=academic-56577-hmitra)
[Gerenciar aplicativos no Power Apps](https://docs.microsoft.com/pt-br/learn/modules/manage-apps-in-powerapps/?WT.mc_id=academic-56577-hmitra)
## Pratique
O que mais você pode criar com o Power Apps? Seja criativo e explore esta plataforma poderosa.
## Feedback
Certifique-se de dar [*feedback* sobre este workshop](https://forms.office.com/r/MdhJWMZthR)!
[Código de Conduta](../../../../CODE_OF_CONDUCT.md)

Просмотреть файл

@ -0,0 +1,3 @@
In this folder, you can find translations of existing workshops in their corresponding folders.
- [Spanish](./es/README.md)

Просмотреть файл

@ -0,0 +1,81 @@
# Introducción a los contenedores de desarrollo en VS Code
## Módulo de referencia
[Uso de un contenedor de Docker como entorno de desarrollo con Visual Studio Code](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/?WT.mc_id=academic-55190-ornella)
# Objetivos
En este taller, aprenderás a como acceder, personalizar y añadir software a los contenedores de desarrollo en Visual Studio Code con la finalidad de que puedas trabajar con facilidad entre máquinas y entornos de desarrollo.
| **Objetivo** | Descripción |
| ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| **¿Qué aprenderás?** | Aprenderás a como cargar y conectarte a un proyecto remoto, personalizar la configuración cuando se trabaja con un contenedor de desarrollo y añadir software al entorno del contenedor. |
| **Lo que necesitarás** | [Visual Studio Code](https://azure.microsoft.com/es-mx/products/visual-studio-code/), [Docker Desktop](https://www.docker.com/products/docker-desktop) y [Git](https://git-scm.com/downloads) |
| **Duración** | 1 hora |
| **Diapositivas** | [Powerpoint](../../slides.pptx) |
# Video
[![workshop walk-through](../../images/promo.png)](https://youtu.be/StzyJcGI0uo "Paso a paso del taller")
> 🎥 Dale click a la imagen para ver como Ornella te da el paso a paso del taller
## Pre-aprendizaje
- [Visión general de Contenedores y Docker](https://docs.microsoft.com/gl-es/dotnet/architecture/containerized-lifecycle/introduction-to-containers-and-docker?WT.mc_id=academic-55190-ornella)
- [Introducción a Git](https://docs.microsoft.com/gl-es/learn/modules/intro-to-git/?WT.mc_id=academic-55190-ornella)
- [Uso de un contenedor de Docker como entorno de desarrollo con Visual Studio Code](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/?WT.mc_id=academic-55190-ornella)
## Lo que aprenderán los estudiantes
Digamos que estás trabajando en un proyecto de hackathon junto a tus compañeros de clases, utilizando Python y quieres asegurarte de que tu proyecto es compatible en múltiples máquinas. En este taller, aprenderás como puedes utilizar contenedores de desarrollo para trabajar en cualquier proyecto sin tener que instalar o configurar tu equipo.
![Imagen del proyecto completado](../../images/remote-indicator.png)
## Prepara el proyecto
En esta sección, configurarás un poco este [proyecto de ejemplo](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/2-exercise-prepare-project?WT.mc_id=academic-55190-ornella) que está escrito en Python, e instalarás la extensión de Contenedores Remotos para Visual Studio Code.
## Utiliza la extensión de Contenedores Remotos
Después, aprenderás a como [utilizar la extensión de Contenedores Remotos en Visual Studio Code](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/3-use-as-development-environment?WT.mc_id=academic-55190-ornella). Serás capaz de entender como Docker y Visual Studio Code hacen posible tener proyectos contenidos en sus propios entornos preconfigurados y en contenedores mediante esta extensión.
## Añade un contenedor de desarrollo a un proyecto existente
Ahora que ya tienes lista la extensión, [añadirás un contenedor de desarrollo y abriras el proyecto de ejemplo](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/4-exercise-add-development-container?WT.mc_id=academic-55190-ornella) en el contenedor.
## Personaliza las configuraciones del proyecto y del editor de código
Después de configurar el contenedor de desarrollo para el proyecto, aprenderás a como [personalizar y automatizar toda la configuración del proyecto](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/5-customize-settings?WT.mc_id=academic-55190-ornella) utilizando el [archivo devcontainer.json](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/6-exercise-customize-settings?WT.mc_id=academic-55190-ornella).
## Añade software a un contenedor existente
Hasta ahora has aprendido a como añadir un contenedor de desarrollo preconfigurado y personalizarlo utilizando el archivo devcontainer.json. Ahora, aprenderás a como [añadir software](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/7-add-software?WT.mc_id=academic-55190-ornella) más allá del que está disponible en esos contenedores de desarrollo preconfigurados para mejorar aún más tu experiencia. Aplica lo aprendido [utilizando un archivo de Docker (Dockerfile) para añadir Node.js a tu contenedor](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/8-exercise-add-software?WT.mc_id=academic-55190-ornella).
## Prueba
[Prueba de conocimientos](https://docs.microsoft.com/gl-es/learn/modules/use-docker-container-dev-env-vs-code/9-knowledge-check?WT.mc_id=academic-55190-ornella)
## Próximos pasos
- [Tutorial de contenedores remotos](https://code.visualstudio.com/docs/remote/containers-tutorial?WT.mc_id=academic-55190-ornella)
- [Aprende a crear un contenedor de desarrollo](https://code.visualstudio.com/docs/remote/create-dev-container?WT.mc_id=academic-55190-ornella)
- [Remoto principal - documentación de contenedores](https://code.visualstudio.com/docs/remote/containers?WT.mc_id=academic-55190-ornella)
- [Cómo pueden utilizar los estudiantes los contenedores de desarrollo](https://www.youtube.com/watch?v=Uvf2FVS1F8k)
## Práctica
Prueba tu conocimiento, intenta crear tu propio contenedor de desarrollo lleno de tus herramientas de desarrollo favoritas. ¡Compártelo con un amigo!
## Agradecimientos 💖
¡Muchísimas gracias a [Alfonso Amaya](https://www.linkedin.com/in/alfonso-camargo/) @Alfonso-AmayaC por habernos ayudado a traducir todo este contenido a español!
## Feedback
¡Asegúrate de dejarnos [comentarios sobre este taller](https://forms.office.com/r/MdhJWMZthR)!
[Código de conducta](../../../../CODE_OF_CONDUCT.md)

Двоичные данные
short/intro-github-dev/images/video.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 217 KiB

Просмотреть файл

@ -1,44 +1,6 @@
# Introducción a GitHub con GitHub.dev
## Módulo de referencia
[Introducción a Github](https://docs.microsoft.com/learn/modules/introduction-to-github/?WT.mc_id=academic-55780-jelooper)
## Objetivos
En este taller, aprenderá a usar Github.dev para administrar tareas básicas en Github
| **Objetivo** | Descripción |
| ----------------------------- | --------------------------------------------------------------------- |
| **Lo que aprenderás** | Cómo usar Github.dev para hacer cambios en Github |
| **Lo que vas a necesitar** | Una [cuenta de GitHub](https://github.com) |
| **Duración** | 20 minutos |
| **Diapositivas** | [Powerpoint](./slides.pptx) |
## Video
[![Recorrido por el taller](../../images/promo.png)](https://youtu.be/QJHd4jf4ekI "workshop walk-through")
> 🎥 Haga clic en esta imagen para ver a Jen dar un recorrido a través del taller a partir de 0:04:15
## Pre-aprendizaje
- Lea [esta introducción a GitHub](https://docs.microsoft.com/learn/modules/introduction-to-github/1-introduction/?WT.mc_id=academic-55780-jelooper).
- Lea [esta explicación del flujo de trabajo de GitHub](https://docs.microsoft.com/learn/modules/introduction-to-github/2-what-is-github/?WT.mc_id=academic-55780-jelooper).
## Requisitos previos
1. Asegúrese de tener una [cuenta de GitHub](https://github.com) e inicie sesión.
1. Desplácese hasta el [repositorio de la biblioteca del taller](https://github.com/microsoft/workshop-library).
1. Bifurca el repositorio dando clic sobre el botón **Fork** en la parte superior derecha de la página. Esto creara un nuevo repositorio en su cuenta para la practica.
## Lo que aprenderá
Imagina que encuentras repositorio de Github increíble y sientes que podrías agregarle algunas partes que hagan falta. ¿Cómo haría esto? En este taller, aprenderá a:
Imagina que encuentras repositorio de Github increíble y sientes que podrías agregarle algunas partes que hagan falta. ¿Cómo harías esto? En este taller, aprenderás a:
- Abrir un repositorio mediante GitHub.dev
- Crear una rama
@ -47,7 +9,53 @@ Imagina que encuentras repositorio de Github increíble y sientes que podrías a
- Fusionar el pull request
- Eliminar la rama
## Abra el repositorio bifurcado en GitHub.dev
## Requisitos previos
1. Asegúrese de tener una [cuenta de GitHub](https://github.com) e inicie sesión.
1. Desplácese hasta el [repositorio de la biblioteca del taller](https://github.com/microsoft/workshop-library).
1. Bifurca el repositorio dando clic sobre el botón **Fork** en la parte superior derecha de la página. Esto creara un nuevo repositorio en su cuenta para la practica.
- Lee [esta introducción a GitHub](https://docs.microsoft.com/learn/modules/introduction-to-github/1-introduction/?WT.mc_id=academic-55780-jelooper).
- Lee [esta explicación del flujo de trabajo de GitHub](https://docs.microsoft.com/learn/modules/introduction-to-github/2-what-is-github/?WT.mc_id=academic-55780-jelooper).
## Duración y presentación
El objetivo de este taller es que aprendas a usar Github.dev para administrar tareas básicas en GitHub, por lo cual, se tiene en cuenta los siguientes puntos:
| **Objetivo** | Descripción |
| ----------------------------- | --------------------------------------------------------------------- |
| **Duración** | 20 minutos |
| **Diapositivas** | [Powerpoint](../../slides.pptx) |
## Video
> 🎥 Haz clic en esta imagen para ver a Jen dar un recorrido de este taller a partir de 0:04:15
[![Recorrido por el taller](../../images/video.gif)](https://youtu.be/QJHd4jf4ekI "workshop walk-through")
## Recursos
Estos recursos los diseñamos para que tanto tú y tu audiencia puedan aprender un poco más sobre GitHub, Git y otros términos que se utilizan en este taller. ¡Siéntete libre de utilizar cualquiera de estos recursos que están a tu disposición en tus charlas o en redes sociales!
- [Memoramas](./recursos/memoramas.pdf)
Con la ayuda de este memorama podrás aprender y entender algunos conceptos basicos de manera más grafica.
![Memoramas GIF](./imagenes/flashcards.gif)
- [Glosario](./recursos/glosario.pdf)
En este archivo podrás encontrar los términos más utilizados en este taller y comandos más utilizados en cualquier otro proyecto.
![Glosario GIF](./imagenes/glosario.gif)
## Ejercicio
Pondras en practica todo lo que aprendiste en las lecciones pasadas.
<!--Paso 1 -->
<details> <summary> Paso 1: Abre el repositorio bifurcado en GitHub.dev</summary>
Desplázate hasta la copia del repositorio del taller de su cuenta.
@ -56,7 +64,10 @@ Escriba `.` en la ventana del navegador para abrirlo en GitHub.dev.
> GitHub.dev es una versión web de GitHub
## Crea una rama
</details>
<!--Paso 2 -->
<details> <summary> Paso 2: Crea una rama </summary>
En GitHub.dev, da clic en el ícono Control de código fuente en el panel izquierdo y luego el `...` en la esquina superior derecha del panel de archivos.
@ -64,7 +75,10 @@ Crea una nueva rama seleccionando Rama > Crear nueva rama.
Dale un nombre a la rama y cambia a esta rama.
## Confirma los cambios
</details>
<!--Paso 3 -->
<details> <summary> Paso 3: Confirma los cambios</summary>
Haz un pequeño cambio en el archivo `taller-sugerencias.md` – ¿qué taller le gustaría ver en esta biblioteca?
@ -73,8 +87,10 @@ Suba los cambios a su rama agregando un mensaje significativo al cuadro de texto
> El código de 'Pushing' significa que agregará los cambios a una copia bifurcada del repositorio.
El cambio aparece ahora en la copia del repositorio
</details>
## Crea una solicitud de extracción
<!--Paso 4 -->
<details> <summary> Paso 4: Crea un pull request</summary>
> Lee acerca de las [mejores prácticas](https://docs.microsoft.com/learn/modules/contribute-open-source/4-exercise-create-pr/?WT.mc_id=academic-55780-jelooper) para crear una solicitud de extracción.
@ -82,11 +98,13 @@ Ahora necesita mover los cambios de su rama a la rama principal.
En el panel izquierdo, haga clic en el ícono 'control de código fuente' y a continuación, en el botón '...'.
Elija 'Pull request>Crear Pull Request' desde el menú desplegable o utilice el ícono Pull request en el panel de archivos.
Selecciona 'Pull request>Crear Pull Request' desde el menú desplegable o utilice el ícono Pull request en el panel de archivos.
Fusione el cambio de la rama en la rama principal de su repositorio.
</details>
## Fusione el pull request y elimine la rama
<!--Paso 5 -->
<details> <summary> Paso 5: Fusione el pull request y elimine la rama</summary>
Compruebe que la bifurcación no tiene conflictos con la bifurcación base y fusiona la solicitud de extracción creando una confirmación de combinación.
@ -94,13 +112,17 @@ En la última pantalla, siga las instrucciones para eliminar la rama remota en l
> ¿Qué sucedió? El pequeño cambio que realizó en su rama fue copiado en la rama principal de su repositorio. Puede utilizar está técnica para contribuir a un proyecto de código abierto que acepte pull requests. Revisa la pestaña de issues de este repositorio para ver si hay algo que este marcado como abierto para contribuir.
## ¡Pruebe sus conocimientos!
</details>
[Realiza una prueba](https://docs.microsoft.com/learn/modules/introduction-to-github/4-knowledge-check/?WT.mc_id=academic-55780-jelooper)!
<br>
## Pasos siguientes
## ¡Prueba tus conocimientos!
Si quiere sugerir el cambio realizado en el repositorio original que bifurco, repita el proceso del pull request anterior al repositorio original.
En un modulo de Microsoft Learn, haras una pequeño examen que pondra a prueba los conocimientos que aprendiste en este taller, [haz clic aqui.](https://docs.microsoft.com/learn/modules/introduction-to-github/4-knowledge-check/?WT.mc_id=academic-55780-jelooper)
## Siguientes pasos
Si quieres sugerir el pull request en el repositorio original que hiciste fork, repite el proceso anterior.
[Lea más sobre como ampliar sus conocimientos de GitHub y sus flujos de trabajo](https://docs.microsoft.com/learn/modules/contribute-open-source/5-next-steps/?WT.mc_id=academic-55780-jelooper).
@ -108,9 +130,18 @@ Si quiere sugerir el cambio realizado en el repositorio original que bifurco, re
Ahora sabe como crear ramas y hacer pull requests, encuentra un repositorio de código abierto que busque contribuciones. ¿Hay alguna forma de que usted pueda contribuir a este proyecto?
## Agradecimientos 💖
¡Muchisimas gracias a [Julia Muiruri](https://developer.microsoft.com/en-us/advocates/julia-muiruri) por haber realizado las ilustraciones del [memorama](./recursos/memoramas.pdf) de este taller!
## Retroalimentación
Asegúrese de dar [retroalimentación a este taller](https://forms.office.com/r/MdhJWMZthR)!
Asegurate de dar [retroalimentación a este taller](https://forms.office.com/r/MdhJWMZthR)!
[Guía de conducta](../../CODE_OF_CONDUCT.md)
## [Codigo de conducta](../../CODE_OF_CONDUCT.md)
## Módulo de referencia
[Introducción a Github](https://docs.microsoft.com/learn/modules/introduction-to-github/?WT.mc_id=academic-55780-jelooper)

Двоичные данные
short/intro-github-dev/translations/es/imagenes/flashcards.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.6 MiB

Двоичные данные
short/intro-github-dev/translations/es/imagenes/glosario.gif Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 5.0 MiB

Двоичные данные
short/intro-github-dev/translations/es/recursos/glosario.pdf Normal file

Двоичный файл не отображается.

Двоичные данные
short/intro-github-dev/translations/es/recursos/memoramas.pdf Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,113 @@
# Introdução ao GitHub com GitHub.dev
## Módulo de Referência
[Introdução ao GitHub](https://docs.microsoft.com/pt-br/learn/modules/introduction-to-github/?WT.mc_id=academic-55780-jelooper)
## Objetivos
In this workshop, you will learn how to use GitHub.dev to manage basic tasks on GitHub.
| **Objetivo** | Descrição |
|------------------------------|--------------------------------------------------------|
| **O que você vai aprender** | Como usar o GitHub.dev para fazer alterações no GitHub |
| **Do que você irá precisar** | Uma [conta no GitHub](https://github.com) |
| **Duração** | 20 minutos |
| **Slides** | [slides](../../slides.pptx) |
## Video
[![passo a passo do workshop](../../images/promo.png)](https://youtu.be/QJHd4jf4ekI "passo a passo do workshop")
> 🎥 Clique nesta imagem para ver o Jen te guiar pelo workshop a partir de 0:04:15
## Pré-Aprendizado
Leia [esta introdução ao GitHub](https://docs.microsoft.com/pt-br/learn/modules/introduction-to-github/1-introduction/?WT.mc_id=academic-55780-jelooper).
Leia [esta explicação do workflow do GitHub](https://docs.microsoft.com/pt-br/learn/modules/introduction-to-github/2-what-is-github/?WT.mc_id=academic-55780-jelooper).
## Pré-requisitos
1. Certifique-se de ter uma conta [no GitHub](https://github.com) e faça sign in.
2. Navegue até o [repositório da Biblioteca do Workshop](https://github.com/microsoft/workshop-library).
3. Faça um *fork* do repositório clicando no botão **Fork** no canto superior direito da página. Isso criará um novo repositório em sua conta para praticar.
## O que você irá aprender
Imagine que você encontra um repositório incrível do GitHub e sente que pode adicionar algumas partes que estão faltando nele. Como você faria isso? Neste workshop, você aprenderá a:
- Abra um repositório usando o GitHub.dev
- Criar uma *branch*
- Confirmar alterações na *branch*
- Criar um *pull request*
- Fazer um *merge* do *pull request*
- Excluir o *branch*
## Abra o repositório bifurcado no GitHub.dev
Navegue até sua cópia do repositório Workshops em sua conta.
Digite `.` na janela do navegador para abri-lo no GitHub.dev.
> GitHub.dev é uma versão baseada na web do GitHub.
## Crie uma *branch*
No GitHub.dev, clique no ícone 'Source Control' no painel esquerdo e depois no botão `...` no canto superior direito do painel de arquivos.
Crie uma nova *branch* selecionando Branch > Create new Branch.
Dê um nome à *branch* e mude para esta *branch*.
## Confirme suas alterações
Faça uma pequena alteração no arquivo `workshop-suggestions.md` - que workshop você gostaria de ver nesta biblioteca?
Faça um *push* de suas alterações para sua *branch* adicionando uma mensagem significativa na caixa de texto no painel de origem e clicando no botão 'verificar'.
> Fazer um *push* significa que você adicionará suas alterações a uma cópia ramificada do repositório.
Sua alteração agora aparece em sua cópia do repositório.
## Criando uma *pull request*
> Leia sobre [práticas recomendadas](https://docs.microsoft.com/pt-br/learn/modules/contribute-open-source/4-exercise-create-pr/?WT.mc_id=academic-55780-jelooper) para criar uma pull request.
Agora você precisa mover suas alterações de sua *branch* para a *branch* principal.
No painel esquerdo, clique no ícone 'Source Control' e depois no botão '...'.
Escolha 'Pull Request>Create Pull Request' no menu suspenso ou use o ícone Pull Request no painel de arquivos.
Mescle sua alteração da *branch* na *branch* principal em seu repositório.
## Mescle a *pull request* e exclua a *branch*
Verifique se o branch não tem conflitos com o branch base e mescle o *Pull Request* criando um *Merge Commit*.
Na última tela, siga os prompts para excluir a *branch* remota onde você fez suas alterações.
> O que acabou de acontecer? A pequena alteração que você fez em seu *branch* foi copiada para o *branch* principal do seu repositório. Você pode usar essa técnica para contribuir com um projeto de código aberto que aceite *pull requests*. Verifique a guia de problemas do repositório para ver se algo está marcado como aberto para contribuição.
## Teste seu conhecimento!
[Responda a um questionário](https://docs.microsoft.com/pt-br/learn/modules/introduction-to-github/4-knowledge-check/?WT.mc_id=academic-55780-jelooper)!
## Próximos Passos
Se quiser sugerir a alteração que você fez no repositório original no qual você fez o *fork*, repita o processo de *Pull Request* para o repositório original.
[Leia mais para aprender mais sobre o GitHub e seus workflows](https://docs.microsoft.com/pt-br/learn/modules/contribute-open-source/5-next-steps/?WT.mc_id=academic-55780-jelooper).
## Pratique
Agora que você sabe como criar *branches* e *pull requests*, encontre um repositório de código aberto que esteja buscando contribuições. Existe alguma forma de contribuir com este projeto?
## Feedback
Certifique-se de dar [feedback sobre este workshop](https://forms.office.com/r/MdhJWMZthR)!
[Código de Conduta](../../../../CODE_OF_CONDUCT.md)

Просмотреть файл

@ -1,3 +1,4 @@
In this folder, you can find translations of existing workshops in their corresponding folders.
- [Spanish](./es/README.es.md)
- [Spanish](./es/README.es.md)
- [Portuguese](./pt-br/README.md)

Просмотреть файл

@ -0,0 +1,69 @@
# Introdução aos Aplicativos Web Estáticos do Azure
## Módulo Origem
[Publicar um aplicativo Angular, React, Svelte ou Vue JavaScript com os Aplicativos Web Estáticos do Azure](https://docs.microsoft.com/pt-br/learn/modules/publish-app-service-static-web-app-api/?WT.mc_id=academic-56895-chnoring)
## Objetivos
Neste workshop, você aprenderá a implantar seus arquivos estáticos no Azure, sejam eles um Aplicativo de Página Única JavaScript (SPA) avançado ou um HTML simples.
| **Objetivo** | Descrição |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **O que você vai aprender** | Publicar um aplicativo Angular, React, Svelte ou Vue JavaScript com os Aplicativos Web Estáticos |
| **O que você vai precisar** | Um navegador da Web, uma conexão com internet, uma conta do Azure, [Visual Studio Code](https://code.visualstudio.com?WT.mc_id=academic-56895-chnoring), e a [extensão Aplicativos Web Estáticos do VS Code](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestaticwebapps&WT.mc_id=academic-56895-chnoring) |
| **Duração** | 20 minutos |
| **Slides** | [slides](../../slides.pptx) |
## Vídeo
[![workshop walk-through](../../images/promo.png)](https://youtu.be/QJHd4jf4ekI "workshop walk-through")
> 🎥 Clique nesta imagem para ver o Chris te guiar pelo workshop a partir de 0:21:00
## O que você vai aprender
Você é um desenvolvedor web e criou um aplicativo web. Geralmente, um aplicativo web consiste de arquivos HTML, JavaScript ou CSS que podem ser criados manualmente ou por meio de um framework.
Você gostaria de poder implementar ou publicar seu site no Azure para mostrar a seus amigos?
Neste workshop você vai aprender:
- Usar o Serviço de Aplicativos Estáticos de Web do Azure (Azure Static Web Apps).
- Publicar o aplicativo web no Azure utilizando este serviço.
## Introdução ao Serviço de Aplicativos Estáticos de Web do Azure
Leia sobre o serviço [nessa introdução](https://docs.microsoft.com/pt-br/learn/modules/publish-app-service-static-web-app-api/1-introduction?pivots=angular&WT.mc_id=academic-56895-chnoring).
## Criar um aplicativo web
Antes de você publicar o aplicativo no Azure, você precisará criá-lo.
- Criar o repositório através de um template
- Executar o aplicativo localmente e visualizá-lo no navegador.
[Vamos criar o repositório](https://docs.microsoft.com/pt-br/learn/modules/publish-app-service-static-web-app-api/2-exercise-get-started?pivots=angular&WT.mc_id=academic-56895-chnoring)!
## Planeje seu Aplicativo Estático de Web
Para publicar seu aplicativo no Azure, é preciso provisionar um recurso estático de web do Azure. A configuração desse recurso exige que alguns campos sejam preenchidos com informações adicionais, que serão descritas mais abaixo. Seu repositório do GitHub possui uma funcionalidade chamada Ações (GitHub Actions), que permite automatizações tais como teste de código, publicação no Azure, e muito mais. O GitHub Ações (GitHub Actions) é a tecnologia subjacente da qual os Aplicativos Estáticos de Web dependem para sua publicação na nuvem.
Para saber mais sobre os Aplicativos Web Estáticos do Azure e seus campos, assim como as ações do GitHub, [clique aqui](https://docs.microsoft.com/pt-br/learn/modules/publish-app-service-static-web-app-api/3-static-web-apps?pivots=angular&WT.mc_id=academic-56895-chnoring).
## Criar um Aplicativo Estático no Azure
É possível utilizar a extensão Azure do Visual Studio Code para simplificar o processo de desenvolvimento para web. Esta extensão, publicada pela equipe Microsoft de Aplicativos Estáticos do Azure, permite a criação dos recursos de nuvem necessários ao aplicativo web. Isso facilita muito a publicação do seu aplicativo. Saiba mais sobre [este processo aqui](https://docs.microsoft.com/pt-br/learn/modules/publish-app-service-static-web-app-api/4-exercise-static-web-apps?pivots=angular&WT.mc_id=academic-56895-chnoring).
## Próximos passos
Tente outras formas de construir um aplicativo estático neste módulo - você pode usar Vue, React, Angular ou Svelte [nesse módulo](https://docs.microsoft.com/pt-br/learn/modules/publish-app-service-static-web-app-api?WT.mc_id=academic-56895-chnoring).
## Praticar
Agora que você conhece sobre o Aplicativo Web Estático do Azure, aprenda como [publicar uma API](https://docs.microsoft.com/pt-br/learn/modules/publish-static-web-app-api-preview-url?WT.mc_id=academic-56895-chnoring) e como [autenticar usuários](https://docs.microsoft.com/pt-br/learn/modules/publish-static-web-app-authentication/?WT.mc_id=academic-56895-chnoring) com o Aplicativo Web Estático do Azure.
## Comentários
Certifique-se de dar [comentários sobre esse workshop](https://forms.office.com/r/MdhJWMZthR)!
[Código de Conduta](../../../../CODE_OF_CONDUCT.md)

Просмотреть файл

@ -72,12 +72,12 @@ Vamos assumir que você está apresentando sobre a história dos três porquinho
Utilize duas ou três sentenças para recapitular o que acabou de acontecer. Por exemplo: o lobo mau foi fácil, afinal levou apenas alguns golpes e quase pegou o porquinho.
Resumir permite manter uma audiência no caminho certo.
1. **Repeat to Connect**
1. **Repetir para Conectar**
Encontre elementos que você pode repetir então a história ou apresentação se conecta. Por exemplo, você mencionar no início que o lobo estava com muita fome. No final, você pode dizer "agora esse lobo está ainda mais faminto".
Isso ajuda a encadear os eventos de uma maneira que o público pode se relacionar.
1. **Enfatize a ideia unica**
1. **Enfatize a ideia única**
Tem que haver *uma* lição importante para seu público. Use essa dica toda vez que puder e enfatize-a: "O trabalho duro comprensa [...]. Os três porquinhos foram beneficiados do trabalho duro na casa mais forte"
@ -89,9 +89,9 @@ Agora que você tem um novo conjunto de ferramentas para falar em público, tent
Sempre pratique na frente de outra pessoa ou se você não tiver ninguém para praticar como platéia, tente gravar você mesmo durante alguns minutos e assista a gravação para ver onde você pode melhorar.
## Feedback
## Comentários
Certifique-se de dar [feedback sobre este workshop](https://forms.office.com/r/MdhJWMZthR)!
Certifique-se de dar [comentários sobre este workshop](https://forms.office.com/r/MdhJWMZthR)!
[Código de Conduta](../../CODE_OF_CONDUCT.md)

Просмотреть файл

@ -1 +0,0 @@
## PR your ideas on great workshop topics here!