├── .devcontainer
├── Dockerfile
└── devcontainer.json
├── .github
└── workflows
│ └── docker-image.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── SECURITY.md
├── SUPPORT.md
├── example-lesson.ipynb
├── example-notebook.ipynb
├── images
├── Codespace_build.png
├── Codespace_rebuild.png
└── video-banner.gif
├── requirements.txt
├── slides.pptx
├── translations
├── README.md
├── es
│ ├── README.md
│ ├── example-notebook.ipynb
│ └── slides_es.pptx
└── pt-BR
│ ├── README.md
│ ├── exemplo.ipynb
│ ├── licao.ipynb
│ └── slides_pt-BR.pptx
└── wine-regions.csv
/.devcontainer/Dockerfile:
--------------------------------------------------------------------------------
1 | # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.245.0/containers/python-3/.devcontainer/base.Dockerfile
2 |
3 | # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
4 | ARG VARIANT="3.10-bullseye"
5 | FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
6 |
7 | # Define the path to the virtualenv to work with
8 | ARG VENV_PATH="/home/vscode/venv"
9 |
10 | COPY requirements.txt /tmp/pip-tmp/
11 | RUN su vscode -c "python -m venv /home/vscode/venv" \
12 | && su vscode -c "${VENV_PATH}/bin/pip --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt" \
13 | && rm -rf /tmp/pip-tmp
14 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2 | // https://github.com/microsoft/vscode-dev-containers/tree/v0.245.0/containers/python-3
3 | {
4 | "name": "Python 3",
5 | "build": {
6 | "dockerfile": "Dockerfile",
7 | "context": "..",
8 | "args": {
9 | // Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6
10 | // Append -bullseye or -buster to pin to an OS version.
11 | // Use -bullseye variants on local on arm64/Apple Silicon.
12 | "VARIANT": "3.8-bullseye",
13 | // Options
14 | "NODE_VERSION": "none"
15 | }
16 | },
17 |
18 | // Configure tool-specific properties.
19 | "customizations": {
20 | // Configure properties specific to VS Code.
21 | "vscode": {
22 | // Set *default* container specific settings.json values on container create.
23 | "settings": {
24 | "python.defaultInterpreterPath": "/home/vscode/venv/bin/python"
25 | },
26 |
27 | // Add the IDs of extensions you want installed when the container is created.
28 | "extensions": [
29 | "ms-python.python",
30 | "ms-python.vscode-pylance",
31 | "GitHub.copilot"
32 | ]
33 | }
34 | },
35 |
36 | // Use 'forwardPorts' to make a list of ports inside the container available locally.
37 | // "forwardPorts": [],
38 |
39 | // Use 'postCreateCommand' to run commands after the container is created.
40 | // "postCreateCommand": "pip3 install --user -r requirements.txt",
41 |
42 | // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
43 | "remoteUser": "vscode",
44 | "features": {
45 | "azure-cli": "latest"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/.github/workflows/docker-image.yml:
--------------------------------------------------------------------------------
1 | name: Docker Image CI
2 |
3 | on:
4 | pull_request:
5 | branches: [ "main" ]
6 | # Allow mannually trigger
7 | workflow_dispatch:
8 |
9 | jobs:
10 |
11 | build:
12 |
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - uses: actions/checkout@v3
17 | - name: Build the Codespaces container image
18 | run: docker build . --file .devcontainer/Dockerfile
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=526669888)
2 |
3 | # Python Codespace Template
4 |
5 | _Create or extend a ready-to-use repository for teaching Python in minutes_
6 |
7 | * **Who is this for?** _Educators of all levels_.
8 | * **How much experience do students need?** _Zero_. This template is built with basic elements complete with comments so it can be used in beginner to advanced lessons.
9 | * **Prerequisites:** _None_. This template will provide a working Jupyter Notebook with Pandas using a dataset so that you can immediately start analyzing data as well as an example Notebook that you can use to teach Python with [GitHub Copilot](https://copilot.github.com), a powerful AI tool that helps you write code faster.
10 |
11 |
12 | With this template repository you can quickly create a normalized environment to teach or learn Python. Make your students focus on learning rather than setting up their environment. This template uses Codespaces, a development environment that's hosted in the cloud with [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), a powerful text editor.
13 |
14 | You'll also get the chance to try out Copilot to create a lesson plan using the [example-lesson.ipynb](./example-lesson.ipynb) file.
15 |
16 | 🤔 Curious? Watch the following video where we explain all the details:
17 |
18 | [](https://youtu.be/7rMvb03hHpI "Teaching Python with Codespaces")
19 |
20 |
21 | 🎥 Watch the video tutorial to learn more about Codespaces
22 |
23 | [](https://aka.ms/CodespacesVideoTutorial "Codespaces Tutorial")
24 |
25 |
26 | 🚀 Codespaces features:
27 |
28 | - Repeatable cloud environment offering a push-button experience.
29 | - Can be configured and customized.
30 | - Integrates with your repositories on GitHub and [VSCode](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza)
31 |
32 | As a teacher that means that you can create an environment, in the cloud, for your class that all students can use with zero or next to zero configuration regardless of what operating system they are using.
33 |
34 | ## 🧑🏫 What is GitHub Codespace and how can I use it in my teaching?
35 |
36 | A Codespace is a development environment that's hosted in the cloud that you can configure. The Codespaces Education benefit gives Global Campus teachers a free monthly allowance of GitHub Codespaces hours to use in [GitHub Classroom](classroom.github.com). Learn more [here](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) about Using GitHub Codespaces with GitHub Classroom.
37 |
38 | If you are not already a Global Campus teacher, apply [here](https://education.github.com/discount_requests/pack_application) or for more information, see [Apply to GitHub Global Campus as a teacher](https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher).
39 |
40 | ## Customization
41 |
42 | Customize your project for GitHub Codespaces by committing configuration files to your repository (often known as Configuration-as-Code), which creates a repeatable codespace configuration for all users of your project.
43 |
44 | You can configure things like:
45 |
46 | - Extensions, you can specify what extensions should be preinstalled.
47 | - Dotfiles and settings.
48 | - Operating system libraries and dependencies
49 |
50 | > 💡 Learn more about [customization and configuration in the official documentation](https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account)
51 |
52 |
53 | ## Codespaces template
54 |
55 | This repo is a GitHub template. It contains the following:
56 |
57 | - [example-notebook.ipynb](./example-notebook.ipynb): A Jupyter notebook using the [Pandas](https://pandas.pydata.org/) library to teach basic operations with a small CSV (Comma Separated Value file) [dataset](./wine-regions.csv)
58 | - [.devcontainer/Dockerfile](./.devcontainer/Dockerfile): Configuration file used by Codespaces to determine operating system and other details.
59 | - [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json), A configuration file used by Codespaces to configure [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza) settings, such as the enabling of additional extensions.
60 | - `README.md`. This file describes this repository and what's in it.
61 |
62 | ## 🧐 Try it out
63 |
64 | Try out this template repository using Codespaces following these steps:
65 |
66 | 1. Create a repository from this template. Use this [create repo link](https://github.com/microsoft/codespaces-teaching-template-py/generate). You can make the repository private or public, up to you.
67 | 1. Navigate to the main page of the newly created repository.
68 | 1. Under the repository name, use the Code drop-down menu, and in the Codespaces tab, select "Create codespace on main".
69 | 
70 | 1. Wait as Github initializes the codespace:
71 | 
72 |
73 |
74 | ### Inspect your codespaces environment
75 |
76 | What you have at this point is a pre-configured environment where all the runtimes and libraries you need are already installed - a zero config experience.
77 |
78 | You also have a Jupyter Notebook that you can start using without any configuration.
79 |
80 | > This environment will run the same regardless of whether your students are on Windows, macOS or Linux.
81 |
82 | Open up your Jupyter Notebook file [example-notebook.ipynb](./example-notebook.ipynb) and note how you can add code and run it.
83 |
84 | ## Customize the Codespace
85 |
86 | Let's make changes to your environment. We'll cover two different challenges that you are likely to want to do:
87 |
88 | 1. Change the Python version installed
89 | 1. Add an extension
90 |
91 |
92 | ### Step 1: Change the Python environment
93 |
94 | Let's say you want to change what version of Python is installed. This is something you can control.
95 |
96 | Open [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) and replace the following section:
97 |
98 | ```json
99 | "VARIANT": "3.8-bullseye"
100 | ```
101 |
102 | with the following instruction:
103 |
104 | ```json
105 | "VARIANT": "3.9-bullseye"
106 | ```
107 |
108 | This change instructs Codespaces to use Python 3.9 instead of 3.8.
109 |
110 | If you make any configuration change in `devcontainer.json`, a box will appear after saving.
111 |
112 | 
113 |
114 | Click on rebuild. Wait for your Codespace to rebuild the VS Code environment.
115 |
116 | ### Step 2: Add an extension
117 |
118 | Your environment comes with pre-installed extensions. You can change which extensions your Codespaces environment starts with. Here's how:
119 |
120 | 1. Open file [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) and locate the following JSON element **extensions**:
121 |
122 | ```json
123 | "extensions": [
124 | "ms-python.python",
125 | "ms-python.vscode-pylance"
126 | ]
127 | ```
128 |
129 | 1. Add _"ms-python.black-formatter"_ to the list of extensions. It should end up looking like the following:
130 |
131 | ```json
132 | "extensions": [
133 | "ms-python.python",
134 | "ms-python.vscode-pylance",
135 | "ms-python.black-formatter"
136 | ]
137 | ```
138 |
139 | That string is the unique identifier of [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza), a popular extension for formatting Python code according to best practices. Adding the _"ms-python.black-formatter"_ identifier to the list lets Codespaces know that this extension should be pre-installed upon startup.
140 |
141 | Remainder: When you change any configuration on the json, a box will appear after saving.
142 |
143 | 
144 |
145 | Click on rebuild. Wait for your codespace to rebuild the VS Code environment.
146 |
147 | To find the unique identifier of an extension:
148 |
149 | - Navigate to the extension's web page, for example [https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza)
150 | - Locate the *Unique Identifier* field under **More info** section on your right side.
151 |
152 | ## 🤖 Use Copilot to create a lesson for students
153 | GitHub Copilot is now available in GitHub Codespaces. You can use Copilot to create a lesson for your students. This repository includes the extension for Copilot so that you can use it right away. Make sure your account has access to Copilot. If you don't have access, you can [request access here](https://github.com/login?return_to=%2Fgithub-copilot%2Fsignup).
154 |
155 | GitHub Copilot is free for students and faculty. [Learn more](https://education.github.com/pack/offers). Follow [these steps](https://techcommunity.microsoft.com/t5/educator-developer-blog/step-by-step-setting-up-github-student-and-github-copilot-as-an/ba-p/3736279?WT.mc_id=academic-0000-alfredodeza) to verify your student or faculty membership and enable Copilot for free.
156 |
157 | ### Step 1: Write a description for your lesson
158 | Open the [example-notebook.ipynb](./example-notebook.ipynb) file and write a description for your lesson in the first cell. Make sure Copilot is enabled by clicking on the Copilot icon in the status bar and ensuring you're logged into GitHub.
159 |
160 | Edit the first cell and start typing `For this lesson`. Copilot will suggest a description for your lesson. Select the suggestion and press `Tab` to accept it.
161 |
162 | The cell should now look similar to this:
163 |
164 | ```markdown
165 | # Create a lesson using GitHub Copilot
166 | For this lesson, you'll use GitHub Copilot to create a lesson for students to learn how to write functions in Python. You'll use Copilot to write code, and you'll use Copilot to write text.
167 | ```
168 |
169 | It is OK if Copilot doesn't suggest an exact replica of the text above. You can edit the text to make it more suitable for your lesson.
170 |
171 | ### Step 2 Add steps to your lesson
172 | Add a new cell below the description cell and start typing `### Step 1: Enable` to create a new step in your lesson. Copilot will suggest a step for your lesson. Select the suggestion and press `Tab` to accept it.
173 |
174 | The cell should now look similar to this:
175 |
176 | ```markdown
177 | ## Step 1: Enable GitHub Copilot
178 | Enable Copilot by following the instructions in the [GitHub Copilot documentation](https://docs.github.com/en/codespaces/developing-with-codespaces/using-codespaces-with-github-copilot). If you are a student, you can get a free [GitHub Student Developer Pack](https://education.github.com/pack) to get access to Copilot.
179 | ```
180 |
181 | Keep adding more steps and continue typing to get more accurate suggestions for the content you are interested in. For example, this is a step that Copilot suggested for the next step in the lesson:
182 |
183 | ```markdown
184 | ## Step 3: Create challenges for this lesson
185 | You'll teach students how to write functions in Python.
186 | ```
187 |
188 | You can use the example above to see what Copilot can suggest and auto-complete. Feel free to add as many steps as you think are necessary for your lesson.
189 |
190 | ### Step 3: Add code challenges for students
191 | Add a new code cell below the last step and start with a Python comment that describes the challenge. For example, you can write `# create a challenge for a student to write a function that returns the sum of two numbers`. Copilot will suggest a solution for the challenge. Select the suggestion and press `Tab` to accept it. For every new line, you can press `Return` (or `Enter`) to get a new suggestion.
192 |
193 | This is a sample of what Copilot suggested for the challenge above:
194 |
195 | ```python
196 | # create a challenge for a student to write a function that returns the sum of two numbers
197 | """
198 | In this challenge, you'll write a function that returns the sum of two numbers.
199 | You'll use the `sum` function to add the two numbers.
200 | Start by writing a function that takes two numbers as parameters.
201 | Then, use the `sum` function to add the two numbers.
202 | Finally, return the sum of the two numbers.
203 | """
204 | ```
205 |
206 | Again, your challenge may not be exactly the same as the one above. You can edit the challenge to make it more suitable for your lesson.
207 |
208 | Create as many code cells with example prompts for your lesson.
209 |
210 | ### Step 4: Create a quiz for students
211 | Add a new cell below for writing Markdown (not code!) and start by writing `### Quiz`. Then add an _HTML_ comment to create a prompt so that GitHub Copilot understands what type of quiz you want to create. For example, you could use something similar to this:
212 |
213 | ```html
214 |
215 | ```
216 |
217 | Copilot might not suggest a quiz for you right away. If that's the case, add new lines to the comment and press `Return` (or `Enter`) and start enumerating the questions you want to ask. For example, you could write:
218 |
219 | ```markdown
220 | 1. What is the output of the following code?
221 | ```
222 |
223 | Of if you are looking for a specific question about a topic it could be:
224 |
225 | ```markdown
226 | 2. When you create a function that
227 | ```
228 |
229 | Copilot suggested a question using variable arguments which is what the challenge is about:
230 |
231 | ```markdown
232 | 2. When you create a function that accepts a variable number of arguments, what is the name of the parameter that you use to access the arguments?
233 | ```
234 |
235 | Finally, review the cells and make changes as necessary. You can also add more steps, challenges, and questions to your lesson.
236 |
237 | Congratulations! You've created a lesson for students to learn how to write functions in Python using GitHub Copilot. You can use Copilot to assist you in documentation, writing examples, or challenges like in this repository. Even this whole section was written using Copilot!
238 |
239 | ## Learn more
240 |
241 | - [GitHub Codespaces docs overview](https://docs.github.com/en/codespaces/overview)
242 | - [GitHub Codespaces docs quickstart](https://docs.github.com/en/codespaces/getting-started/quickstart)
243 | - [Using GitHub Codespaces with GitHub Classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom)
244 |
245 |
246 |
247 | ### 🔎 Found an issue or have an idea for improvement?
248 | Help us make this template repository better by [letting us know and opening an issue!](/../../issues/new).
249 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Support
2 |
3 | ## How to file issues and get help
4 |
5 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing
6 | issues before filing new issues to avoid duplicates. For new issues, file your bug or
7 | feature request as a new Issue.
8 |
9 | For help and questions about using this project, please [file an issue](/../../issues/new)
10 |
11 | ## Microsoft Support Policy
12 |
13 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
14 |
--------------------------------------------------------------------------------
/example-lesson.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "attachments": {},
5 | "cell_type": "markdown",
6 | "metadata": {},
7 | "source": [
8 | "# Create a lesson using GitHub Copilot\n",
9 | "\n",
10 | "\n",
11 | "## Step 1: Enable GitHub Copilot\n",
12 | "\n",
13 | "\n",
14 | "## Step 2: Add new content to this lesson\n",
15 | "\n",
16 | "\n",
17 | "## Step 3: Create challenges for this lesson\n"
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": null,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "# replace this comment with a prompt for Copilot that starts with \"create a challenge for a student\" to get useful suggestions\n"
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": null,
32 | "metadata": {},
33 | "outputs": [],
34 | "source": [
35 | "# replace this comment with a prompt for Copilot that starts with \"create a challenge for a student\" to get useful suggestions\n"
36 | ]
37 | },
38 | {
39 | "attachments": {},
40 | "cell_type": "markdown",
41 | "metadata": {},
42 | "source": [
43 | "## Quiz: Python functions and variable arguments\n"
44 | ]
45 | }
46 | ],
47 | "metadata": {
48 | "kernelspec": {
49 | "display_name": "Python 3",
50 | "language": "python",
51 | "name": "python3"
52 | },
53 | "language_info": {
54 | "name": "python",
55 | "version": "3.11.1 (main, Dec 23 2022, 09:28:24) [Clang 14.0.0 (clang-1400.0.29.202)]"
56 | },
57 | "orig_nbformat": 4,
58 | "vscode": {
59 | "interpreter": {
60 | "hash": "5c7b89af1651d0b8571dde13640ecdccf7d5a6204171d6ab33e7c296e100e08a"
61 | }
62 | }
63 | },
64 | "nbformat": 4,
65 | "nbformat_minor": 2
66 | }
67 |
--------------------------------------------------------------------------------
/example-notebook.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Basic Pandas operations\n",
8 | "This notebook will walk you through some basic operations with the Pandas Python library to explore a small dataset from wine regions around the world.\n",
9 | "\n",
10 | "**Learning Objectives:**\n",
11 | "\n",
12 | "1. Import Pandas using a common pattern\n",
13 | "1. Read a CSV dataset from disk\n",
14 | "1. Perform a quick overview of the dataset\n",
15 | "1. Use plot to provide visual context"
16 | ]
17 | },
18 | {
19 | "cell_type": "markdown",
20 | "metadata": {},
21 | "source": [
22 | "### Import Pandas \n",
23 | "And then read a local CSV dataset file"
24 | ]
25 | },
26 | {
27 | "cell_type": "code",
28 | "execution_count": 35,
29 | "metadata": {},
30 | "outputs": [
31 | {
32 | "data": {
33 | "text/html": [
34 | "
\n",
35 | "\n",
48 | "
\n",
49 | " \n",
50 | "
\n",
51 | "
\n",
52 | "
region
\n",
53 | "
variety
\n",
54 | "
rating
\n",
55 | "
\n",
56 | " \n",
57 | " \n",
58 | "
\n",
59 | "
0
\n",
60 | "
Pessac-Leognan, Bordeaux, France
\n",
61 | "
Red Wine
\n",
62 | "
90.0
\n",
63 | "
\n",
64 | "
\n",
65 | "
1
\n",
66 | "
Spain
\n",
67 | "
Sparkling & Champagne
\n",
68 | "
88.0
\n",
69 | "
\n",
70 | "
\n",
71 | "
2
\n",
72 | "
Santa Ynez Valley, Santa Barbara, Central Coas...
\n",
73 | "
Red Wine
\n",
74 | "
96.0
\n",
75 | "
\n",
76 | "
\n",
77 | "
3
\n",
78 | "
Sta. Rita Hills, Santa Barbara, Central Coast,...
\n",
79 | "
Red Wine
\n",
80 | "
90.0
\n",
81 | "
\n",
82 | "
\n",
83 | "
4
\n",
84 | "
Burgundy, France
\n",
85 | "
White Wine
\n",
86 | "
94.0
\n",
87 | "
\n",
88 | "
\n",
89 | "
5
\n",
90 | "
Santa Lucia Highlands, Monterey, Central Coast...
\n",
91 | "
Red Wine
\n",
92 | "
90.0
\n",
93 | "
\n",
94 | "
\n",
95 | "
6
\n",
96 | "
Argentina
\n",
97 | "
Red Wine
\n",
98 | "
88.0
\n",
99 | "
\n",
100 | "
\n",
101 | "
7
\n",
102 | "
Chianti Classico, Chianti, Tuscany, Italy
\n",
103 | "
Red Wine
\n",
104 | "
91.0
\n",
105 | "
\n",
106 | "
\n",
107 | "
8
\n",
108 | "
Ribbon Ridge, Willamette Valley, Oregon
\n",
109 | "
Red Wine
\n",
110 | "
95.0
\n",
111 | "
\n",
112 | "
\n",
113 | "
9
\n",
114 | "
Barolo, Piedmont, Italy
\n",
115 | "
Red Wine
\n",
116 | "
94.0
\n",
117 | "
\n",
118 | "
\n",
119 | "
10
\n",
120 | "
Portugal
\n",
121 | "
White Wine
\n",
122 | "
90.0
\n",
123 | "
\n",
124 | "
\n",
125 | "
11
\n",
126 | "
Central Coast, California
\n",
127 | "
Red Wine
\n",
128 | "
92.0
\n",
129 | "
\n",
130 | "
\n",
131 | "
12
\n",
132 | "
Central Coast, California
\n",
133 | "
Red Wine
\n",
134 | "
92.0
\n",
135 | "
\n",
136 | "
\n",
137 | "
13
\n",
138 | "
Alsace, France
\n",
139 | "
White Wine
\n",
140 | "
91.0
\n",
141 | "
\n",
142 | "
\n",
143 | "
14
\n",
144 | "
Willamette Valley, Oregon
\n",
145 | "
White Wine
\n",
146 | "
90.0
\n",
147 | "
\n",
148 | "
\n",
149 | "
15
\n",
150 | "
Columbia Valley, Washington
\n",
151 | "
Red Wine
\n",
152 | "
90.0
\n",
153 | "
\n",
154 | "
\n",
155 | "
16
\n",
156 | "
Napa Valley, California
\n",
157 | "
Red Wine
\n",
158 | "
94.0
\n",
159 | "
\n",
160 | "
\n",
161 | "
17
\n",
162 | "
Barolo, Piedmont, Italy
\n",
163 | "
Red Wine
\n",
164 | "
92.0
\n",
165 | "
\n",
166 | "
\n",
167 | "
18
\n",
168 | "
Rioja, Spain
\n",
169 | "
Red Wine
\n",
170 | "
91.0
\n",
171 | "
\n",
172 | "
\n",
173 | "
19
\n",
174 | "
Eden Valley, Barossa, South Australia, Australia
\n",
175 | "
White Wine
\n",
176 | "
90.0
\n",
177 | "
\n",
178 | " \n",
179 | "
\n",
180 | "
"
181 | ],
182 | "text/plain": [
183 | " region variety \\\n",
184 | "0 Pessac-Leognan, Bordeaux, France Red Wine \n",
185 | "1 Spain Sparkling & Champagne \n",
186 | "2 Santa Ynez Valley, Santa Barbara, Central Coas... Red Wine \n",
187 | "3 Sta. Rita Hills, Santa Barbara, Central Coast,... Red Wine \n",
188 | "4 Burgundy, France White Wine \n",
189 | "5 Santa Lucia Highlands, Monterey, Central Coast... Red Wine \n",
190 | "6 Argentina Red Wine \n",
191 | "7 Chianti Classico, Chianti, Tuscany, Italy Red Wine \n",
192 | "8 Ribbon Ridge, Willamette Valley, Oregon Red Wine \n",
193 | "9 Barolo, Piedmont, Italy Red Wine \n",
194 | "10 Portugal White Wine \n",
195 | "11 Central Coast, California Red Wine \n",
196 | "12 Central Coast, California Red Wine \n",
197 | "13 Alsace, France White Wine \n",
198 | "14 Willamette Valley, Oregon White Wine \n",
199 | "15 Columbia Valley, Washington Red Wine \n",
200 | "16 Napa Valley, California Red Wine \n",
201 | "17 Barolo, Piedmont, Italy Red Wine \n",
202 | "18 Rioja, Spain Red Wine \n",
203 | "19 Eden Valley, Barossa, South Australia, Australia White Wine \n",
204 | "\n",
205 | " rating \n",
206 | "0 90.0 \n",
207 | "1 88.0 \n",
208 | "2 96.0 \n",
209 | "3 90.0 \n",
210 | "4 94.0 \n",
211 | "5 90.0 \n",
212 | "6 88.0 \n",
213 | "7 91.0 \n",
214 | "8 95.0 \n",
215 | "9 94.0 \n",
216 | "10 90.0 \n",
217 | "11 92.0 \n",
218 | "12 92.0 \n",
219 | "13 91.0 \n",
220 | "14 90.0 \n",
221 | "15 90.0 \n",
222 | "16 94.0 \n",
223 | "17 92.0 \n",
224 | "18 91.0 \n",
225 | "19 90.0 "
226 | ]
227 | },
228 | "execution_count": 35,
229 | "metadata": {},
230 | "output_type": "execute_result"
231 | }
232 | ],
233 | "source": [
234 | "import pandas as pd\n",
235 | "df = pd.read_csv(\"wine-regions.csv\")\n",
236 | "df.head(20)"
237 | ]
238 | },
239 | {
240 | "cell_type": "markdown",
241 | "metadata": {},
242 | "source": [
243 | "### Create a randomized subset of data\n",
244 | "Use the `sample()` method to get `n` items from the dataset"
245 | ]
246 | },
247 | {
248 | "cell_type": "code",
249 | "execution_count": 37,
250 | "metadata": {},
251 | "outputs": [
252 | {
253 | "data": {
254 | "text/html": [
255 | "
\n",
256 | "\n",
269 | "
\n",
270 | " \n",
271 | "
\n",
272 | "
\n",
273 | "
region
\n",
274 | "
variety
\n",
275 | "
rating
\n",
276 | "
\n",
277 | " \n",
278 | " \n",
279 | "
\n",
280 | "
1202
\n",
281 | "
Napa Valley, California
\n",
282 | "
White Wine
\n",
283 | "
90.0
\n",
284 | "
\n",
285 | "
\n",
286 | "
1957
\n",
287 | "
Rioja, Spain
\n",
288 | "
Red Wine
\n",
289 | "
92.0
\n",
290 | "
\n",
291 | "
\n",
292 | "
4077
\n",
293 | "
Lirac, Rhone, France
\n",
294 | "
Red Wine
\n",
295 | "
94.0
\n",
296 | "
\n",
297 | "
\n",
298 | "
246
\n",
299 | "
Barolo, Piedmont, Italy
\n",
300 | "
Red Wine
\n",
301 | "
92.0
\n",
302 | "
\n",
303 | "
\n",
304 | "
719
\n",
305 | "
Willamette Valley, Oregon
\n",
306 | "
Red Wine
\n",
307 | "
92.0
\n",
308 | "
\n",
309 | " \n",
310 | "
\n",
311 | "
"
312 | ],
313 | "text/plain": [
314 | " region variety rating\n",
315 | "1202 Napa Valley, California White Wine 90.0\n",
316 | "1957 Rioja, Spain Red Wine 92.0\n",
317 | "4077 Lirac, Rhone, France Red Wine 94.0\n",
318 | "246 Barolo, Piedmont, Italy Red Wine 92.0\n",
319 | "719 Willamette Valley, Oregon Red Wine 92.0"
320 | ]
321 | },
322 | "execution_count": 37,
323 | "metadata": {},
324 | "output_type": "execute_result"
325 | }
326 | ],
327 | "source": [
328 | "df.sample(n=20).head()"
329 | ]
330 | },
331 | {
332 | "cell_type": "markdown",
333 | "metadata": {},
334 | "source": [
335 | "### Get more information about the dataset\n",
336 | "Use `info()` and `describe()` methods for different aspects of the dataset"
337 | ]
338 | },
339 | {
340 | "cell_type": "code",
341 | "execution_count": 38,
342 | "metadata": {},
343 | "outputs": [
344 | {
345 | "data": {
346 | "text/html": [
347 | "
"
480 | ]
481 | },
482 | "metadata": {},
483 | "output_type": "display_data"
484 | }
485 | ],
486 | "source": [
487 | "df.plot()"
488 | ]
489 | }
490 | ],
491 | "metadata": {
492 | "kernelspec": {
493 | "display_name": "Python 3.8.13 ('venv')",
494 | "language": "python",
495 | "name": "python3"
496 | },
497 | "language_info": {
498 | "codemirror_mode": {
499 | "name": "ipython",
500 | "version": 3
501 | },
502 | "file_extension": ".py",
503 | "mimetype": "text/x-python",
504 | "name": "python",
505 | "nbconvert_exporter": "python",
506 | "pygments_lexer": "ipython3",
507 | "version": "3.8.13"
508 | },
509 | "orig_nbformat": 4,
510 | "vscode": {
511 | "interpreter": {
512 | "hash": "f2a18e7aa35240a52af99ab71370101fdc3f0f419f0b3683d6828ff1fe801d36"
513 | }
514 | }
515 | },
516 | "nbformat": 4,
517 | "nbformat_minor": 2
518 | }
519 |
--------------------------------------------------------------------------------
/images/Codespace_build.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/images/Codespace_build.png
--------------------------------------------------------------------------------
/images/Codespace_rebuild.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/images/Codespace_rebuild.png
--------------------------------------------------------------------------------
/images/video-banner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/images/video-banner.gif
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | ipykernel==6.15.2
2 | pandas==1.4.4
3 | matplotlib==3.5.3
4 | matplotlib-inline==0.1.6
5 |
--------------------------------------------------------------------------------
/slides.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/slides.pptx
--------------------------------------------------------------------------------
/translations/README.md:
--------------------------------------------------------------------------------
1 | In this folder, you can find translations of this repository in their appropriately-named folders.
2 |
3 | - [Spanish](./es/README.md)
4 | - [Portuguese](./pt-BR/README.md)
--------------------------------------------------------------------------------
/translations/es/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=526669888)
2 |
3 | # Plantilla de Python en Codespaces
4 |
5 | _Crea o amplía un repositorio listo para usarse en la enseñanza de Python en minutos_
6 |
7 | * **¿A quién va dirigido?** _Educadores de todos los niveles_.
8 | * **¿Cuánta experiencia necesitan los estudiantes?** _Ninguna experiencia previa_. Esta plantilla está construida con elementos básicos con comentarios para que pueda utilizarse en lecciones de principiantes a avanzados.
9 | * **Prerrequisitos:** _Ninguno_. Esta plantilla proporciona un Jupyter Notebook funcional con Pandas que utiliza un conjunto de datos para que puedas comenzar a analizar datos de inmediato, así como un Notebook de ejemplo que puedes utilizar para enseñar Python con [GitHub Copilot](https://copilot.github.com), una poderosa herramienta de IA que puede ayudarte a escribir código más rápido.
10 |
11 | Con esta plantilla puedes crear rápidamente un entorno normalizado para enseñar o aprender Python. Haz que tus estudiantes se centren en su aprendizaje en lugar de configurar su entorno. Esta plantilla utiliza Codespaces, un entorno de desarrollo alojado en la nube con [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), un poderoso editor de texto.
12 |
13 | Tú también tendrás la oportunidad de probar Copilot para crear un plan de clase utilizando el archivo [example-lesson.ipynb](./example-lesson.ipynb).
14 |
15 | 🤔 ¿Curioso? Mira el siguiente vídeo donde te explicamos todos los detalles:
16 |
17 | [](https://youtu.be/7rMvb03hHpI "Enseñando Python con Codespaces")
18 |
19 |
20 | 🎥 Ve el video tutorial para obtener más información sobre Codespaces
21 |
22 | [](https://aka.ms/CodespacesVideoTutorial "Codespaces Tutorial")
23 |
24 |
25 | 🚀 Características de Codespaces:
26 |
27 | - Entorno de nube repetible que ofrece una experiencia increíble.
28 | - Se puede configurar y personalizar.
29 | - Se integra con sus repositorios en GitHub y [VSCode](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza)
30 |
31 | Como profesor, eso significa que puede crear un entorno, en la nube, para que en su clase todos los estudiantes puedan usar una configuración cero o casi nula, independientemente del sistema operativo que estén utilizando.
32 |
33 | ## 🧑🏫 ¿Qué es GitHub Codespace y cómo puedo usarlo en mi enseñanza?
34 |
35 | Un Codespace es un entorno de desarrollo alojado en la nube que puede configurar. El beneficio Codespaces Education ofrece a los profesores de Global Campus una asignación mensual gratuita de horas de GitHub Codespaces para usar en [GitHub Classroom](classroom.github.com). Obten más información [aquí](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) sobre el uso de GitHub Codespaces con GitHub Classroom.
36 |
37 | Si aún no eres profesor de Global Campus, aplica [aquí](https://education.github.com/discount_requests/pack_application) o para obtener más información, consulta [Aplicar a GitHub Global Campus como profesor](https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher).
38 |
39 | ## Personalización
40 |
41 | Personaliza tu proyecto para GitHub Codespaces al confirmar archivos de configuración en tu repositorio (a menudo conocido como _Configuration-as-Code_), lo que crea una configuración repetible de Codespaces para todos los usuarios de tu proyecto.
42 |
43 | Puedes configurar cosas como:
44 |
45 | - Extensiones, puedes especificar qué extensiones deben estar preinstaladas.
46 | - Dotfiles y configuraciones.
47 | - Bibliotecas del sistema operativo y dependencias.
48 |
49 | > 💡 Más información sobre [personalización y configuración en la documentación oficial](https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account)
50 |
51 |
52 | ## Plantilla de Codespaces
53 |
54 | Este repositorio es una plantilla de GitHub, la cual contiene lo siguiente:
55 |
56 | - [example-notebook.ipynb](./example-notebook.ipynb): Un notebook que utiliza la librería [Pandas](https://pandas.pydata.org/) para enseñar operaciones básicas con un pequeño archivo CSV (_Comma Separated Value_) [dataset](./wine-regions.csv)
57 | - [.devcontainer/Dockerfile](../../.devcontainer/Dockerfile): Archivo de configuración usado por Codespaces para determinar el sistema operativo y otros detalles.
58 | - [.devcontainer/devcontainer.json](../../.devcontainer/devcontainer.json): Un archivo de configuración utilizado por Codespaces para configurar [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), por ejemplo, para agregar y habilitar extensiones adicionales.
59 | - `README.md`. Este archivo describe este repositorio y lo que contiene.
60 |
61 | ## 🧐 ¡Pruébalo!
62 |
63 | Prueba este repositorio de plantillas con Codespaces siguiendo estos pasos:
64 |
65 | 1. Crea un repositorio desde esta plantilla. Utiliza este [link crea un repositorio](https://github.com/microsoft/codespaces-teaching-template-py/generate). Tú puedes hacer este repositorio privado o público, es tú decisión.
66 | 2. Navega a la página principal del repositorio recién creado.
67 | 3. Debajo del nombre del repositorio, usa el menú desplegable Code (Código), y en la pestaña Codespaces, selecciona "Create codespace on main" (Crear Codespace en main).
68 | 
69 | 4. Espera mientras GitHub inicializa el Codespace.
70 |
71 | 
72 |
73 |
74 | ### Inspecciona el entorno de Codespaces
75 |
76 | Lo que tienes en este momento es un entorno preconfigurado donde todos los tiempos de ejecución y bibliotecas que necesitas ya están instalados - esto es una experiencia de configuración cero.
77 |
78 | También tienes un Jupyter Notebook que puedes comenzar a usar sin ninguna configuración.
79 |
80 | > Este entorno se ejecutará independientemente de si tus estudiantes están en Windows, macOS o Linux.
81 |
82 | Abre tu archivo Jupyter Notebook [example-notebook.ipynb](./example-notebook.ipynb) y observa cómo puedes agregar código y ejecutarlo.
83 |
84 | ## Personaliza tu Codespace
85 |
86 | Hagamos cambios en tu entorno. Cubriremos dos desafíos diferentes que es probable que desees hacer:
87 |
88 | 1. Cambiar la versión de Python instalada
89 | 1. Agregar una extensión
90 |
91 |
92 | ### Paso 1: Cambiar el entorno de Python
93 |
94 | Digamos que deseas cambiar la versión de Python que está instalada. Esto es algo que puedes controlar.
95 |
96 | Abre [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) y reemplaza la siguiente sección:
97 |
98 | ```json
99 | "VARIANT": "3.8-bullseye"
100 | ```
101 |
102 | con las siguientes instrucciones:
103 |
104 | ```json
105 | "VARIANT": "3.9-bullseye"
106 | ```
107 |
108 | Este cambio ordena a Codespaces usar Python 3.9 en lugar de 3.8.
109 |
110 | ### Paso 2: Añade una extensión
111 |
112 | Tu entorno viene con extensiones preinstaladas. Puedes cambiar con qué extensiones comienza tu entorno de Codespaces, a continuación, te indicamos cómo:
113 |
114 |
115 | 1. Abre el archivo [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) y busca el siguiente elemento JSON **extensions**:
116 |
117 | ```json
118 | "extensions": [
119 | "ms-python.python",
120 | "ms-python.vscode-pylance"
121 | ]
122 | ```
123 |
124 | 2. Agrega _"ms-python.black-formatter"_ a la lista de extensiones. Debería terminar pareciéndose a lo siguiente:
125 |
126 | ```json
127 | "extensions": [
128 | "ms-python.python",
129 | "ms-python.vscode-pylance",
130 | "ms-python.black-formatter"
131 | ]
132 | ```
133 |
134 | Esa cadena de texto es el identificador único de [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza), una extensión popular para formatear código de Python de acuerdo a las mejores prácticas. Añadiendo el identificador _"ms-python.black-formatter"_ a la lista le hace saber a Codespaces que esta extensión debería ser preinstalada al iniciar.
135 |
136 | Recuerda: Cuando cambies cualquier configuración en el json, aparecerá un cuadro después de guardar.
137 |
138 | 
139 |
140 | Haz clic en reconstruir. Espera a que el espacio de código vuelva a generar el entorno de VS Code.
141 |
142 | Para encontrar el identificador único de una extensión:
143 |
144 | - Ingresa a la página web de la extensión, por ejemplo [https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza)
145 | - Localiza el campo *Unique Identifier* bajo la sección **More info** en tu lado derecho.
146 |
147 | ## 🤖 Utiliza Copilot para crear una lección para alumnos
148 | GitHub Copilot ya está disponible en GitHub Codespaces. Puedes utilizar Copilot para crear una clase para tus alumnos. Este repositorio incluye la extensión de Copilot para que puedas utilizarla inmediatamente. Asegúrate de que tu cuenta tiene acceso a Copilot. Si no tienes acceso, puedes [solicitar acceso aquí](https://github.com/login?return_to=%2Fgithub-copilot%2Fsignup).
149 |
150 | GitHub Copilot es gratis para estudiantes y profesores. [Más información](https://education.github.com/pack/offers). Sigue [estos pasos](https://techcommunity.microsoft.com/t5/educator-developer-blog/qu%C3%A9-es-github-copilot-y-c%C3%B3mo-pueden-los-estudiantes-y-maestros/ba-p/3815760?WT.mc_id=studentamb_118941) para verificar tu afiliación como estudiante o profesor y activar Copilot de forma gratuita.
151 |
152 | ### Paso 1: Escriba una descripción para su lección
153 | Abra el archivo [example-notebook.ipynb](./example-notebook.ipynb) y escriba una descripción para su clase en la primera celda. Asegúrate de que Copilot está activado haciendo clic en el icono de Copilot en la barra de estado y asegurándote de que has iniciado sesión en GitHub.
154 |
155 | Edita la primera celda y empieza a escribir `Para esta lección`. Copilot le sugerirá una descripción para su lección. Seleccione la sugerencia y pulse `Tab` para aceptarla.
156 |
157 | La celda debería tener ahora un aspecto similar al siguiente:
158 |
159 | ```markdown
160 | # Crea una lección usando GitHub Copilot
161 | Para esta lección, utilizarás GitHub Copilot para crear una lección para que los estudiantes aprendan a escribir funciones en Python. Utilizarás Copilot para escribir código, y Copilot para escribir texto.
162 | ```
163 |
164 | No pasa nada si Copilot no te sugiere una réplica exacta del texto anterior. Puedes editar el texto para hacerlo más adecuado para tu clase.
165 |
166 | ### Paso 2 Añada pasos a su lección
167 | Añada una nueva celda debajo de la celda de descripción y empiece a escribir `### Paso 1: Activar` para crear un nuevo paso en su clase. Copilot le sugerirá un paso para su lección. Seleccione la sugerencia y pulse `Tab` para aceptarla.
168 |
169 | La celda debería tener ahora un aspecto similar al siguiente
170 |
171 | ```markdown
172 | ## Paso 1: Activar GitHub Copilot
173 | Habilita Copilot siguiendo las instrucciones de la [documentación de GitHub Copilot](https://docs.github.com/en/codespaces/developing-with-codespaces/using-codespaces-with-github-copilot). Si eres estudiante, puedes obtener el [GitHub Student Developer Pack](https://education.github.com/pack) de forma gratuita para obtener accesso a Copilot.
174 | ```
175 |
176 | Sigue añadiendo más pasos y continúa escribiendo para obtener sugerencias más precisas sobre el contenido que te interesa. Por ejemplo, este es un paso que Copilot sugirió para el siguiente paso de la clase:
177 |
178 | ```markdown
179 | ## Paso 3: Crear retos para esta lección
180 | Enseñarás a los alumnos a escribir funciones en Python.
181 | ```
182 |
183 | Puedes utilizar el ejemplo anterior para ver lo que Copilot puede sugerir y autocompletar. Siéntete libre de añadir tantos pasos como creas necesarios para tu lección.
184 |
185 | ### Paso 3: Añadir retos de código para los estudiantes
186 | Añada una nueva celda de código debajo del último paso y comience con un comentario en Python que describa el reto. Por ejemplo, puede escribir `# crear un reto para que un alumno escriba una función que devuelva la suma de dos números`. Copilot sugerirá una solución para el reto. Seleccione la sugerencia y pulse `Tab` para aceptarla. Para cada nueva línea, puede pulsar `Return` (o `Enter`) para obtener una nueva sugerencia.
187 |
188 | Este es un ejemplo de lo que Copilot sugirió para el reto anterior:
189 |
190 | ```python
191 | # crear un reto para que un alumno escriba una función que devuelva la suma de dos números
192 | """
193 | En este reto, escribirás una función que devuelva la suma de dos números.
194 | Usarás la función `sum` para sumar los dos números.
195 | Comienza escribiendo una función que tome dos números como parámetros.
196 | A continuación, utiliza la función `sum` para sumar los dos números.
197 | Finalmente, devuelve la suma de los dos números.
198 | """
199 | ```
200 |
201 | De nuevo, puede que su reto no sea exactamente igual al anterior. Puede editar el reto para adaptarlo mejor a su clase.
202 |
203 | Crea tantas celdas de código con preguntas de ejemplo para su clase.
204 |
205 | ### Paso 4: Crea un cuestionario para los alumnos
206 | Añada una nueva celda abajo para escribir Markdown (¡no código!) y empiece escribiendo `#### Quiz`. A continuación, añade un comentario _HTML_ para crear una pregunta de modo que GitHub Copilot entienda qué tipo de cuestionario quieres crear. Por ejemplo, podrías usar algo similar a esto:
207 |
208 | ```html
209 |
210 | ```
211 |
212 | Es posible que Copilot no te sugiera un cuestionario de inmediato. Si ese es el caso, añade nuevas líneas al comentario y pulsa `Return` (o `Enter`) y empieza a enumerar las preguntas que quieres hacer. Por ejemplo, podrías escribir:
213 |
214 | ```markdown
215 | 1. ¿Cuál es la salida del siguiente código?
216 | ```
217 |
218 | O si estás buscando una pregunta específica sobre un tema podría ser:
219 |
220 | ```markdown
221 | 2. Cuando creas una función que
222 | ```
223 |
224 | Copilot sugirió una pregunta usando argumentos variables que es de lo que trata el reto:
225 |
226 | ```markdown
227 | 2. Cuando creas una función que acepta un número variable de argumentos, ¿cómo se llama el parámetro que utilizas para acceder a los argumentos?
228 | ```
229 |
230 | Por último, revisa las celdas y realiza los cambios necesarios. También puedes añadir más pasos, retos y preguntas a tu lección.
231 |
232 | ¡Felicidades! Has creado una lección para que los alumnos aprendan a escribir funciones en Python utilizando GitHub Copilot. Puedes usar Copilot para ayudarte en la documentación, escribiendo ejemplos, o retos como en este repositorio. ¡Incluso toda esta sección fue escrita usando Copilot!
233 |
234 | ## Aprende más
235 |
236 | - [GitHub Codespaces docs - Visión general](https://docs.github.com/en/codespaces/overview)
237 | - [GitHub Codespaces docs - Comienza rapido](https://docs.github.com/en/codespaces/getting-started/quickstart)
238 | - [Usa GitHub Codespaces con GitHub Classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom)
239 |
240 | ### 🔎 ¿Has encontrado un problema o tienes una idea para mejorarlo?
241 | Ayúdanos a mejorar este repositorio al [hacernos lo saber y abriendo un issue!](/../../issues/new).
--------------------------------------------------------------------------------
/translations/es/example-notebook.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "attachments": {},
5 | "cell_type": "markdown",
6 | "metadata": {},
7 | "source": [
8 | "# Operaciones básicas de Pandas\n",
9 | "\n",
10 | "Este cuaderno te guiará a través de algunas operaciones básicas con la librería Pandas de Python para explorar un pequeño conjunto de datos de regiones vinícolas de todo el mundo.\n",
11 | "\n",
12 | "**Objetivos de aprendizaje:**\n",
13 | "\n",
14 | "1. Importar Pandas usando un patrón común\n",
15 | "1. Leer un conjunto de datos CSV de un disco\n",
16 | "1. Realizar una visión general rápida del conjunto de datos\n",
17 | "1. Usar plot para proporcionar contexto visual"
18 | ]
19 | },
20 | {
21 | "attachments": {},
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "### Importa Pandas \n",
26 | "Y luego lee un archivo de conjunto de datos CSV local"
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": 35,
32 | "metadata": {},
33 | "outputs": [
34 | {
35 | "data": {
36 | "text/html": [
37 | "
\n",
38 | "\n",
51 | "
\n",
52 | " \n",
53 | "
\n",
54 | "
\n",
55 | "
region
\n",
56 | "
variety
\n",
57 | "
rating
\n",
58 | "
\n",
59 | " \n",
60 | " \n",
61 | "
\n",
62 | "
0
\n",
63 | "
Pessac-Leognan, Bordeaux, France
\n",
64 | "
Red Wine
\n",
65 | "
90.0
\n",
66 | "
\n",
67 | "
\n",
68 | "
1
\n",
69 | "
Spain
\n",
70 | "
Sparkling & Champagne
\n",
71 | "
88.0
\n",
72 | "
\n",
73 | "
\n",
74 | "
2
\n",
75 | "
Santa Ynez Valley, Santa Barbara, Central Coas...
\n",
76 | "
Red Wine
\n",
77 | "
96.0
\n",
78 | "
\n",
79 | "
\n",
80 | "
3
\n",
81 | "
Sta. Rita Hills, Santa Barbara, Central Coast,...
\n",
82 | "
Red Wine
\n",
83 | "
90.0
\n",
84 | "
\n",
85 | "
\n",
86 | "
4
\n",
87 | "
Burgundy, France
\n",
88 | "
White Wine
\n",
89 | "
94.0
\n",
90 | "
\n",
91 | "
\n",
92 | "
5
\n",
93 | "
Santa Lucia Highlands, Monterey, Central Coast...
\n",
94 | "
Red Wine
\n",
95 | "
90.0
\n",
96 | "
\n",
97 | "
\n",
98 | "
6
\n",
99 | "
Argentina
\n",
100 | "
Red Wine
\n",
101 | "
88.0
\n",
102 | "
\n",
103 | "
\n",
104 | "
7
\n",
105 | "
Chianti Classico, Chianti, Tuscany, Italy
\n",
106 | "
Red Wine
\n",
107 | "
91.0
\n",
108 | "
\n",
109 | "
\n",
110 | "
8
\n",
111 | "
Ribbon Ridge, Willamette Valley, Oregon
\n",
112 | "
Red Wine
\n",
113 | "
95.0
\n",
114 | "
\n",
115 | "
\n",
116 | "
9
\n",
117 | "
Barolo, Piedmont, Italy
\n",
118 | "
Red Wine
\n",
119 | "
94.0
\n",
120 | "
\n",
121 | "
\n",
122 | "
10
\n",
123 | "
Portugal
\n",
124 | "
White Wine
\n",
125 | "
90.0
\n",
126 | "
\n",
127 | "
\n",
128 | "
11
\n",
129 | "
Central Coast, California
\n",
130 | "
Red Wine
\n",
131 | "
92.0
\n",
132 | "
\n",
133 | "
\n",
134 | "
12
\n",
135 | "
Central Coast, California
\n",
136 | "
Red Wine
\n",
137 | "
92.0
\n",
138 | "
\n",
139 | "
\n",
140 | "
13
\n",
141 | "
Alsace, France
\n",
142 | "
White Wine
\n",
143 | "
91.0
\n",
144 | "
\n",
145 | "
\n",
146 | "
14
\n",
147 | "
Willamette Valley, Oregon
\n",
148 | "
White Wine
\n",
149 | "
90.0
\n",
150 | "
\n",
151 | "
\n",
152 | "
15
\n",
153 | "
Columbia Valley, Washington
\n",
154 | "
Red Wine
\n",
155 | "
90.0
\n",
156 | "
\n",
157 | "
\n",
158 | "
16
\n",
159 | "
Napa Valley, California
\n",
160 | "
Red Wine
\n",
161 | "
94.0
\n",
162 | "
\n",
163 | "
\n",
164 | "
17
\n",
165 | "
Barolo, Piedmont, Italy
\n",
166 | "
Red Wine
\n",
167 | "
92.0
\n",
168 | "
\n",
169 | "
\n",
170 | "
18
\n",
171 | "
Rioja, Spain
\n",
172 | "
Red Wine
\n",
173 | "
91.0
\n",
174 | "
\n",
175 | "
\n",
176 | "
19
\n",
177 | "
Eden Valley, Barossa, South Australia, Australia
\n",
178 | "
White Wine
\n",
179 | "
90.0
\n",
180 | "
\n",
181 | " \n",
182 | "
\n",
183 | "
"
184 | ],
185 | "text/plain": [
186 | " region variety \\\n",
187 | "0 Pessac-Leognan, Bordeaux, France Red Wine \n",
188 | "1 Spain Sparkling & Champagne \n",
189 | "2 Santa Ynez Valley, Santa Barbara, Central Coas... Red Wine \n",
190 | "3 Sta. Rita Hills, Santa Barbara, Central Coast,... Red Wine \n",
191 | "4 Burgundy, France White Wine \n",
192 | "5 Santa Lucia Highlands, Monterey, Central Coast... Red Wine \n",
193 | "6 Argentina Red Wine \n",
194 | "7 Chianti Classico, Chianti, Tuscany, Italy Red Wine \n",
195 | "8 Ribbon Ridge, Willamette Valley, Oregon Red Wine \n",
196 | "9 Barolo, Piedmont, Italy Red Wine \n",
197 | "10 Portugal White Wine \n",
198 | "11 Central Coast, California Red Wine \n",
199 | "12 Central Coast, California Red Wine \n",
200 | "13 Alsace, France White Wine \n",
201 | "14 Willamette Valley, Oregon White Wine \n",
202 | "15 Columbia Valley, Washington Red Wine \n",
203 | "16 Napa Valley, California Red Wine \n",
204 | "17 Barolo, Piedmont, Italy Red Wine \n",
205 | "18 Rioja, Spain Red Wine \n",
206 | "19 Eden Valley, Barossa, South Australia, Australia White Wine \n",
207 | "\n",
208 | " rating \n",
209 | "0 90.0 \n",
210 | "1 88.0 \n",
211 | "2 96.0 \n",
212 | "3 90.0 \n",
213 | "4 94.0 \n",
214 | "5 90.0 \n",
215 | "6 88.0 \n",
216 | "7 91.0 \n",
217 | "8 95.0 \n",
218 | "9 94.0 \n",
219 | "10 90.0 \n",
220 | "11 92.0 \n",
221 | "12 92.0 \n",
222 | "13 91.0 \n",
223 | "14 90.0 \n",
224 | "15 90.0 \n",
225 | "16 94.0 \n",
226 | "17 92.0 \n",
227 | "18 91.0 \n",
228 | "19 90.0 "
229 | ]
230 | },
231 | "execution_count": 35,
232 | "metadata": {},
233 | "output_type": "execute_result"
234 | }
235 | ],
236 | "source": [
237 | "import pandas as pd\n",
238 | "df = pd.read_csv(\"wine-regions.csv\")\n",
239 | "df.head(20)"
240 | ]
241 | },
242 | {
243 | "attachments": {},
244 | "cell_type": "markdown",
245 | "metadata": {},
246 | "source": [
247 | "### Crea un subconjunto aleatorio de datos\n",
248 | "Utiliza metodo `sample()` para obtener `n` elementos del conjunto de datos."
249 | ]
250 | },
251 | {
252 | "cell_type": "code",
253 | "execution_count": 37,
254 | "metadata": {},
255 | "outputs": [
256 | {
257 | "data": {
258 | "text/html": [
259 | "
\n",
260 | "\n",
273 | "
\n",
274 | " \n",
275 | "
\n",
276 | "
\n",
277 | "
region
\n",
278 | "
variety
\n",
279 | "
rating
\n",
280 | "
\n",
281 | " \n",
282 | " \n",
283 | "
\n",
284 | "
1202
\n",
285 | "
Napa Valley, California
\n",
286 | "
White Wine
\n",
287 | "
90.0
\n",
288 | "
\n",
289 | "
\n",
290 | "
1957
\n",
291 | "
Rioja, Spain
\n",
292 | "
Red Wine
\n",
293 | "
92.0
\n",
294 | "
\n",
295 | "
\n",
296 | "
4077
\n",
297 | "
Lirac, Rhone, France
\n",
298 | "
Red Wine
\n",
299 | "
94.0
\n",
300 | "
\n",
301 | "
\n",
302 | "
246
\n",
303 | "
Barolo, Piedmont, Italy
\n",
304 | "
Red Wine
\n",
305 | "
92.0
\n",
306 | "
\n",
307 | "
\n",
308 | "
719
\n",
309 | "
Willamette Valley, Oregon
\n",
310 | "
Red Wine
\n",
311 | "
92.0
\n",
312 | "
\n",
313 | " \n",
314 | "
\n",
315 | "
"
316 | ],
317 | "text/plain": [
318 | " region variety rating\n",
319 | "1202 Napa Valley, California White Wine 90.0\n",
320 | "1957 Rioja, Spain Red Wine 92.0\n",
321 | "4077 Lirac, Rhone, France Red Wine 94.0\n",
322 | "246 Barolo, Piedmont, Italy Red Wine 92.0\n",
323 | "719 Willamette Valley, Oregon Red Wine 92.0"
324 | ]
325 | },
326 | "execution_count": 37,
327 | "metadata": {},
328 | "output_type": "execute_result"
329 | }
330 | ],
331 | "source": [
332 | "df.sample(n=20).head()"
333 | ]
334 | },
335 | {
336 | "attachments": {},
337 | "cell_type": "markdown",
338 | "metadata": {},
339 | "source": [
340 | "### Obten más información sobre el conjunto de datos\n",
341 | "Utiliza los metodos `info()` y `describe()` para diferentes aspectos del conjunto de datos"
342 | ]
343 | },
344 | {
345 | "cell_type": "code",
346 | "execution_count": 38,
347 | "metadata": {},
348 | "outputs": [
349 | {
350 | "data": {
351 | "text/html": [
352 | "
"
486 | ]
487 | },
488 | "metadata": {},
489 | "output_type": "display_data"
490 | }
491 | ],
492 | "source": [
493 | "df.plot()"
494 | ]
495 | }
496 | ],
497 | "metadata": {
498 | "kernelspec": {
499 | "display_name": "Python 3.8.13 ('venv')",
500 | "language": "python",
501 | "name": "python3"
502 | },
503 | "language_info": {
504 | "codemirror_mode": {
505 | "name": "ipython",
506 | "version": 3
507 | },
508 | "file_extension": ".py",
509 | "mimetype": "text/x-python",
510 | "name": "python",
511 | "nbconvert_exporter": "python",
512 | "pygments_lexer": "ipython3",
513 | "version": "3.8.14"
514 | },
515 | "orig_nbformat": 4,
516 | "vscode": {
517 | "interpreter": {
518 | "hash": "f2a18e7aa35240a52af99ab71370101fdc3f0f419f0b3683d6828ff1fe801d36"
519 | }
520 | }
521 | },
522 | "nbformat": 4,
523 | "nbformat_minor": 2
524 | }
525 |
--------------------------------------------------------------------------------
/translations/es/slides_es.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/translations/es/slides_es.pptx
--------------------------------------------------------------------------------
/translations/pt-BR/README.md:
--------------------------------------------------------------------------------
1 |
2 | [](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=526669888)
3 |
4 | # Ensine Python no Codespace
5 |
6 | _Crie ou estenda (fork) um repositório pronto para uso para ensinar Python em minutos!_
7 |
8 | * **Para quem é?** _Educadores de todos os níveis_.
9 | * **Quanta experiência os alunos precisam?** _Nenhuma_. Este modelo é construído com todos os elementos básicos com comentários para que possa ser usado em aulas, do nível iniciante ao avançado.
10 | * **Pré-requisitos:** _Nenhum_. Este modelo fornecerá um Jupyter Notebook funcional com Pandas, usando um conjunto de dados para que você possa começar a analisar dados imediatamente, bem como um Notebook de exemplo que você pode usar para ensinar Python com [GitHub Copilot](https://copilot.github.com) , uma poderosa ferramenta de IA que ajuda você a escrever código mais rapidamente.
11 |
12 |
13 | Com este repositório de modelos, você pode criar rapidamente um ambiente normalizado para ensinar ou aprender Python. Faça com que seus alunos se concentrem no aprendizado, em vez de configurar o ambiente. Este modelo usa Codespaces, um ambiente de desenvolvimento hospedado na nuvem com [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), um poderoso editor de texto.
14 |
15 | Você também terá a chance de experimentar o Copilot para criar um plano de aula usando o arquivo [licao.ipynb](./licao.ipynb).
16 |
17 | 🤔 Curioso? Veja o seguinte vídeo onde explicamos todos os detalhes:
18 |
19 | [](https://youtu.be/7rMvb03hHpI "Ensinando Python com Codespaces")
20 |
21 |
22 | 🎥 Assista ao tutorial em vídeo para saber mais sobre Codespaces
23 |
24 | [](https://aka.ms/CodespacesVideoTutorial "Tutorial de Codespaces")
25 |
26 |
27 | 🚀 Recursos do Codespaces:
28 |
29 | - Ambiente em nuvem repetível que oferece uma experiência de um clique.
30 | - Pode ser configurado e personalizado.
31 | - Integra-se com seus repositórios no GitHub e [VSCode](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza)
32 |
33 | Como professor, isso significa que você pode criar um ambiente na nuvem para sua turma e que todos os alunos podem usar com configuração zero ou quase zero, independentemente do sistema operacional que estão usando.
34 |
35 | ## 🧑🏫 O que é GitHub Codespace e como posso usá-lo em minhas aulas?
36 |
37 | Um Codespace é um ambiente de desenvolvimento hospedado na nuvem que você pode configurar. O benefício Codespaces Education oferece aos professores do Global Campus um subsídio mensal gratuito de horas de GitHub Codespaces para usar no [GitHub Classroom](https://classroom.github.com). Saiba mais [aqui](https://docs.github.com/pt/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) sobre o uso de codespaces do GitHub com o GitHub Classroom.
38 |
39 | Se você ainda não é professor do Global Campus, inscreva-se [aqui](https://education.github.com/discount_requests/pack_application) ou, para obter mais informações, consulte [Inscreva-se no GitHub Global Campus como professor](https://docs.github.com/pt/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher).
40 |
41 | ## Costumização
42 |
43 | Personalize seu projeto para GitHub Codespaces alterando os arquivos de configuração em seu repositório (geralmente conhecido como Configuration-as-Code ou, em português, Configuração-como-Código), que cria uma configuração de codespace repetível para todos os usuários de seu projeto.
44 |
45 | Você pode configurar coisas como:
46 |
47 | - Extensões, você pode especificar quais extensões devem ser pré-instaladas.
48 | - Dotfiles e configurações.
49 | - Bibliotecas e dependências do sistema operacional
50 |
51 | > 💡 Saiba mais sobre [customização e configuração na documentação oficial](https://docs.github.com/pt/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account)
52 |
53 |
54 | ## Modelo do Codespace
55 |
56 | Este repositório é um modelo do GitHub. Ele contém o seguinte:
57 |
58 | - [exemplo.ipynb](./exemplo.ipynb): um notebook Jupyter usando a biblioteca [Pandas](https://pandas.pydata.org/) para ensinar operações básicas com um pequeno arquivo CSV (separado por vírgula Arquivo de valor) [dataset](../../wine-regions.csv)
59 | - [.devcontainer/Dockerfile](./../../.devcontainer/Dockerfile): Arquivo de configuração usado pelo Codespaces para determinar o sistema operacional e outros detalhes.
60 | - [.devcontainer/devcontainer.json](./../../.devcontainer/devcontainer.json), Um arquivo de configuração usado por Codespaces para configurar [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), como a ativação de extensões adicionais.
61 | - `README.md`. Este arquivo descreve este repositório e o que há nele.
62 |
63 | ## 🧐 Experimente
64 |
65 | Experimente este repositório de modelos usando Codespaces seguindo estas etapas:
66 |
67 | 1. Crie um repositório a partir deste modelo. Use este [link de criação de repositório](https://github.com/microsoft/codespaces-teaching-template-py/generate). Você pode tornar o repositório privado ou público, você decide.
68 | 1. Navegue até a página principal do repositório recém-criado.
69 | 1. Sob o nome do repositório, use o menu suspenso Código e, na guia Codespaces, selecione "Criar Codespace na main".
70 | 
71 | 1. Aguarde enquanto o Github inicializa o Codespace:
72 | 
73 |
74 |
75 | ### Inspecione seu ambiente do Codespaces
76 |
77 | O que você tem neste momento é um ambiente pré-configurado, em que todas as configurações e bibliotecas que você precisa já estão instaladas - uma experiência de configuração zero.
78 |
79 | Você, também, tem um Jupyter Notebook que pode começar a usar, sem nenhuma configuração adicional.
80 |
81 | > Este ambiente será executado da mesma forma, independentemente de seus alunos estarem no Windows, macOS ou Linux.
82 |
83 | Abra seu arquivo Jupyter Notebook [exemplo.ipynb](./exemplo.ipynb) e observe como você pode adicionar código e executá-lo.
84 |
85 | ## Personalize o Codespace
86 |
87 | Vamos fazer algumas alterações em seu ambiente. Abordaremos dois desafios diferentes e que você provavelmente deseja fazer:
88 |
89 | 1. Alterar a versão do Python instalada
90 | 2. Adicionar uma extensão
91 |
92 | ### Etapa 1: alterar o ambiente Python
93 |
94 | Digamos que você queira alterar qual versão do Python está instalada. Isso é algo que você pode controlar.
95 |
96 | Abra [.devcontainer/devcontainer.json](./../../.devcontainer/devcontainer.json) e substitua a seguinte seção:
97 |
98 | ```json
99 | "VARIANT": "3.8-bullseye"
100 | ```
101 |
102 | com a seguinte instrução:
103 |
104 | ```json
105 | "VARIANT": "3.9-bullseye"
106 | ```
107 |
108 | Essa alteração instrui o Codespaces a usar o Python 3.9 em vez do 3.8.
109 |
110 | Se você fizer qualquer alteração na configuração do `devcontainer.json`, uma caixa aparecerá após salvar.
111 |
112 | 
113 |
114 | Clique em Rebuild (em português, "Reconstruir"). Aguarde até que seu Codespace reconstrua o ambiente VS Code.
115 |
116 | ### Etapa 2: adicionar uma extensão
117 |
118 | Seu ambiente vem com extensões pré-instaladas. Você pode alterar com quais extensões seu ambiente Codespaces começa. Veja como:
119 |
120 | 1. Abra o arquivo [.devcontainer/devcontainer.json](./../../.devcontainer/devcontainer.json) e localize o seguinte elemento JSON
121 | **extensões**:
122 |
123 | ```json
124 | "extensions": [
125 | "ms-python.python",
126 | "ms-python.vscode-pylance"
127 | ]
128 | ```
129 |
130 | 1. Adicione _"ms-python.black-formatter"_ à lista de extensões. Ele deve acabar se parecendo com o seguinte:
131 |
132 | ```json
133 | "extensions": [
134 | "ms-python.python",
135 | "ms-python.vscode-pylance",
136 | "ms-python.black-formatter"
137 | ]
138 | ```
139 |
140 | Essa string é o identificador exclusivo do [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza), uma extensão popular para formatar código Python, de acordo com as melhores práticas. Adicionar o identificador _"ms-python.black-formatter"_ à lista permite que os Codespaces saibam que essa extensão deve ser pré-instalada na inicialização.
141 |
142 | Aviso: Ao alterar qualquer configuração no json, aparecerá uma caixa após salvar.
143 |
144 | 
145 |
146 | Clique em Rebuild (em português, "Reconstruir"). Aguarde seu codespace reconstruir o ambiente do VS Code.
147 |
148 | Para encontrar o identificador exclusivo de uma extensão:
149 |
150 | - Navegue até a página da extensão, por exemplo [https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter](https://marketplace.visualstudio.com/items?itemName=ms- python.black-formatter&WT.mc_id=academic-77460-alfredodeza)
151 | - Localize o campo *Identificador exclusivo* na seção **Mais informações** à sua direita.
152 |
153 | ## 🤖 Use o Copilot para criar uma aula para os alunos
154 | O GitHub Copilot agora está disponível no GitHub Codespaces. Você pode usar o Copilot para criar uma aula para seus alunos. Este repositório inclui a extensão para Copilot para que você possa usá-lo imediatamente. Certifique-se de que sua conta tenha acesso ao Copilot. Caso não tenha acesso, você pode [solicitar acesso aqui](https://github.com/login?return_to=%2Fgithub-copilot%2Fsignup).
155 |
156 | O GitHub Copilot é gratuito para alunos e professores. [Saiba mais](https://education.github.com/pack/offers). Siga [estas etapas](https://techcommunity.microsoft.com/t5/educator-developer-blog/step-by-step-setting-up-github-student-and-github-copilot-as-an/ba-p/3736279?WT.mc_id=academic-0000-alfredodeza) para verificar sua associação de aluno ou professor e habilitar o Copilot gratuitamente.
157 |
158 | ### Passo 1: Escreva uma descrição para sua aula
159 | Abra o arquivo [exemplo.ipynb](./exemplo.ipynb) e escreva uma descrição para sua lição na primeira célula. Certifique-se de que o Copilot esteja ativado clicando no ícone do Copilot na barra de status e verificando se você está conectado ao GitHub.
160 |
161 | Edite a primeira célula e comece a digitar `Para esta lição`. O Copilot irá sugerir uma descrição para sua aula. Selecione a sugestão e pressione `Tab` para aceitá-la.
162 |
163 | A célula agora deve ser semelhante a esta:
164 |
165 | ```markdown
166 | # Crie uma aula usando o GitHub Copilot
167 | Nesta esta lição, você usará o GitHub Copilot para criar uma aula para os alunos aprenderem a escrever funções em Python. Você usará o Copilot para escrever código e também para escrever texto.
168 | ```
169 |
170 | Tudo bem se o Copilot não sugerir uma réplica exata do texto acima. Você pode editar o texto para torná-lo mais adequado para sua lição.
171 |
172 | ### Passo 2: Adicione etapas à sua lição
173 | Adicione uma nova célula abaixo da célula de descrição e comece a digitar `### Etapa 1: Habilitar` para criar uma nova etapa em sua lição. O Copilot irá sugerir uma etapa para sua aula. Selecione a sugestão e pressione `Tab` para aceitá-la.
174 |
175 | A célula agora deve ser semelhante a esta:
176 |
177 | ```markdown
178 | ## Passo 1: Habilitar GitHub Copilot
179 | Habilite o Copilot seguindo as instruções na [documentação do GitHub Copilot](https://docs.github.com/pt/codespaces/developing-with-codespaces/using-codespaces-with-github-copilot). Se você é um estudante, pode obter um [GitHub Student Developer Pack] gratuito (https://education.github.com/pack) para obter acesso ao Copilot.
180 | ```
181 |
182 | Continue adicionando mais etapas e digitando para obter sugestões mais precisas para o conteúdo de seu interesse. Por exemplo, esta é uma etapa sugerida pelo Copilot para a próxima etapa da lição:
183 |
184 | ```markdown
185 | ## Passo 3: Crie desafios para esta lição
186 | Você ensinará os alunos a escrever funções em Python.
187 | ```
188 |
189 | Você pode usar o exemplo acima para ver o que o Copilot pode sugerir e preencher automaticamente. Sinta-se à vontade para adicionar quantas etapas achar necessárias para sua lição.
190 |
191 | ### Passo 3: adicione desafios de código para os alunos
192 | Adicione uma nova célula de código abaixo da última etapa e comece com um comentário Python que descreva o desafio. Por exemplo, você pode escrever `# crie um desafio para um aluno escrever uma função que retorne a soma de dois números`. O Copilot irá sugerir uma solução para o desafio. Selecione a sugestão e pressione `Tab` para aceitá-la. Para cada nova linha, você pode pressionar `Return` (ou `Enter`) para obter uma nova sugestão.
193 |
194 | Esta é uma amostra do que o Copilot sugeriu para o desafio acima:
195 |
196 | ```python
197 | # Crie um desafio para um aluno escrever uma função que retorna a soma de dois números
198 | """
199 | Neste desafio, você escreverá uma função que retorna a soma de dois números.
200 | Você usará a função 'soma' para adicionar os dois números.
201 | Comece escrevendo uma função que usa dois números como parâmetros.
202 | Em seguida, use a função 'soma' para adicionar os dois números.
203 | Por fim, retorne a soma dos dois números.
204 | """
205 | ```
206 |
207 | Novamente, seu desafio pode não ser exatamente igual ao anterior. Você pode editar o desafio para torná-lo mais adequado para sua aula.
208 |
209 | Crie quantas células de código com prompts de exemplo para sua lição.
210 |
211 | ### Etapa 4: crie um questionário para os alunos
212 | Adicione uma nova célula abaixo para escrever Markdown (não código!) e comece escrevendo `### Quiz`. Em seguida, adicione um comentário _HTML_ para criar um prompt para que o GitHub Copilot entenda que tipo de questionário você deseja criar. Por exemplo, você poderia usar algo parecido com isto:
213 |
214 | ```html
215 |
216 | ```
217 |
218 | O Copilot pode não sugerir um teste para você imediatamente. Se for esse o caso, adicione novas linhas ao comentário e pressione `Return` (ou `Enter`) e comece a enumerar as perguntas que deseja fazer. Por exemplo, você poderia escrever:
219 |
220 | ```markdown
221 | 1. Qual é a saída do seguinte código?
222 | ```
223 |
224 | Se você está procurando uma pergunta específica sobre um tópico, pode ser:
225 |
226 | ```markdown
227 | 2. Ao criar uma função que
228 | ```
229 |
230 | Copilot sugeriu uma pergunta usando argumentos variáveis, que é o objetivo do desafio:
231 |
232 | ```markdown
233 | 3. Quando você cria uma função que aceita um número variável de argumentos, qual é o nome do parâmetro que você usa para acessar os argumentos?
234 | ```
235 |
236 | Por fim, revise as células e faça as alterações necessárias. Você também pode adicionar mais etapas, desafios e perguntas à sua lição.
237 |
238 | Parabéns! Você criou uma lição para os alunos aprenderem a escrever funções em Python usando o GitHub Copilot. Você pode usar o Copilot para ajudá-lo na documentação, escrever exemplos ou desafios como neste repositório. Mesmo esta seção inteira foi escrita usando o Copilot!
239 |
240 | ## Saiba mais
241 |
242 | - [GitHub Codespaces docs - Visão geral](https://docs.github.com/pt/codespaces/overview)
243 | - [GitHub Codespaces docs - Início rápido](https://docs.github.com/pt/codespaces/getting-started/quickstart)
244 | - [Usando GitHub Codespaces com GitHub Classroom](https://docs.github.com/pt/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom)
245 |
246 |
247 |
248 | ### 🔎 Encontrou um problema ou tem uma ideia de melhoria?
249 | Ajude-nos a deixar este repositório melhor [informando-nos e abrindo uma issue!](https://github.com/education/codespaces-teaching-template-py/issues/new).
250 |
--------------------------------------------------------------------------------
/translations/pt-BR/exemplo.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "attachments": {},
5 | "cell_type": "markdown",
6 | "metadata": {},
7 | "source": [
8 | "# Operações básicas do Pandas\n",
9 | "Este notebook o guiará por algumas operações básicas com a biblioteca Pandas Python para explorar um pequeno conjunto de dados de regiões vinícolas de todo o mundo.\n",
10 | "\n",
11 | "**Objetivos de aprendizado:**\n",
12 | "\n",
13 | "1. Importar biblioteca Pandas usando um padrão comum\n",
14 | "2. Leia um conjunto de dados CSV do disco\n",
15 | "3. Faça uma visão geral rápida do conjunto de dados\n",
16 | "4. Use o enredo para fornecer contexto visual"
17 | ]
18 | },
19 | {
20 | "attachments": {},
21 | "cell_type": "markdown",
22 | "metadata": {},
23 | "source": [
24 | "### Importar Biblioteca Pandas\n",
25 | "E, em seguida, leia um arquivo de conjunto de dados CSV local"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 1,
31 | "metadata": {},
32 | "outputs": [
33 | {
34 | "data": {
35 | "text/html": [
36 | "
\n",
37 | "\n",
50 | "
\n",
51 | " \n",
52 | "
\n",
53 | "
\n",
54 | "
region
\n",
55 | "
variety
\n",
56 | "
rating
\n",
57 | "
\n",
58 | " \n",
59 | " \n",
60 | "
\n",
61 | "
0
\n",
62 | "
Pessac-Leognan, Bordeaux, France
\n",
63 | "
Red Wine
\n",
64 | "
90.0
\n",
65 | "
\n",
66 | "
\n",
67 | "
1
\n",
68 | "
Spain
\n",
69 | "
Sparkling & Champagne
\n",
70 | "
88.0
\n",
71 | "
\n",
72 | "
\n",
73 | "
2
\n",
74 | "
Santa Ynez Valley, Santa Barbara, Central Coas...
\n",
75 | "
Red Wine
\n",
76 | "
96.0
\n",
77 | "
\n",
78 | "
\n",
79 | "
3
\n",
80 | "
Sta. Rita Hills, Santa Barbara, Central Coast,...
\n",
81 | "
Red Wine
\n",
82 | "
90.0
\n",
83 | "
\n",
84 | "
\n",
85 | "
4
\n",
86 | "
Burgundy, France
\n",
87 | "
White Wine
\n",
88 | "
94.0
\n",
89 | "
\n",
90 | "
\n",
91 | "
5
\n",
92 | "
Santa Lucia Highlands, Monterey, Central Coast...
\n",
93 | "
Red Wine
\n",
94 | "
90.0
\n",
95 | "
\n",
96 | "
\n",
97 | "
6
\n",
98 | "
Argentina
\n",
99 | "
Red Wine
\n",
100 | "
88.0
\n",
101 | "
\n",
102 | "
\n",
103 | "
7
\n",
104 | "
Chianti Classico, Chianti, Tuscany, Italy
\n",
105 | "
Red Wine
\n",
106 | "
91.0
\n",
107 | "
\n",
108 | "
\n",
109 | "
8
\n",
110 | "
Ribbon Ridge, Willamette Valley, Oregon
\n",
111 | "
Red Wine
\n",
112 | "
95.0
\n",
113 | "
\n",
114 | "
\n",
115 | "
9
\n",
116 | "
Barolo, Piedmont, Italy
\n",
117 | "
Red Wine
\n",
118 | "
94.0
\n",
119 | "
\n",
120 | "
\n",
121 | "
10
\n",
122 | "
Portugal
\n",
123 | "
White Wine
\n",
124 | "
90.0
\n",
125 | "
\n",
126 | "
\n",
127 | "
11
\n",
128 | "
Central Coast, California
\n",
129 | "
Red Wine
\n",
130 | "
92.0
\n",
131 | "
\n",
132 | "
\n",
133 | "
12
\n",
134 | "
Central Coast, California
\n",
135 | "
Red Wine
\n",
136 | "
92.0
\n",
137 | "
\n",
138 | "
\n",
139 | "
13
\n",
140 | "
Alsace, France
\n",
141 | "
White Wine
\n",
142 | "
91.0
\n",
143 | "
\n",
144 | "
\n",
145 | "
14
\n",
146 | "
Willamette Valley, Oregon
\n",
147 | "
White Wine
\n",
148 | "
90.0
\n",
149 | "
\n",
150 | "
\n",
151 | "
15
\n",
152 | "
Columbia Valley, Washington
\n",
153 | "
Red Wine
\n",
154 | "
90.0
\n",
155 | "
\n",
156 | "
\n",
157 | "
16
\n",
158 | "
Napa Valley, California
\n",
159 | "
Red Wine
\n",
160 | "
94.0
\n",
161 | "
\n",
162 | "
\n",
163 | "
17
\n",
164 | "
Barolo, Piedmont, Italy
\n",
165 | "
Red Wine
\n",
166 | "
92.0
\n",
167 | "
\n",
168 | "
\n",
169 | "
18
\n",
170 | "
Rioja, Spain
\n",
171 | "
Red Wine
\n",
172 | "
91.0
\n",
173 | "
\n",
174 | "
\n",
175 | "
19
\n",
176 | "
Eden Valley, Barossa, South Australia, Australia
\n",
177 | "
White Wine
\n",
178 | "
90.0
\n",
179 | "
\n",
180 | " \n",
181 | "
\n",
182 | "
"
183 | ],
184 | "text/plain": [
185 | " region variety \\\n",
186 | "0 Pessac-Leognan, Bordeaux, France Red Wine \n",
187 | "1 Spain Sparkling & Champagne \n",
188 | "2 Santa Ynez Valley, Santa Barbara, Central Coas... Red Wine \n",
189 | "3 Sta. Rita Hills, Santa Barbara, Central Coast,... Red Wine \n",
190 | "4 Burgundy, France White Wine \n",
191 | "5 Santa Lucia Highlands, Monterey, Central Coast... Red Wine \n",
192 | "6 Argentina Red Wine \n",
193 | "7 Chianti Classico, Chianti, Tuscany, Italy Red Wine \n",
194 | "8 Ribbon Ridge, Willamette Valley, Oregon Red Wine \n",
195 | "9 Barolo, Piedmont, Italy Red Wine \n",
196 | "10 Portugal White Wine \n",
197 | "11 Central Coast, California Red Wine \n",
198 | "12 Central Coast, California Red Wine \n",
199 | "13 Alsace, France White Wine \n",
200 | "14 Willamette Valley, Oregon White Wine \n",
201 | "15 Columbia Valley, Washington Red Wine \n",
202 | "16 Napa Valley, California Red Wine \n",
203 | "17 Barolo, Piedmont, Italy Red Wine \n",
204 | "18 Rioja, Spain Red Wine \n",
205 | "19 Eden Valley, Barossa, South Australia, Australia White Wine \n",
206 | "\n",
207 | " rating \n",
208 | "0 90.0 \n",
209 | "1 88.0 \n",
210 | "2 96.0 \n",
211 | "3 90.0 \n",
212 | "4 94.0 \n",
213 | "5 90.0 \n",
214 | "6 88.0 \n",
215 | "7 91.0 \n",
216 | "8 95.0 \n",
217 | "9 94.0 \n",
218 | "10 90.0 \n",
219 | "11 92.0 \n",
220 | "12 92.0 \n",
221 | "13 91.0 \n",
222 | "14 90.0 \n",
223 | "15 90.0 \n",
224 | "16 94.0 \n",
225 | "17 92.0 \n",
226 | "18 91.0 \n",
227 | "19 90.0 "
228 | ]
229 | },
230 | "execution_count": 1,
231 | "metadata": {},
232 | "output_type": "execute_result"
233 | }
234 | ],
235 | "source": [
236 | "import pandas as pd\n",
237 | "df = pd.read_csv(\"..\\..\\wine-regions.csv\")\n",
238 | "df.head(20)"
239 | ]
240 | },
241 | {
242 | "attachments": {},
243 | "cell_type": "markdown",
244 | "metadata": {},
245 | "source": [
246 | "### Crie um subconjunto aleatório de dados\n",
247 | "Use o método `sample()` para obter itens `n` do conjunto de dados"
248 | ]
249 | },
250 | {
251 | "cell_type": "code",
252 | "execution_count": 2,
253 | "metadata": {},
254 | "outputs": [
255 | {
256 | "data": {
257 | "text/html": [
258 | "
\n",
259 | "\n",
272 | "
\n",
273 | " \n",
274 | "
\n",
275 | "
\n",
276 | "
region
\n",
277 | "
variety
\n",
278 | "
rating
\n",
279 | "
\n",
280 | " \n",
281 | " \n",
282 | "
\n",
283 | "
203
\n",
284 | "
Columbia Valley, Washington
\n",
285 | "
Red Wine
\n",
286 | "
86.0
\n",
287 | "
\n",
288 | "
\n",
289 | "
1246
\n",
290 | "
Rioja, Spain
\n",
291 | "
Red Wine
\n",
292 | "
92.0
\n",
293 | "
\n",
294 | "
\n",
295 | "
95
\n",
296 | "
Australia
\n",
297 | "
White Wine
\n",
298 | "
87.0
\n",
299 | "
\n",
300 | "
\n",
301 | "
1213
\n",
302 | "
McLaren Vale, South Australia, Australia
\n",
303 | "
Red Wine
\n",
304 | "
90.0
\n",
305 | "
\n",
306 | "
\n",
307 | "
903
\n",
308 | "
Ribbon Ridge, Willamette Valley, Oregon
\n",
309 | "
Red Wine
\n",
310 | "
95.0
\n",
311 | "
\n",
312 | " \n",
313 | "
\n",
314 | "
"
315 | ],
316 | "text/plain": [
317 | " region variety rating\n",
318 | "203 Columbia Valley, Washington Red Wine 86.0\n",
319 | "1246 Rioja, Spain Red Wine 92.0\n",
320 | "95 Australia White Wine 87.0\n",
321 | "1213 McLaren Vale, South Australia, Australia Red Wine 90.0\n",
322 | "903 Ribbon Ridge, Willamette Valley, Oregon Red Wine 95.0"
323 | ]
324 | },
325 | "execution_count": 2,
326 | "metadata": {},
327 | "output_type": "execute_result"
328 | }
329 | ],
330 | "source": [
331 | "df.sample(n=20).head()"
332 | ]
333 | },
334 | {
335 | "attachments": {},
336 | "cell_type": "markdown",
337 | "metadata": {},
338 | "source": [
339 | "### Obtenha mais informações sobre o conjunto de dados\n",
340 | "Use os métodos `info()` e `describe()` para diferentes aspectos do conjunto de dados"
341 | ]
342 | },
343 | {
344 | "cell_type": "code",
345 | "execution_count": 3,
346 | "metadata": {},
347 | "outputs": [
348 | {
349 | "data": {
350 | "text/html": [
351 | "