102 |
103 |
104 | @code {
105 |
106 |
107 | private FormModel formModel { get; set; } = new FormModel();
108 |
109 | private string responseText { get; set; } = "";
110 |
111 |
112 |
113 | private class FormModel
114 | {
115 | public string? URL { get; set; }
116 | }
117 |
118 | private async Task SubmitForm()
119 | {
120 | await GetAIResponseAsync();
121 | }
122 |
123 | private async Task GetAIResponseAsync()
124 | {
125 | if(_httpClient.BaseAddress is not null)
126 | {
127 | var uriBuilder = new UriBuilder(_httpClient.BaseAddress);
128 | uriBuilder.Path = "/api/AIOnnxHttpTrigger";
129 |
130 | if(!string.IsNullOrEmpty(formModel.URL) && !string.IsNullOrWhiteSpace(formModel.URL))
131 | {
132 | var query = HttpUtility.ParseQueryString(uriBuilder.Query);
133 |
134 | query["img"] = formModel.URL;
135 |
136 | uriBuilder.Query = query.ToString();
137 | }
138 |
139 | var builtUri = uriBuilder.ToString();
140 |
141 | Console.WriteLine($"builtUri: {builtUri}");
142 |
143 | @* responseText = uriBuilder.ToString(); *@
144 |
145 | var response = await _httpClient.GetStringAsync(builtUri);
146 |
147 | responseText = response;
148 | }
149 | }
150 | }
151 |
152 | ```
153 |
154 | 2. 并在 apps 文件夹中添加 package.json, 包括以下内容
155 |
156 |
157 |
158 | ```json
159 |
160 | {
161 | "name": "swa-blazorandfunc-demo",
162 | "version": "1.0.0",
163 | "scripts": {
164 | "start": "swa start http://localhost:5074 --api-location http://localhost:7071"
165 | },
166 | "keywords": [],
167 | "author": "",
168 | "license": "ISC",
169 | "main": "index.js",
170 | "description": ""
171 | }
172 |
173 |
174 | ```
175 |
176 | 3. 在终端环境,添加三个不同的终端
177 |
178 | 在其中一个终端运行 Blazor wasm 的项目, 一个终端运行 Azure Functions 的项目, 确保他们长期运行
179 |
180 |
181 |
182 | 4. 在最后一个终端,在 apps 文件夹下运行
183 |
184 | ```bash
185 |
186 | npm start
187 |
188 | ```
189 |
190 |
191 |
192 |
193 |
194 | 5. 在浏览器中打开就可以看到,把地址复制,这里是我的,各位会有不一样
195 |
196 |
197 | https://kinfey-turbo-yodel-wjpvpxg7xr7h9wr7-4280.preview.app.github.dev/
198 |
199 | 并替换到 Blazor wasm Program.cs 的这句话中
200 |
201 | ```bash
202 |
203 | builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://kinfey-turbo-yodel-wjpvpxg7xr7h9wr7-4280.preview.app.github.dev/") });
204 |
205 | ```
206 |
207 | 6. 再次运行,输入地址即可获取结果
208 |
209 |
210 |
211 |
212 | 当然你可以快速部署到 Azure ,这里就不一一展示了。
213 |
214 |
215 |
216 |
217 | ## **相关资源**
218 |
219 |
220 | 0. 注册你的 GitHub https://github.com/signup
221 |
222 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces
223 |
224 | 2. 学习 Static Web App 的相关知识 https://learn.microsoft.com/en-us/azure/static-web-apps/overview
225 |
226 |
227 |
--------------------------------------------------------------------------------
/02.CloudNativeInDapr.md:
--------------------------------------------------------------------------------
1 | ## **通过 GitHub Codespaces 打造一个 Dapr 的应用**
2 |
3 |
4 | 请 fork 我 这个项目 https://github.com/kinfey/LearnCloudNative , 通过本地 Visual Studio Code GitHub Codespaces 打开该项目 (请在本地 Visual Studio Code 安装 GitHub Codespaces 插件)
5 |
6 | 1. 安装 Dapr 环境 https://docs.dapr.io/getting-started/install-dapr-cli/
7 |
8 | 2. 创建两个终端
9 |
10 | 在 AIFuncApp 下运行
11 |
12 | ```bash
13 |
14 | dapr run --app-id ai-sdk --components-path ../components/ --app-port 6001 -- uvicorn main:app --port 6002
15 |
16 | ```
17 |
18 | 在 BlazorUI.App 下运行
19 |
20 |
21 | ```bash
22 |
23 | dapr run --app-id ai-sdk --components-path ../components/ --app-port 6001 -- uvicorn main:app --port 6002
24 |
25 | ```
26 |
27 | 用浏览器启动查看得出如下结果
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/02.CloudNativeInWasmEdge.md:
--------------------------------------------------------------------------------
1 | # **用 Rust 开发 WasmEdge 应用**
2 |
3 | 在云原生开发领域里面有非常多不同的技术和概念, WebAssbembly 就是其中之一。
4 |
5 | ## **什么是 WebAssembly**
6 |
7 | WebAssembly 是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代码而是为诸如 C、C++和 Rust 等低级源语言提供一个高效的编译目标。
8 |
9 | 对于网络平台而言,这具有巨大的意义——这为客户端 app 提供了一种在网络平台以接近本地速度的方式运行多种语言编写的代码的方式;在这之前,客户端 app 是不可能做到的。
10 |
11 | 通过 Rust 可以写 Web Assbemly 的应用,本系列我们会结合 GitHub Codespaces 用 Rust 编写 WasmEdge 应用。
12 |
13 |
14 | ## **什么是 WasmEdge**
15 |
16 | WasmEdge 是一种轻量级、高性能且可扩展的 WebAssembly 运行时,适用于云原生、边缘计算和去中心化应用程序。 它为无服务器应用程序、嵌入式功能、微服务、智能合约和物联网设备提供支持。 WasmEdge 目前是一个 CNCF(云原生计算基金会)沙盒项目。
17 |
18 | WasmEdge Runtime 为其包含的 WebAssembly 字节码程序提供了一个定义良好的执行沙箱。 运行时为操作系统资源(例如,文件系统、套接字、环境变量、进程)和内存空间提供隔离和保护。
19 |
20 | 接下来我们通过 GitHub Codespaces 一起来学习通过 Rust 开发 WasmEdge 应用,如果你希望先了解 Rust ,可以跳转到 通过 GitHub Codespaces 学习 Rust 的相关内容
21 |
22 |
23 | ### **场景一:WasmEdge 环境搭建**
24 |
25 | 关于 WasmEdge 的环境搭建,我们需要更强大的支撑,和之前的步骤不同,我们这里依赖于 GitHub Codespaces 的 Ubuntu devcontainer。
26 |
27 | 1. 选择 GitHub Codespaces 的空模版进行创建
28 |
29 |
30 |
31 | 2. 通过 CMD + Shift + P - macOS 或 Ctrl + Shit + P - Windows / Linux , 添加 devcontainer
32 |
33 |
34 |
35 | 选择 Ubuntu 的 devcontainer
36 |
37 |
38 |
39 | 并选择 22.04 jammy 的版本
40 |
41 |
42 |
43 | 3. 选择相关的 devcontainer 组件,这里按照需要添加 Rust , Azure CLI , Docker 等
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | 4. 为 devcontainers.json 添加 Rust 开发 ,Azure 开发以及 Docker 开发对应的插件。Rust 开发就包括 rust-analyzer ,crates , CodeLLDB / Azure 开发就包括 Azure Tools / Docker 相关的 Docker 组件 / 还有网络开发用到的 Thunder Client
52 |
53 | 结合步骤 3 ,4 完整的 devcontainer.json 如下 :
54 |
55 | ```json
56 |
57 | {
58 | "name": "Ubuntu",
59 | "image": "mcr.microsoft.com/devcontainers/base:jammy",
60 | "features": {
61 | "ghcr.io/devcontainers/features/azure-cli:1": {},
62 | "ghcr.io/devcontainers/features/docker-in-docker:2": {},
63 | "ghcr.io/devcontainers/features/rust:1": {}
64 | },
65 | "customizations": {
66 | "vscode": {
67 | "extensions": [
68 | "serayuzgur.crates",
69 | "vadimcn.vscode-lldb",
70 | "ms-vscode.vscode-node-azure-pack",
71 | "ms-azuretools.vscode-docker",
72 | "rust-lang.rust-analyzer",
73 | "rangav.vscode-thunder-client"
74 | ]
75 | }
76 | }
77 | }
78 |
79 | ```
80 |
81 | 5. Rebuild devcontainer
82 |
83 | 6. 关闭 codespaces ,修改设备设置 4 核 CPU ,8 GB 内存, 32 GB 硬盘
84 |
85 |
86 |
87 | 7. 重新进入 devcontainer
88 |
89 | 8. 可以输入以下指令查看环境是否安装成功
90 |
91 | ```bash
92 |
93 | az --version
94 | docker --version
95 | rustc --version
96 | cargo --version
97 | rustup --version
98 |
99 | ```
100 |
101 |
102 |
103 | 9. 在命令行安装 wasmedge sdk
104 |
105 | ```bash
106 |
107 | curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
108 |
109 | source /home/vscode/.bashrc
110 |
111 | ```
112 |
113 | 10. 创建一个简单的 wasm 应用看看
114 |
115 | 在命令行输入以下命令
116 |
117 |
118 | ```bash
119 |
120 |
121 | cd hellowasmedge
122 |
123 | rustup target add wasm32-wasi
124 |
125 | cargo build --target wasm32-wasi
126 |
127 | wasmedge target/wasm32-wasi/debug/hellowasmedge.wasm
128 |
129 | ```
130 |
131 | 这个时候你可以正确运行一个简单的 wasmedge 应用
132 |
133 |
134 |
135 |
136 |
137 | ### **场景二:用 Wasmedge 调用 Tensorflow 模型**
138 |
139 | 备注 :如果你没有搭建场景一的环境,请回到场景一完成相关练习。
140 |
141 | 在场景一 我们安装了 WasmEdge SDK , 在场景三我们使用源代码的方式编译 WasmEdge SDK 因为我们基于 Tensorflow Lite 所以需要添加对应的组件
142 |
143 | 1. 通过终端,执行以下指令,为环境编译作准备
144 |
145 |
146 | ```bash
147 |
148 | sudo apt-get update
149 | sudo apt-get install -y software-properties-common libboost-all-dev ninja-build
150 | sudo apt-get install -y llvm-14-dev liblld-14-dev clang-14
151 | sudo apt-get install -y gcc g++ cmake
152 | sudo apt-get install -y libssl-dev pkg-config gh vim
153 |
154 | ```
155 |
156 | 2. 在根目录下创建 tools 目录
157 |
158 | ```bash
159 |
160 | mkdir tools
161 |
162 | cd tools
163 |
164 | git clone https://github.com/WasmEdge/WasmEdge.git
165 |
166 | mkdir -p build && cd build
167 |
168 | cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_PLUGIN_WASI_NN_BACKEND="TensorflowLite" .. && make -j2
169 |
170 | cmake --install .
171 |
172 |
173 | ```
174 |
175 | 3. 回到 tools 目录继续执行
176 |
177 | ```bash
178 |
179 | curl -s -L -O --remote-name-all https://github.com/second-state/WasmEdge-tensorflow-deps/releases/download/0.11.2/WasmEdge-tensorflow-deps-TFLite-0.11.2-manylinux2014_x86_64.tar.gz
180 |
181 | tar -zxf WasmEdge-tensorflow-deps-TFLite-0.11.2-manylinux2014_x86_64.tar.gz
182 |
183 | rm -f WasmEdge-tensorflow-deps-TFLite-0.11.2-manylinux2014_x86_64.tar.gz
184 |
185 | mv libtensorflowlite_c.so /usr/local/lib
186 |
187 | ```
188 |
189 | 4. 通过 vim 编辑 ~/.bashrc 添加如下语句
190 |
191 | export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
192 | export WASMEDGE_PLUGIN_PATH=/usr/local/lib/wasmedge
193 |
194 | 5. clone 该地址 https://github.com/lokinfey/WasmEdgeGitHubSpaceDemo
195 |
196 | 6. 在命令行执行以下操作
197 |
198 | ```bash
199 |
200 | cd tfdemo
201 |
202 | cargo build --target=wasm32-wasi --release
203 |
204 | wasmedgec target/wasm32-wasi/release/tfdemo.wasm tfdemo.wasm
205 |
206 | ```
207 |
208 | 7. 在终端执行测试相关结果
209 |
210 | ```bash
211 |
212 | wasmedge --dir .:. tfdemo.wasm model.tflite test.png
213 |
214 | ```
215 |
216 |
217 |
218 |
219 | ### **场景三:Azure Function 上调用 Wasmedge**
220 |
221 | 请参考我的 AzureFunctionWasmDemo https://github.com/kinfey/AzureFunctionWasmDemo
222 |
223 | 恭喜你 , 把 WasmEdge 三个场景完成了。
224 |
225 |
226 | ## **相关资源**
227 |
228 |
229 | 0. 注册你的 GitHub https://github.com/signup
230 |
231 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces
232 |
233 | 2. 学习 Rust 的相关知识 https://learn.microsoft.com/en-us/training/paths/rust-first-steps/
234 |
235 | 3. 学习用 Rust 构建 Azure Function https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-other?tabs=rust%**2Cmacos**
236 |
237 | 4. 学习 Wasmedge https://wasmedge.org/book/en/
238 |
239 | 5. WasmEdge NNI 插件编译相关内容 https://wasmedge.org/book/en/contribute/build_from_src/plugin_wasi_nn.html#build-wasmedge-with-wasi-nn-tensorflow-lite-backend
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
--------------------------------------------------------------------------------
/03.MLEnv.md:
--------------------------------------------------------------------------------
1 | # **在 GitHub Codespaces 上构建机器学习环境**
2 |
3 | 在 GitHub Codespaces 上你可以根据基于已有模版或者根据自己的需要去构建机器学习环境。
4 |
5 |
6 |
7 | 当然这是一个不包含 GPU 的环境,如果你需要 GPU , 必须额外申请。这个已经包含的 Python ,和相关库。
8 |
9 | 或者我更喜欢自己够建环境,我更喜欢使用空模版构建自己的环境,例如 .NET 的机器学习,例如和 Azure 的库等,都是非常依赖我们的机器学习环境的。
10 |
11 |
12 | 自己搭建机器学习环境,需要的步骤如下:
13 |
14 | **1. 选择 "Miniconda (Python 3)" 项目**
15 |
16 |
17 | **2. 并把机器配置切换为 4核 CPU , 8GB 内存 , 32GB 存储**
18 |
19 |
20 |
21 |
22 |
23 | **3. 添加不同的 SDK 和语言环境的支持**
24 |
25 | Azure 相关的如 Azure CLI
26 |
27 |
28 | 选择成功后可以参考以下 devcontainer.json 的配置
29 |
30 | ```json
31 |
32 | {
33 | "name": "Miniconda (Python 3)",
34 | "build": {
35 | "context": "..",
36 | "dockerfile": "Dockerfile"
37 | },
38 | "features": {
39 | "ghcr.io/devcontainers/features/azure-cli:1": {},
40 | "ghcr.io/devcontainers/features/node:1": {}
41 | }
42 |
43 |
44 | }
45 |
46 | ```
47 |
48 |
49 | **5. 把你需要的插件直接添加到容器**
50 |
51 | Azure Machine Learning 插件,可以直接通过插件设置直接添加到 devcontainer.json
52 |
53 |
54 |
55 |
56 |
57 | **6. 额外的环境配置**
58 |
59 | 你可以添加 Azure ML CLI v2 的扩展
60 |
61 | 通过 devcontainer.json 下增加执行脚本来完成相关的调用
62 |
63 | ```json
64 |
65 |
66 | "onCreateCommand": "az extension add -n ml",
67 |
68 | ```
69 |
70 | 这是最后完成的 devcontainer.json
71 |
72 | ```json
73 |
74 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
75 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
76 | {
77 | "name": "Miniconda (Python 3)",
78 | "build": {
79 | "context": "..",
80 | "dockerfile": "Dockerfile"
81 | },
82 | "features": {
83 | "ghcr.io/devcontainers/features/azure-cli:1": {},
84 | "ghcr.io/devcontainers/features/node:1": {}
85 | },
86 | "onCreateCommand": "az extension add -n ml",
87 | "customizations": {
88 | "vscode": {
89 | "extensions": [
90 | "ms-toolsai.vscode-ai"
91 | ]
92 | }
93 | }
94 | }
95 |
96 | ```
97 |
98 |
99 | **6. 重新构建即可**
100 |
101 | ## **关于机器学习的环境配置搭配**
102 |
103 |
104 | 1. Python 你可以通过 miniforge 完成不同版本的 conda 安装
105 |
106 | ```
107 |
108 | conda create -n pydev python=3.8.10
109 |
110 | ```
111 |
112 | 2. Python 相关库
113 |
114 | ```bash
115 |
116 | pip3 install numpy scipy scikit-learn matplotlib pandas pillow jupyterlab jupyter
117 |
118 | ```
119 |
120 | 3. 机器学习/深度学习框架
121 |
122 |
123 | ```bash
124 |
125 | pip3 install tensorflow
126 |
127 | pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu
128 |
129 | ```
130 |
131 | 4. 通过 GitHub Copilot 完成一个深度学习
132 |
133 |
134 |
135 | ## **相关资源**
136 |
137 |
138 | 0. 注册你的 GitHub https://github.com/signup
139 |
140 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces
141 |
142 | 2. 学习 Tensorflow https://learn.microsoft.com/en-us/training/paths/tensorflow-fundamentals/
143 |
144 | 3. 学习 PyTorch https://learn.microsoft.com/en-us/training/paths/pytorch-fundamentals/
145 |
146 |
147 |
148 |
--------------------------------------------------------------------------------
/03.MLwithAzure.md:
--------------------------------------------------------------------------------
1 | # **通过 Azure ML 结合 GitHub Codespaces 完成一个机器学习**
2 |
3 | 机器学习离不开相关的硬件资源,毕竟需要使用大量数据和不同的算力,为此云端的辅助必不可少。我们可以通过 Azure ML 来辅助我们完成机器学习的任务。
4 |
5 |
6 | ## **什么是 Azure 机器学习**
7 |
8 | Azure 机器学习助力数据科学家和开发人员更快、更自信地构建、部署和管理高质量的模型。它能够利用行业领先的机器学习运营(MLOps)、开源互操作性和集成工具加快价值实现速度。此可信赖的平台是专为机器学习中的负责任 AI 应用程序设计的。
9 |
10 | 通过 Azure 机器学习工作室,你可以更有效地管理机器学习的所有流程。
11 |
12 |
13 |
14 | 你可以在 GitHub codespaces 上管理你的机器学习,在之前的环境配置中已经完成了相关的环境配置,你可以直接接入你的机器学习环境,当然别忘记安装好,azureml sdk
15 |
16 | ```bash
17 |
18 | pip3 install azure-ai-ml
19 |
20 | ```
21 |
22 | ## **接下来我们来做一个简单的实验**
23 |
24 | 请参考 https://learn.microsoft.com/en-us/azure/machine-learning/tutorial-azure-ml-in-a-day 构建一个 notebook
25 |
26 |
27 |
28 |
29 | 或者直接使用 https://github.com/kinfey/AzureMLWithCodespace/blob/master/Notebooks/01.pytorch_demo.ipynb
30 |
31 |
32 | ## **相关资源**
33 |
34 |
35 | 0. 注册你的 GitHub https://github.com/signup
36 |
37 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces
38 |
39 | 2. 学习 Azure Machine Learning https://learn.microsoft.com/en-us/training/paths/use-azure-machine-learning-pipelines-for-automation/
--------------------------------------------------------------------------------
/03.MLwithMLOps.md:
--------------------------------------------------------------------------------
1 | # **MLOps 的开发技巧**
2 |
3 | ## **什么是 MLOps?**
4 |
5 |
6 |
7 |
8 | MLOps 基于可提高工作流效率的 DevOps 原理和做法。 例如持续集成、持续交付和持续部署。 MLOps 将这些原理应用到机器学习过程,其目标是:
9 |
10 | 更快地试验和开发模型。
11 | 更快地将模型部署到生产环境。
12 | 质量保证和端到端世系跟踪。
13 |
14 | ## **机器学习中的 MLOps**
15 |
16 |
17 |
18 | 机器学习提供以下 MLOps 功能:
19 |
20 | 创建可重现的机器学习管道。 使用机器学习管道可为数据准备、训练和评分过程定义可重复且可重用的步骤。
21 |
22 | 创建可重用的软件环境。 使用这些环境训练和部署模型。
23 |
24 | 从任意位置注册、打包和部署模型。 还可以跟踪使用模型时所需的关联元数据。
25 |
26 | 捕获端到端机器学习生命周期的监管数据。 记录的世系信息可以包括模型的发布者和做出更改的原因。 还包括在生产环境中部署或使用模型的时间。
27 |
28 | 针对机器学习生命周期中的事件发出通知和警报。 事件示例包括试验完成、模型注册、模型部署和数据偏移检测。
29 |
30 | 监视机器学习应用程序中的操作和机器学习相关问题。 比较训练与推理之间的模型输入。 探索特定于模型的指标。 提供有关机器学习基础结构的监视和警报信息。
31 |
32 | 使用机器学习和 Azure Pipelines 自动化端到端机器学习生命周期。 通过使用管道,可以经常更新模型。 还可以测试新模型。 可以连同其他应用程序和服务持续推出新的机器学习模型。
33 |
34 |
35 | ## **GitHub + Azure ML 来完成MLOps**
36 |
37 | GitHub 不再紧紧是代码存放工具了,它具备了很多的功能,如 GitHub Actions , GitHub Codespaces , 以及不同的项目管理等。我很喜欢 GitHub ,而且作为最重要的开发平台。
38 |
39 |
40 |
41 | 从上一章我们了解到 Azure 机器学习是非常好的 MLOps 平台,整合 GitHub 可以更好地维护我们的机器学习项目。
42 |
43 | 我们可以通过 fork 这个项目来进入 MLOps的世界 https://github.com/kinfey/AzureMLWithCodespace
44 |
45 | 具体操作(本例子依赖于之前的机器学习环境配置,如果你没有配置完成请回到前面参考相关操作)
46 |
47 | 1. 数据上传
48 |
49 | 通过执行 MLOps 文件夹下的 download-data.py ,完成数据下载,然后上传到你的 Azure ML 平台上,
50 |
51 | ```bash
52 |
53 | az ml data create --file data.yml --resource-group my-resource-group --workspace-name my-workspace
54 |
55 | ```
56 |
57 | 2. 去到 GitHub 把不同密钥设置好
58 |
59 |
60 |
61 |
62 | AML_WORKSPACE,AZURE_SUBSCRIPTION,RESOURCE_GROUP 你都可以通过
63 |
64 |
65 |
66 | 这里你可以通过
67 |
68 | ```bash
69 |
70 | az ad sp create-for-rbac --name $AML_SP \
71 | --role contributor \
72 | --scopes /subscriptions/SUBSCRIPTIONID/resourceGroups/my-resource-group \
73 | --sdk-auth
74 |
75 | ```
76 |
77 | 设置 AZURE_CREDENTIALS
78 |
79 | 完成后,即可运行
80 |
81 | 3. 这里我要说明一点,每一个环境配置你都可以更改的, Azure ML 是基于 yml 文件去设置的,具体你可以参考 https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-overview
82 |
83 | 4. 我们现在可以通过 GitHub Actions 把数据,训练,部署结合 Azure ML一体化完成
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | ## **相关资源**
93 |
94 | 1. 学习 Azure ML v2 相关内容 https://learn.microsoft.com/en-us/azure/machine-learning/concept-v2
95 |
96 | 2. 了解 GitHub Actions 的使用 https://github.com/features/actions
97 |
98 |
--------------------------------------------------------------------------------
/EN/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/.DS_Store
--------------------------------------------------------------------------------
/EN/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/EN/00.Introduction.md:
--------------------------------------------------------------------------------
1 | # **GitHub Codespaces Introduction**
2 |
3 |
4 |
5 | GitHub Codespaces allows you to not only maintain your code as usual on GitHub, but now you can also compile your project, allowing you to directly complete your research and development tasks and the content of open source projects directly through the cloud. With GitHub Codespaces, you can learn programming languages, develop projects, and maintain code anytime, anywhere on any device. The biggest advantage is that you no longer need to spend any time configuring different environments for learning or completing an application, and you can quickly maintain your project on any device anywhere. On GitHub Universe 2022, every GitHub user will get 60 hours of exclusive usage per month.
6 |
7 | ## **What is GitHub Codespaces**
8 |
9 | GitHub Codespaces is a development environment hosted in the cloud. You can customize projects for GitHub Codespaces by committing configuration files to your Repo (often referred to as configuration as code), which creates a repeatable GitHub Codespaces configuration for all users of the project. Each codespace runs on a GitHub-hosted virtual machine. You can choose the type of machine to use based on the resources you need. Offer needs to provide various types of machines. You can connect to CodeSpace from a browser, Visual Studio Code, the JetBrains Gateway application, or using the GitHub CLI.
10 |
11 |
12 |
13 | GitHub Codespaces are for personal and business development. As long as your device has a browser, you can use GitHub Codespaces, allowing you to write and manage your code more efficiently.
14 |
15 | ## **How to use GitHub Codespaces**
16 |
17 | ### **Scene one**
18 |
19 | Log in to your GitHub, select "Codespaces" in the upper navigation bar, and you can enter your Codespaces environment.
20 |
21 | You can create your different applications based on different templates. The templates are still limited at this stage, mainly for Python, Ruby, and JavaScript technologies. Of course, you can also use empty templates to build solutions for different application scenarios based on different programming languages.
22 |
23 |
24 |
25 | ### **Scene Two**
26 |
27 | If you want to target a Repo on GitHub, you can also fork it, select Codespaces, and enter the corresponding environment
28 |
29 |
30 |
31 | ### **Scene Three**
32 |
33 | You can enable your Codespaces through local Visual Studio Code and related Jetbrains IDEs
34 |
35 |
36 |
37 |
38 | ## **Environment settings for GitHub Codespaces**
39 |
40 | ### **Cloud Hardware**
41 |
42 | There are different hardware on GitHub Codespaces, you can build better hardware according to your needs
43 |
44 |
45 |
46 | You can modify the relevant content according to the changes of the project
47 |
48 | ### **About Dev container**
49 |
50 | When you work in GitHub Codespaces, the environment you work in is created using a development container, or development container, hosted on a virtual machine.
51 |
52 | A development container, or dev container, is a Docker container specifically configured to provide a fully functional development environment. Whenever you work in codespace, you are using a development container on a virtual machine.
53 |
54 | You can configure a development container for a repository so that the code space created for that repository provides you with a development environment tailored to your needs, complete with all the tools and runtimes you need to work on your specific project. If you don't define a configuration in your repository, GitHub Codespaces will use a default configuration that includes many of the common tools your team may need when developing projects.
55 |
56 | Configuration files for the development container are contained in the .devcontainer directory of the repository. You can use Visual Studio Code to add the profile for you. You can choose from predefined configurations for various project types. You can use them without further configuration, or you can edit the configuration to improve the development environment they generate.
57 |
58 | In devcontainer.json, you can add different language environments, different SDKs, and different cloud supports, as well as port configurations, and you can also set different plug-ins required by your project. You can also define and configure more content according to different needs.
59 |
60 | ### **Develop different applications through templates**
61 |
62 | Now you can quickly create Rudy, Python, and JavaScript technology stack related content through templates. Here we take a Flask application as an example to create an application maintained through GitHub Codespaces.
63 |
64 |
65 |
66 |
67 | ### **Build a programming environment through an empty template**
68 |
69 | If you are a user of .NET, Java, Rust or Go programming language, you can also complete related programming language learning through empty templates. Here I take .NET as an example to tell you how to build a .NET project.
70 |
71 | For details, please refer to click to learn more
72 |
73 | ## **Related Resources**
74 |
75 | 0. Sign up your GitHub https://github.com/signup
76 |
77 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
78 |
79 | 2. Learn about Flask https://learn.microsoft.com/en-us/training/modules/python-flask-build-ai-web-app/
80 |
81 | 3. Learn about .NET https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/
82 |
83 |
--------------------------------------------------------------------------------
/EN/01.LearnCSharp.md:
--------------------------------------------------------------------------------
1 | # **Learn C# on GitHub Codespaces**
2 |
3 | After .NET was open sourced in 2016, it has become a cross-application scenario and cross-platform technology. You can write web pages, desktop applications, games, Internet of Things, mobile applications, cloud computing, big data and other applications through C#. We can learn about .NET through GitHub Codespaces. In this exercise, we use GitHub Codespaces to build a simple console, user, and cloud computing application.
4 |
5 | ## **Scenario 1: Building a console application**
6 |
7 | 1. Select an empty template on GitHub Codespaces to build a GitHub Codespaces template
8 |
9 |
10 |
11 |
12 |
13 | 2. If you are a Windows / Linux user, please use Ctrl + Shift + P , if you are a macOS user, please use Cmd + Shift + P, select Codespaces: Configure Dev Container Features...
14 |
15 |
30 |
31 | 5. After the setup is successful, select Rebuild
32 |
33 | 6. On the opened GitHub Codespaces, open the console and enter the following command to view the relevant information of the .NET SDK
34 |
35 | ```bash
36 |
37 | dotnet --version
38 |
39 | ```
40 |
41 |
42 |
43 |
44 |
45 | 7. In the terminal, enter the following command to create a minimal .NET console command
46 |
47 | ```bash
48 |
49 | dotnet new console -o HelloWorldApp
50 |
51 | ```
52 |
53 | 8. Select Run and Debug on GitHub Codespaces, select .NET 5+ and .NET Core, and run directly
54 |
55 |
56 |
57 |
58 |
59 | 9. End Debug, you can set a breakpoint and run it again
60 |
61 |
62 |
63 |
64 |
65 | That's your first .NET application built in GitHub Codespaces, and you can move on to the next scenario.
66 |
67 | ## **Scenario 2: Learning C# in GitHub Codespaces**
68 |
69 | As beginners, we need to learn the grammar of C#. For traditional grammar learning, we need IDE, but now we can learn C# programming through Notebook
70 |
71 | 0. Create a GitHub Codespaces and create a .NET 6 development environment through an empty template
72 |
73 | 1. Find Polyglot Notebooks in Extension of GitHub Codespaces and install
74 |
75 |
76 |
77 |
78 |
79 |
80 | 2. Open the terminal of GitHub Codespaces and enter the following command
81 |
82 | ```bash
83 |
84 | git clone https://github.com/kinfey/csharp-notebooks.git
85 |
86 | ```
87 |
88 | 3. Select the subdirectory csharp-101 under the directory csharp-notebooks
89 |
90 |
91 |
92 |
93 |
94 | 4. Select 02-The Basics of Strings.ipynb, select the Run All button
95 |
96 |
97 |
98 |
99 |
100 | You can now learn the C# programming language interactively, much more concisely than in the past when you needed to configure an IDE. Hope to combine CSharp 101 to open your way of C# programming.
101 |
102 | ## **Scenario 3: Build a GitHub Codespaces environment with Minimal API**
103 |
104 | If you finish learning the C# programming language and you want to do some microservice work, you can build Minmal API through .NET.
105 |
106 | 1. Create a GitHub Codespaces and create a .NET 7 development environment through an empty template
107 |
108 | 2. Build a Minimal API via the command line
109 |
110 | ```bash
111 |
112 | dotnet new web -o DemoAPI
113 |
114 | ```
115 | 3. Run directly through Debug
116 |
117 | 4. Here you need to set the Port to Public
118 |
119 |
120 |
121 |
122 |
123 |
124 | 5. You can also install the Thunder Client plug-in and directly access it with localhost
125 |
126 |
127 |
128 |
129 |
130 | ## **Related Resources**
131 |
132 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
133 |
134 | 2. Learn C# https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/
135 |
136 | 3. C# 101 Study Manual https://github.com/kinfey/csharp-notebooks
137 |
138 | 4. Learn .NET Minimal API https://learn.microsoft.com/en-us/aspnet/core/tutorials/min-web-api?view=aspnetcore-7.0&tabs=visual-studio
139 |
140 |
141 |
--------------------------------------------------------------------------------
/EN/01.LearnJava.md:
--------------------------------------------------------------------------------
1 | # **Learn Java on GitHub Codespaces**
2 |
3 | Java is a very old programming language, which is used in many modern scenes. If you are a beginner in Java, you will definitely worry about setting environment variables. It is very difficult for beginners to configure JDK. GitHub Codespaces can save you all the time of environment configuration, so that you can quickly enter Java learning.
4 |
5 | The following are examples of several scenarios, hoping to give some guidance to beginners learning Java
6 |
7 | ## **Scenario 1: Quickly enable Java development environment on GitHub Codespaces**
8 |
9 | 1. Select an empty template on GitHub Codespaces
10 |
11 |
12 |
13 |
14 |
15 | 2. If you are a Windows / Linux user, please use Ctrl + Shift + P, if you are a macOS user, please use Cmd + Shift + P, select Add Dev Container Configuration Files
16 |
17 |
18 |
19 |
20 |
21 | 3. Select Java in the search box
22 |
23 |
24 |
25 |
26 |
27 | and select the version of Java 17
28 |
29 |
30 |
31 |
32 |
33 | You can choose based on Maven or Gradle, here I choose Maven
34 |
35 |
36 |
37 |
38 |
39 | We also need to add Docker from Docker for later scenarios
40 |
41 |
42 |
43 |
44 |
45 | 4. Select Rebuild that appears at the bottom right
46 |
47 |
48 |
49 |
50 |
51 | 5. After a while, you can enter the newly created Java development environment. You can see from the plugin list on GitHub Codespaces that the most basic Java development components have been configured.
52 |
53 |
54 |
55 |
56 |
57 | 6. Start the terminal in GitHub Codespaces, execute the following command, enter the following command, you can see the relevant content
58 |
59 | ```bash
60 |
61 | java --version
62 |
63 | ```
64 |
65 |
79 |
80 |
81 | ## **Scenario 2: Building an application on Spring Boot**
82 |
83 | Based on the development environment of Scenario 1, you can build your microservices through Spring Boot, which is also the most common way, which is the same as how we build Java in Visual Studio Code.
84 |
85 | 1. If you are a Windows / Linux user, please use Ctrl + Shift + P, if you are a macOS user, please use Cmd + Shift + P, select Java: Create Java Project
86 |
87 |
88 |
89 |
90 |
91 | 2. Choose to create a Spring Boot project
92 |
93 |
94 |
95 |
96 |
97 | If you are using it for the first time, you will install the Spring Boot support plug-in, and you need to repeat the first and second steps after completion
98 |
99 |
100 |
101 |
102 |
103 | Select the version of Spring Boot
104 |
105 |
106 |
107 |
108 |
109 | Language Java
110 |
111 |
112 |
113 |
114 |
115 | Add the namespace and confirm the packaging method, here select Jar
116 |
117 |
118 |
119 |
120 |
121 | Select the corresponding version, such as 17, and the required Java Spring Boot functions, here you need to choose Spring Web
122 |
123 |
124 |
125 |
126 |
127 | Select the saved folder, I will add an app on Codespace as a project save
128 |
129 |
130 |
131 |
132 |
133 | 3. Add an APIController.java file in src/main/java/com/ghcsdemo/springbootdemo, including the following content
134 |
135 | ```java
136 |
137 | package com.ghcsdemo.springbootdemo;
138 |
139 | import org.springframework.web.bind.annotation.PathVariable;
140 | import org.springframework.web.bind.annotation.RequestMapping;
141 | import org.springframework.web.bind.annotation.RequestMethod;
142 | import org.springframework.web.bind.annotation.RestController;
143 |
144 | @RestController
145 | @RequestMapping("api")
146 | public class APIController {
147 |
148 |
149 | @RequestMapping(value = "/getInfo/{name}",method = RequestMethod.GET)
150 | public String getInfo(@PathVariable String name){
151 | return "Hi ," + name ;
152 | }
153 |
154 |
155 |
156 | }
157 |
158 | ```
159 |
160 | 4. Select Debug to run
161 |
162 | 5. You can directly display the Port 8080 to view the results, or you can
163 |
164 |
165 |
166 |
167 |
168 | It can also be detected internally by installing Thunder Client
169 |
170 |
171 |
172 |
173 |
174 | 6. Package the application
175 |
176 |
177 | ```bash
178 |
179 | ./mvnw package
180 |
181 | ```
182 | 7. You can run the newly packaged jar directly on the terminal of GitHub Codespaces
183 |
184 |
185 |
186 |
187 |
188 |
189 | ## **Scenario 3: Building an application based on Spring Boot container**
190 |
191 | We know that containerization is now an essential cloud-native approach, and microservices are quickly deployed to the cloud through containers. Spring Boot applications can be quickly deployed to containers, and GitHub Codespaces can also support container encapsulation.
192 |
193 | 1. Add Dockerfile in springbootdemo folder
194 |
195 | ```yml
196 |
197 | FROM openjdk:17-alpine
198 | ARG JAR_FILE=target/*.jar
199 | COPY ${JAR_FILE} app.jar
200 | ENTRYPOINT ["java","-jar","/app.jar"]
201 |
202 | ```
203 |
204 | 2. Run the following command on the terminal
205 |
206 |
207 | ```bash
208 |
209 | docker build -t kinfey/springdemo .
210 |
211 | docker run -p 8080:8080 kinfey/springdemo
212 |
213 |
214 | ```
215 |
216 | 3. The deployment of the container application is very simple
217 |
218 |
219 |
220 |
221 |
222 | ## **Related Resources**
223 |
224 |
225 | 0. Sign up your GitHub https://github.com/signup
226 |
227 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
228 |
229 | 2. Learn about Java https://learn.microsoft.com/zh-cn/azure/developer/java/
230 |
231 | 3. Learn about Spring Boot v3 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
232 |
233 | 4. Deploy the Spring application to the container https://spring.io/guides/gs/spring-boot-docker/
234 |
--------------------------------------------------------------------------------
/EN/01.LearnRust.md:
--------------------------------------------------------------------------------
1 | # **Learn Rust on GitHub Codespaces**
2 |
3 | Rust is very popular among new generation programming languages. With Rust you can write more reliable software more efficiently. Rust can be applied in cloud native, system management, and Web 3, Internet of Things, and cryptocurrency. Many companies are now using Rust as a safe alternative to C/C++. You can quickly set up your Rust learning environment through GitHub Codespaces.
4 |
5 | These are samples
6 |
7 | ## **Sample 1 :Using GitHub Codespaces to create Rust dev environment**
8 |
9 | 1. Create Codespaces from an blank template
10 |
11 |
12 |
13 | 2. Create devcontainer.json via CMD + Shift + P - macOS or Ctrl + Shift + P - Linux / Windows
14 |
15 |
16 |
17 | Select Rust devcontainers
18 |
19 |
20 |
21 | 3. Add some features you need, such as Azure CLI, etc.
22 |
23 |
24 |
25 | 4. Rebuild your GitHub Codespaces
26 |
27 |
28 |
29 | 5. You can view the settings of your Rust environment in ternminal
30 |
31 | ```bash
32 |
33 | cargo --version
34 |
35 | rustc --version
36 |
37 | ```
38 |
39 |
40 |
41 | Congratulations, you've finished setting up your Rust environment on GitHub Codespaces.
42 |
43 |
44 |
45 | ## **Sample 2:Using GitHub Codespaces to debug Rust application**
46 |
47 | We continue to use the environment of Sample 1. If you have not completed Sample 1, please jump to Scenario 1 to complete the environment configuration.
48 |
49 | 1. Open Terminal on GitHub Codespaces and create a Rust project with cargo
50 |
51 | ```bash
52 |
53 | cargo new rustdemoapp
54 |
55 | ```
56 |
57 | 1. Enter the rustdemoapp folder and enter the following command to execute the Rust program
58 |
59 | ```bash
60 |
61 | cargo build
62 |
63 | cargo run
64 |
65 | ```
66 |
67 |
68 |
69 |
70 | 3. Open src/main.rs on GitHub Codespaces and set a breakpoint
71 |
72 |
73 |
74 |
75 | 4. After selecting Debug, enter launch.json and add the following path
76 |
77 | ```json
78 |
79 | {
80 | // Use IntelliSense to learn about possible attributes.
81 | // Hover to view descriptions of existing attributes.
82 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
83 | "version": "0.2.0",
84 | "configurations": [
85 | {
86 | "type": "lldb",
87 | "request": "launch",
88 | "name": "Debug",
89 | "program": "${workspaceFolder}/rustdemoapp/target/debug/rustdemoapp",
90 | "args": [],
91 | "cwd": "${workspaceFolder}"
92 | }
93 | ]
94 | }
95 |
96 | ```
97 |
98 | 5. Click Debug
99 |
100 |
101 |
102 |
103 |
104 | ## **Sample 3 :Developing Azure Functions in Rust on GitHub Codespaces**
105 |
106 | Let’s continue Sample 1 and build GitHub Codespaces to complete the relevant learning. If you have not completed the construction of Sample 1, please return to Sample 1 to complete the relevant environment.
107 |
108 | 0. Delete Sample 2 folder rustdemoapp
109 |
110 | 1. Setting up the environment for GitHub Codespaces, converted to 4-core CPU, 8 GB RAM, 32 GB storage
111 |
112 |
113 |
114 | 2. Add Azure-related components in GitHub Codespaces, choose to add them to devcontainer.json, and rebuild the development environment
115 |
116 |
117 |
118 | 3. Log in your Azure Portal
119 |
120 |
121 |
122 | After successful login, as follows
123 |
124 |
125 |
126 |
127 | 4. Install Azure Functions SDK-related components in terminal
128 |
129 | ```bash
130 |
131 | curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
132 |
133 | sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
134 |
135 | sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/debian/$(lsb_release -rs | cut -d'.' -f 1)/prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
136 |
137 | sudo apt-get update
138 |
139 | sudo apt-get install azure-functions-core-tools-4
140 |
141 | ```
142 |
143 |
144 |
145 | 5. Create an Azure Function on GitHub Codespaces
146 |
147 |
148 |
149 |
150 |
151 | Select Custom Handler - HTTP trigger - RustFuncHttpTrigger - Anonymous - Add to workspace
152 |
153 | After successful , as shown in the figure
154 |
155 |
156 |
157 | 6. In terminal , enter the following command in the root folder
158 |
159 |
160 | ```bash
161 |
162 | cargo init --name handler
163 |
164 |
165 | ```
166 |
167 | 7. Update your Cargo.toml
168 |
169 |
170 | ```
171 |
172 | [dependencies]
173 | warp = "0.3"
174 | tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }
175 |
176 |
177 | ```
178 |
179 | 8. add these content in src/main.rs
180 |
181 |
182 | ```rust
183 |
184 | use std::collections::HashMap;
185 | use std::env;
186 | use std::net::Ipv4Addr;
187 | use warp::{http::Response, Filter};
188 |
189 | #[tokio::main]
190 | async fn main() {
191 | let example1 = warp::get()
192 | .and(warp::path("api"))
193 | .and(warp::path("RustFuncHttpTrigger"))
194 | .and(warp::query::>())
195 | .map(|p: HashMap| match p.get("name") {
196 | Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)),
197 | None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")),
198 | });
199 |
200 | let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT";
201 | let port: u16 = match env::var(port_key) {
202 | Ok(val) => val.parse().expect("Custom Handler port is not a number!"),
203 | Err(_) => 3000,
204 | };
205 |
206 | warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await
207 | }
208 |
209 | ```
210 |
211 |
212 | 9. run these in terminal
213 |
214 |
215 | ```bash
216 |
217 |
218 | cargo build --release
219 |
220 | cp target/release/handler .
221 |
222 |
223 | ```
224 |
225 | 10. Modify the customHandler field in host.json
226 |
227 |
228 | ```json
229 |
230 | "customHandler": {
231 | "description": {
232 | "defaultExecutablePath": "handler",
233 | "workingDirectory": "",
234 | "arguments": []
235 | },
236 | "enableForwardingHttpRequest": true
237 | }
238 |
239 | ```
240 |
241 | 11. Enter func start in terminal to run Azure Functions
242 |
243 |
244 |
245 |
246 | It is recommended to install Thunder Client to see the running results
247 |
248 |
249 |
250 |
251 |
252 |
253 | ## **Resources**
254 |
255 |
256 | 0. Sign up your GitHub https://github.com/signup
257 |
258 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
259 |
260 | 2. Learn about Rust https://learn.microsoft.com/en-us/training/paths/rust-first-steps/
261 |
262 | 3. Learn to build Azure Functions with Rust https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-other?tabs=rust%2Cmacos
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
--------------------------------------------------------------------------------
/EN/02.CloudNativeEnv.md:
--------------------------------------------------------------------------------
1 | # **Configure the cloud-native development environment on GitHub Codespaces**
2 |
3 | There are many cloud-native technologies at this stage, and we can deal with different cloud-native scenarios through GitHub Codespaces. For example, the development of containers, such as the configuration and maintenance of K8s application scenarios, can assist different projects to go to the cloud. This poses different challenges for the development team. First, the unity of the environment, and second, the integration of multiple scenarios and multiple technologies. Or you can think of GitHub Codespaces as an online Visual Studio Code in the cloud, but as for Visual Studio Code, its functions are not only compatible with plug-ins, but also support different cloud scenarios and templates. We can quickly build a cloud-native development environment through GitHub Codespaces. Next, we will build a cloud-native development environment through simple steps.
4 |
5 | **1. Select an empty template to build a GitHub Codespaces project**
6 |
7 |
8 |
9 | **2. And switch the machine configuration to 4-core CPU, 8GB memory, 32GB storage**
10 |
11 |
12 |
13 | **3. Setting up the environment for GitHub Codespaces**
14 |
15 | Use CMD + Shift + P for macOS, Ctrl + Shift + P for Windows / Linux Select Add Dev Container under Codespaces Select Ubuntu 22.04 development container (Ubuntu is the best development system for cloud native environment)
16 |
17 |
18 |
19 | Version select jammy - 22.04
20 |
21 |
22 |
23 | **4. Add support for different SDKs and locales**
24 |
25 | Azure related such as Azure CLI, Azure Functions, etc.
26 |
27 | Dotnet CLI , Miniforge , and nodejs etc.
28 |
29 | After the selection is successful, you can refer to the following devcontainer.json configuration
30 |
31 | ```json
32 |
33 | {
34 | "name": "Ubuntu",
35 | "image": "mcr.microsoft.com/devcontainers/base:jammy",
36 | "features": {
37 | "ghcr.io/devcontainers/features/azure-cli:1": {},
38 | "ghcr.io/devcontainers/features/dotnet:1": {},
39 | "ghcr.io/devcontainers/features/node:1": {},
40 | "ghcr.io/rocker-org/devcontainer-features/miniforge:0": {},
41 | "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {}
42 | }
43 |
44 |
45 | }
46 |
47 | ```
48 |
49 | **5. Here you can add some extensions plug-ins for the environment**
50 |
51 | Add the following statement to devcontainer.json to add .NET , Python , Thunder-Client and other plug-ins for your cloud-native GitHub Codespaces environment.
52 |
53 | ```json
54 |
55 | "customizations": {
56 | // Configure properties specific to VS Code.
57 | "vscode": {
58 |
59 | // Add the IDs of extensions you want installed when the container is created.
60 | "extensions": [
61 | "ms-python.python",
62 | "ms-python.vscode-pylance",
63 | "ms-dotnettools.csharp",
64 | "rangav.vscode-thunder-client"
65 | ]
66 | }
67 | }
68 |
69 |
70 | ```
71 |
72 | We can look at the complete devcontainer.json
73 |
74 | ```json
75 |
76 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
77 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
78 | {
79 | "name": "Ubuntu",
80 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
81 | "image": "mcr.microsoft.com/devcontainers/base:jammy",
82 | "features": {
83 | "ghcr.io/devcontainers/features/azure-cli:1": {},
84 | "ghcr.io/devcontainers/features/dotnet:1": {},
85 | "ghcr.io/devcontainers/features/node:1": {},
86 | "ghcr.io/rocker-org/devcontainer-features/miniforge:0": {},
87 | "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {}
88 | },
89 | "customizations": {
90 | // Configure properties specific to VS Code.
91 | "vscode": {
92 |
93 | // Add the IDs of extensions you want installed when the container is created.
94 | "extensions": [
95 | "ms-python.python",
96 | "ms-python.vscode-pylance",
97 | "ms-dotnettools.csharp",
98 | "rangav.vscode-thunder-client"
99 | ]
100 | }
101 | }
102 |
103 | // Features to add to the dev container. More info: https://containers.dev/features.
104 | // "features": {},
105 |
106 | // Use 'forwardPorts' to make a list of ports inside the container available locally.
107 | // "forwardPorts": [],
108 |
109 | // Use 'postCreateCommand' to run commands after the container is created.
110 | // "postCreateCommand": "uname -a",
111 |
112 | // Configure tool-specific properties.
113 | // "customizations": {},
114 |
115 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
116 | // "remoteUser": "root"
117 | }
118 |
119 |
120 | ```
121 |
122 | 6. When finished, Rebuild your GitHub Codespaces
123 |
124 |
125 |
126 | Your environment is configured. Next, we try to build two projects to lay a solid foundation for subsequent connections.
127 |
128 | Create a folder apps in the terminal, and build a subfolder of backend.app and frontend.app under apps
129 |
130 |
131 |
132 | ## **Project 1: Build a .NET Blazor Web Assbembly application**
133 |
134 | 1. Enter the frontend.app folder just created through the terminal
135 |
136 | ```bash
137 |
138 | cd apps
139 | cd frontend.app
140 |
141 | ```
142 |
143 | 2. Enter the following command under frontend.app to build a .NET Blazor Wasm application
144 |
145 | ```bash
146 |
147 | dotnet new blazorwasm -o BlazorUI.App
148 |
149 | cd BlazorUI.App
150 |
151 | dotnet restore
152 |
153 | dotnet build
154 |
155 | dotnet run
156 |
157 | ```
158 |
159 | 3. You can directly open the Blazor Wasm application in the browser
160 |
161 |
162 |
163 |
164 | ## **Project 2: Build an Azure Functions written in Python**
165 |
166 | 1. Enter the terminal, install and configure your Python
167 |
168 |
169 | ```bash
170 |
171 | conda create -n pydev python=3.9.10
172 |
173 | conda activate pydev
174 |
175 |
176 | ```
177 |
178 | 2. Use CMD + Shift + P for macOS, Ctrl + Shift + P for Windows/Linux, select Create Function under Azure Functions, select the previously built backend.app folder, select HttpTrigger and anonymous access, and name it AIOnnxHttpTrigger
179 |
180 | 3. Replace the files in https://github.com/kinfey/PythonOnnxDemo/tree/codespace-kinfey-bug-free-space-winner-gwjxj67qvv6fvr6/OnnxHttpTriggerDemo with the files under the AIOnnxHttpTrigger file
181 |
182 | 4. Start your Azure Functions via func start on the command line
183 |
184 | ```bash
185 |
186 | func start
187 |
188 | ```
189 | 5. Verify through Thunder Client
190 |
191 |
192 |
193 | In this way, everyone has completed the cloud native environment configuration of GitHub Codespaces. If you want to know more, please go to the next chapter
194 |
195 | ## **Related Resources**
196 |
197 | 0. Sign up your GitHub https://github.com/signup
198 |
199 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
200 |
201 | 2. Learn about .NET Blazor https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor
202 |
203 | 3. Learn about Azure Functions https://learn.microsoft.com/en-us/azure/azure-functions/functions-overview
204 |
205 |
--------------------------------------------------------------------------------
/EN/02.CloudNativeInAzure.md:
--------------------------------------------------------------------------------
1 | ## **Create an application combining Azure Static Web App and Azure Function through GitHub Codespaces**
2 |
3 | Azure Static Web Apps is a service that automatically generates a full-stack web app from a code repository and deploys it to Azure.
4 |
5 |
6 |
7 | Workflows for Azure Static Web Apps fit into a developer's everyday workflow. Build and deploy applications based on code changes.
8 |
9 | When you create an Azure Static Web Apps resource, Azure interacts directly with GitHub or Azure DevOps to monitor the fork you choose. Every time you push a commit to a monitored branch or accept a pull request, a build is automatically run and your app and API are deployed to Azure.
10 |
11 | Static web apps are typically generated using libraries and web frameworks such as Angular, React, Svelte, Vue, or Blazor that don't require server-side rendering. These apps include the HTML, CSS, JavaScript, and image assets that make up the application. For traditional web servers, these assets are served by a single server along with any required API endpoints.
12 |
13 | When using static web applications, static assets are separated from traditional web servers and served by servers distributed around the world. This distribution allows files to be served faster since the files are physically closer to the end user. Additionally, API endpoints use a serverless architecture, eliminating the need to put together a full backend server.
14 |
15 | **The main function**
16 |
17 | Web hosting for static content like HTML, CSS, JavaScript, and images.
18 |
19 | Integration API support provided by Azure Functions with the option to link existing Azure Functions applications using standard accounts.
20 |
21 | Best-in-class GitHub and Azure DevOps integration, where repository changes trigger builds and deployments.
22 |
23 | Globally distributed static content, bringing content closer to your users.
24 |
25 | Free auto-renewable SSL certificate.
26 |
27 | Custom domains provide branding customization for apps.
28 |
29 | A seamless security model using a reverse proxy when calling the API, which does not require CORS to be configured.
30 |
31 | The authentication provider integrates with Azure Active Directory, GitHub, and Twitter.
32 |
33 | Customizable authorization role definition and assignment.
34 |
35 | Backend routing rules, giving you full control over served content and routing.
36 |
37 | The resulting interim version is backed by a pull request, providing a preview version of the site before publication.
38 |
39 | The CLI supports creation of cloud resources through the Azure CLI and local development through the Azure Static Web Application CLI.
40 |
41 | This exercise will combine the previously set environment and tasks to complete the following two tasks. If you have not completed it, please skip to the chapter to configure https://github.com/kinfey/GitHubCodeSpaceWorkShop/blob/main/02 .CloudNativeEnv.md
42 |
43 | ### **Task 1: Configure your swa cli**
44 |
45 | 1. We have configured the corresponding environment configuration before, but we need to confirm the version of our nodejs in 16.x, because we have chosen the nvm package for management, so here we can adjust the version of nodejs through nvm, through terminal input
46 |
47 | ```bash
48 |
49 | nvm install v16.14.0
50 |
51 | ```
52 |
53 | Verify that it is correct by node -v
54 |
55 |
56 |
57 | At this time you can verify through your terminal
58 |
59 | 2. Install your swa cli
60 |
61 | ```bash
62 |
63 | npm install -g @azure/static-web-apps-cli
64 |
65 |
66 | ```
67 |
68 | The version number can be verified by swa -v, thus completing the configuration of swa cli
69 |
70 | ### **Task 2: Modify the previous project**
71 |
72 | Replace Pages/Index.razor in Blazor wasm project
73 |
74 | ```csharp
75 |
76 | @page "/"
77 | @using System.Web
78 | @inject HttpClient _httpClient;
79 |
80 | Index
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
Result : @responseText
92 |
93 |
94 | @code {
95 |
96 |
97 | private FormModel formModel { get; set; } = new FormModel();
98 |
99 | private string responseText { get; set; } = "";
100 |
101 |
102 |
103 | private class FormModel
104 | {
105 | public string? URL { get; set; }
106 | }
107 |
108 | private async Task SubmitForm()
109 | {
110 | await GetAIResponseAsync();
111 | }
112 |
113 | private async Task GetAIResponseAsync()
114 | {
115 | if(_httpClient.BaseAddress is not null)
116 | {
117 | var uriBuilder = new UriBuilder(_httpClient.BaseAddress);
118 | uriBuilder.Path = "/api/AIOnnxHttpTrigger";
119 |
120 | if(!string.IsNullOrEmpty(formModel.URL) && !string.IsNullOrWhiteSpace(formModel.URL))
121 | {
122 | var query = HttpUtility.ParseQueryString(uriBuilder.Query);
123 |
124 | query["img"] = formModel.URL;
125 |
126 | uriBuilder.Query = query.ToString();
127 | }
128 |
129 | var builtUri = uriBuilder.ToString();
130 |
131 | Console.WriteLine($"builtUri: {builtUri}");
132 |
133 | @* responseText = uriBuilder.ToString(); *@
134 |
135 | var response = await _httpClient.GetStringAsync(builtUri);
136 |
137 | responseText = response;
138 | }
139 | }
140 | }
141 |
142 | ```
143 | 2. Add package.json in the apps folder, including the following content
144 |
145 | ```json
146 |
147 | {
148 | "name": "swa-blazorandfunc-demo",
149 | "version": "1.0.0",
150 | "scripts": {
151 | "start": "swa start http://localhost:5074 --api-location http://localhost:7071"
152 | },
153 | "keywords": [],
154 | "author": "",
155 | "license": "ISC",
156 | "main": "index.js",
157 | "description": ""
158 | }
159 |
160 |
161 | ```
162 |
163 | 3. In the terminal environment, add three different terminals
164 |
165 | Run the Blazor wasm project in one terminal and the Azure Functions project in one terminal to make sure they run long term
166 |
167 |
168 |
169 | 4. In the last terminal, run under the apps folder
170 |
171 | ```bash
172 |
173 | npm start
174 |
175 | ```
176 |
177 |
178 |
179 |
180 | 5. Open it in the browser and you can see it, copy the address, here is mine, everyone will be different
181 |
182 | https://kinfey-turbo-yodel-wjpvpxg7xr7h9wr7-4280.preview.app.github.dev/
183 |
184 | and replace in this sentence in Blazor wasm Program.cs
185 |
186 | ```bash
187 |
188 | builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://kinfey-turbo-yodel-wjpvpxg7xr7h9wr7-4280.preview.app.github.dev/") });
189 |
190 | ```
191 |
192 | 6. Run again, enter the address to get the result
193 |
194 |
195 |
196 | Of course, you can quickly deploy to Azure, so I won't show them one by one here.
197 |
198 | ## **Related Resources**
199 |
200 | 0. Sign up your GitHub https://github.com/signup
201 |
202 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
203 |
204 | 2. Learn about Static Web App https://learn.microsoft.com/en-us/azure/static-web-apps/overview
205 |
206 |
--------------------------------------------------------------------------------
/EN/02.CloudNativeInDapr.md:
--------------------------------------------------------------------------------
1 | ## **Building a Dapr app via GitHub Codespaces**
2 |
3 | Please fork my project https://github.com/kinfey/LearnCloudNative and open the project through local Visual Studio Code GitHub Codespaces (please install the GitHub Codespaces plugin in local Visual Studio Code)
4 |
5 | 1. Install Dapr environment https://docs.dapr.io/getting-started/install-dapr-cli/
6 |
7 | 2. Create two terminals
8 |
9 | Runs under AIFuncApp
10 |
11 | ```bash
12 |
13 | dapr run --app-id ai-sdk --components-path ../components/ --app-port 6001 -- uvicorn main:app --port 6002
14 |
15 | ```
16 |
17 | Running under BlazorUI.App
18 |
19 | ```bash
20 |
21 | dapr run --app-id ai-sdk --components-path ../components/ --app-port 6001 -- uvicorn main:app --port 6002
22 |
23 | ```
24 |
25 | Start the view with a browser to get the following results
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/EN/02.CloudNativeInWasmEdge.md:
--------------------------------------------------------------------------------
1 | # **Develop a WasmEdge application with Rust**
2 |
3 | There are many different technologies and concepts in the field of cloud native development, and WebAssbembly is one of them.
4 |
5 | ## **What is WebAssembly**
6 |
7 | WebAssembly is a new type of code that runs in modern web browsers and offers new performance features and effects. It is not designed for hand-written code but to provide an efficient compilation target for low-level source languages such as C, C++, and Rust.
8 |
9 | For web platforms, this has huge implications - it provides a way for client apps to run code written in multiple languages on the web at near-native speed; possible.
10 |
11 | Rust can be used to write Web Assbemly applications. In this series, we will use Rust to write WasmEdge applications in combination with GitHub Codespaces.
12 |
13 |
14 | ## **What is WasmEdge**
15 |
16 | WasmEdge is a lightweight, high-performance, and scalable WebAssembly runtime for cloud-native, edge computing, and decentralized applications. It powers serverless applications, embedded functions, microservices, smart contracts, and IoT devices. WasmEdge is currently a CNCF (Cloud Native Computing Foundation) sandbox project.
17 |
18 | The WasmEdge Runtime provides a well-defined execution sandbox for the WebAssembly bytecode programs it contains. The runtime provides isolation and protection for operating system resources (eg, file systems, sockets, environment variables, processes) and memory spaces.
19 |
20 | Next, let's learn how to develop WasmEdge applications through Rust through GitHub Codespaces. If you want to know Rust first, you can jump to Learn Rust in GitHub Codespaces related information
21 |
22 |
23 | ### **Sample 1:WasmEdge environment**
24 |
25 | Regarding the environment construction of WasmEdge, we need stronger support. Unlike the previous steps, we rely on the Ubuntu devcontainer of GitHub Codespaces here.
26 |
27 | 1. Select the blank template of GitHub Codespaces to create
28 |
29 |
30 |
31 | 2. Add devcontainer via CMD + Shift + P - macOS or Ctrl + Shit + P - Windows/Linux
32 |
33 |
34 |
35 | Choose Ubuntu's devcontainer
36 |
37 |
38 |
39 | and select Ubuntu 22.04 jammy
40 |
41 |
42 |
43 | 1. Select the relevant devcontainer components, add Rust, Azure CLI, Docker, etc. as required
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | 4. Add the corresponding extensions for Rust development, Azure development and Docker development to devcontainers.json. Rust development includes rust-analyzer, crates, CodeLLDB / Azure development includes Azure Tools / Docker related Docker components / Thunder Client for network development
52 |
53 | the complete devcontainer.json is as follows:
54 |
55 | ```json
56 |
57 | {
58 | "name": "Ubuntu",
59 | "image": "mcr.microsoft.com/devcontainers/base:jammy",
60 | "features": {
61 | "ghcr.io/devcontainers/features/azure-cli:1": {},
62 | "ghcr.io/devcontainers/features/docker-in-docker:2": {},
63 | "ghcr.io/devcontainers/features/rust:1": {}
64 | },
65 | "customizations": {
66 | "vscode": {
67 | "extensions": [
68 | "serayuzgur.crates",
69 | "vadimcn.vscode-lldb",
70 | "ms-vscode.vscode-node-azure-pack",
71 | "ms-azuretools.vscode-docker",
72 | "rust-lang.rust-analyzer",
73 | "rangav.vscode-thunder-client"
74 | ]
75 | }
76 | }
77 | }
78 |
79 | ```
80 |
81 | 5. Rebuild devcontainer
82 |
83 | 6. Close codespaces, change machine type - 4-core CPU, 8 GB memory, 32 GB hard disk
84 |
85 |
86 |
87 | 7. Go to your codepspaces
88 |
89 | 8. You can enter the following command to check whether the environment is installed successfully
90 |
91 | ```bash
92 |
93 | az --version
94 | docker --version
95 | rustc --version
96 | cargo --version
97 | rustup --version
98 |
99 | ```
100 |
101 |
102 |
103 | 9. Install wasmedge sdk in terminal
104 |
105 |
106 | ```bash
107 |
108 | curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
109 |
110 | source /home/vscode/.bashrc
111 |
112 | ```
113 |
114 | 10. Create a simple wasm application and see
115 |
116 | input these commands in terminal
117 |
118 |
119 | ```bash
120 |
121 |
122 | cd hellowasmedge
123 |
124 | rustup target add wasm32-wasi
125 |
126 | cargo build --target wasm32-wasi
127 |
128 | wasmedge target/wasm32-wasi/debug/hellowasmedge.wasm
129 |
130 | ```
131 |
132 | run your wasmedge application
133 |
134 |
135 |
136 |
137 |
138 | ### **Sample 2: Using Tensorflow lite model with Wasmedge**
139 |
140 | Remarks: If you haven't built the environment of Sample 1, please go back to Sample 1 to complete the relevant exercises.
141 |
142 | In Sample 1, we installed WasmEdge SDK, and in Sample2, we compiled WasmEdge SDK using source code because we are based on Tensorflow Lite, so we need to add corresponding components
143 |
144 | 1. Through the terminal, execute the following commands to prepare for environment compilation
145 |
146 |
147 | ```bash
148 |
149 | sudo apt-get update
150 | sudo apt-get install -y software-properties-common libboost-all-dev ninja-build
151 | sudo apt-get install -y llvm-14-dev liblld-14-dev clang-14
152 | sudo apt-get install -y gcc g++ cmake
153 | sudo apt-get install -y libssl-dev pkg-config gh vim
154 |
155 | ```
156 |
157 | 2. Create a tools directory in the root directory
158 |
159 | ```bash
160 |
161 | mkdir tools
162 |
163 | cd tools
164 |
165 | git clone https://github.com/WasmEdge/WasmEdge.git
166 |
167 | mkdir -p build && cd build
168 |
169 | cmake -DCMAKE_BUILD_TYPE=Release -DWASMEDGE_PLUGIN_WASI_NN_BACKEND="TensorflowLite" .. && make -j2
170 |
171 | cmake --install .
172 |
173 |
174 | ```
175 |
176 | 3. Go back to the tools directory and continue executing
177 |
178 | ```bash
179 |
180 | curl -s -L -O --remote-name-all https://github.com/second-state/WasmEdge-tensorflow-deps/releases/download/0.11.2/WasmEdge-tensorflow-deps-TFLite-0.11.2-manylinux2014_x86_64.tar.gz
181 |
182 | tar -zxf WasmEdge-tensorflow-deps-TFLite-0.11.2-manylinux2014_x86_64.tar.gz
183 |
184 | rm -f WasmEdge-tensorflow-deps-TFLite-0.11.2-manylinux2014_x86_64.tar.gz
185 |
186 | mv libtensorflowlite_c.so /usr/local/lib
187 |
188 | ```
189 |
190 | 4. Edit ~/.bashrc through vim and add the following command line
191 |
192 | export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
193 | export WASMEDGE_PLUGIN_PATH=/usr/local/lib/wasmedge
194 |
195 | 5. clone https://github.com/lokinfey/WasmEdgeGitHubSpaceDemo
196 |
197 | 6. Run
198 |
199 | ```bash
200 |
201 | cd tfdemo
202 |
203 | cargo build --target=wasm32-wasi --release
204 |
205 | wasmedgec target/wasm32-wasi/release/tfdemo.wasm tfdemo.wasm
206 |
207 | ```
208 |
209 | 1. Execute the test results in the terminal
210 |
211 | ```bash
212 |
213 | wasmedge --dir .:. tfdemo.wasm model.tflite test.png
214 |
215 | ```
216 |
217 |
218 |
219 |
220 | ### **Sample 3: Calling Wasmedge on Azure Function**
221 |
222 | Please refer to my AzureFunctionWasmDemo https://github.com/kinfey/AzureFunctionWasmDemo/blob/codespace-kinfey-musical-pancake-jwvrv9q5776hqqq6/README_EN.md
223 |
224 | Congratulations, you have completed samples of WasmEdge in GitHub Codespaces.
225 |
226 |
227 | ## **Resources**
228 |
229 | 0. Sign up your GitHub https://github.com/signup
230 |
231 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
232 |
233 | 2. Learn about Rust https://learn.microsoft.com/en-us/training/paths/rust-first-steps/
234 |
235 | 3. Learn to build Azure Functions with Rust https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-other?tabs=rust
236 |
237 | 4. Learn Wasmedge https://wasmedge.org/book/en/
238 |
239 | 5. WasmEdge NNI plugin compilation related content https://wasmedge.org/book/en/contribute/build_from_src/plugin_wasi_nn.html#build-wasmedge-with-wasi-nn-tensorflow-lite-backend
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
--------------------------------------------------------------------------------
/EN/03.MLEnv.md:
--------------------------------------------------------------------------------
1 | # **Build machine learning on GitHub Codespaces**
2 |
3 | On GitHub Codespaces, you can build machine learning environments based on existing templates or according to your own needs with blank template.
4 |
5 |
6 |
7 | Of course, this is an environment that does not include a GPU. If you need a GPU, you must apply for it additionally. This already includes Python, and related libraries.
8 |
9 | Or I prefer to build the environment by myself, I prefer to use empty templates to build my own environment, such as .NET machine learning, such as libraries with Azure, etc.
10 |
11 |
12 | To build a machine learning environment by yourself, the required steps are as follows:
13 |
14 | **1. Select the "Miniconda (Python 3)" project**
15 |
16 |
17 | **2. And switch the machine configuration to 4-core CPU, 8GB memory, 32GB storage**
18 |
19 |
20 |
21 |
22 |
23 | **3. Add support for different SDKs and locales**
24 |
25 | Azure related such as Azure CLI
26 |
27 |
28 | After successful, you can refer to the following devcontainer.json configuration
29 |
30 | ```json
31 |
32 | {
33 | "name": "Miniconda (Python 3)",
34 | "build": {
35 | "context": "..",
36 | "dockerfile": "Dockerfile"
37 | },
38 | "features": {
39 | "ghcr.io/devcontainers/features/azure-cli:1": {},
40 | "ghcr.io/devcontainers/features/node:1": {}
41 | }
42 |
43 |
44 | }
45 |
46 | ```
47 |
48 |
49 | **5. Add the extensions you need directly to the container**
50 |
51 | Azure Machine Learning plugin, which can be directly added to devcontainer.json through extensions settings
52 |
53 |
54 |
55 |
56 |
57 | **6. Additional environment configuration**
58 |
59 | You can add extensions for Azure ML CLI v2
60 |
61 | Complete related calls by adding execution scripts under devcontainer.json
62 |
63 | ```json
64 |
65 |
66 | "onCreateCommand": "az extension add -n ml",
67 |
68 | ```
69 |
70 | 这是最后完成的 devcontainer.json
71 |
72 | ```json
73 |
74 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
75 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
76 | {
77 | "name": "Miniconda (Python 3)",
78 | "build": {
79 | "context": "..",
80 | "dockerfile": "Dockerfile"
81 | },
82 | "features": {
83 | "ghcr.io/devcontainers/features/azure-cli:1": {},
84 | "ghcr.io/devcontainers/features/node:1": {}
85 | },
86 | "onCreateCommand": "az extension add -n ml",
87 | "customizations": {
88 | "vscode": {
89 | "extensions": [
90 | "ms-toolsai.vscode-ai"
91 | ]
92 | }
93 | }
94 | }
95 |
96 | ```
97 |
98 |
99 | **6. Rebuild Your codespaces**
100 |
101 | ## **About the environment configuration of machine learning**
102 |
103 |
104 | 1. Python - You can complete different versions of conda installation through miniforge
105 |
106 | ```
107 |
108 | conda create -n pydev python=3.8.10
109 |
110 | ```
111 |
112 | 2. Python Library
113 |
114 | ```bash
115 |
116 | pip3 install numpy scipy scikit-learn matplotlib pandas pillow jupyterlab jupyter
117 |
118 | ```
119 |
120 | 3. Machine Learning / Deep Learning
121 |
122 |
123 | ```bash
124 |
125 | pip3 install tensorflow
126 |
127 | pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu
128 |
129 | ```
130 |
131 |
132 | ## **Resources**
133 |
134 |
135 | 0. Sign up your GitHub https://github.com/signup
136 |
137 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
138 |
139 | 2. Learn Tensorflow https://learn.microsoft.com/en-us/training/paths/tensorflow-fundamentals/
140 |
141 | 3. Learn PyTorch https://learn.microsoft.com/en-us/training/paths/pytorch-fundamentals/
142 |
143 |
144 |
145 |
--------------------------------------------------------------------------------
/EN/03.MLwithAzure.md:
--------------------------------------------------------------------------------
1 | # **Machine learning through Azure ML in GitHub Copespaces**
2 |
3 | Machine learning is inseparable from relevant hardware resources. After all, it needs to use a large amount of data and different computing power, so the assistance of the cloud is essential. We can use Azure ML to assist us in completing machine learning tasks.
4 |
5 |
6 | ## **What is Azure Machine Learning**
7 |
8 | Azure Machine Learning empowers data scientists and developers to build, deploy, and manage high-quality models faster and more confidently. It leverages industry-leading machine learning operations (MLOps), open source interoperability and integrated tools to accelerate time to value. This trusted platform is purpose-built for responsible AI applications in machine learning.
9 |
10 | With Azure Machine Learning Studio, you can manage all processes of machine learning more efficiently.
11 |
12 |
13 |
14 | You can manage your machine learning on GitHub codespaces. The relevant environment configuration has been completed in the previous environment configuration. You can directly access your machine learning environment. Of course, don’t forget to install it, azureml sdk
15 |
16 | ```bash
17 |
18 | pip3 install azure-ai-ml
19 |
20 | ```
21 |
22 | ## **Next, let's do a simple experiment**
23 |
24 | Please refer to https://learn.microsoft.com/en-us/azure/machine-learning/tutorial-azure-ml-in-a-day to build a notebook
25 |
26 |
27 |
28 |
29 | or use this link https://github.com/kinfey/AzureMLWithCodespace/blob/master/Notebooks/01.pytorch_demo.ipynb to test
30 |
31 |
32 | ## **Resources**
33 |
34 |
35 | 0. Sign up your GitHub https://github.com/signup
36 |
37 | 1. Learn about GitHub Codespaces https://github.com/features/codespaces
38 |
39 | 2. Learn Azure Machine Learning https://learn.microsoft.com/en-us/training/paths/use-azure-machine-learning-pipelines-for-automation/
--------------------------------------------------------------------------------
/EN/03.MLwithMLOps.md:
--------------------------------------------------------------------------------
1 | # **MLOps Development Tips**
2 |
3 | ## **What is MLOps?**
4 |
5 |
6 |
7 |
8 | MLOps is based on DevOps principles and practices that improve workflow efficiency. Examples include continuous integration, continuous delivery, and continuous deployment. MLOps applies these principles to the machine learning process with the goals of:
9 |
10 | Experiment and develop models faster.
11 | Deploy models to production faster.
12 | Quality assurance and end-to-end real-time tracking.
13 |
14 | ## **MLOps in Machine Learning**
15 |
16 | Machine learning provides the following MLOps capabilities:
17 |
18 | Create reproducible machine learning pipelines. Use machine learning pipelines to define repeatable and reusable steps for data preparation, training, and scoring processes.
19 |
20 | Create reusable software environments. Use these environments to train and deploy models.
21 |
22 | Register, package and deploy models from anywhere. You can also track the associated metadata required to use the model.
23 |
24 | Capture governance data for the end-to-end machine learning lifecycle. Recorded lineage information can include who published the model and why changes were made. Also includes when the model is deployed or used in production.
25 |
26 | Get notifications and alerts for events in the machine learning lifecycle. Examples of events include experiment completion, model registration, model deployment, and data drift detection.
27 |
28 | Monitor operations and machine learning-related issues in machine learning applications. Compare model inputs between training and inference. Explore model-specific metrics. Provides monitoring and alerting information about your machine learning infrastructure.
29 |
30 | Automate the end-to-end machine learning lifecycle using machine learning and Azure Pipelines. By using pipelines, the model can be updated frequently. New models can also be tested. New machine learning models can be rolled out continuously along with other applications and services.
31 |
32 |
33 | ## **GitHub + Azure ML = MLOps**
34 |
35 | GitHub is no longer just a code storage tool, it has many functions, such as GitHub Actions, GitHub Codespaces, and different project management. I really like GitHub, and as the most important development platform.
36 |
37 |
38 |
39 | From the previous chapter, we learned that Azure Machine Learning is a very good MLOps platform, and integrating GitHub can better maintain our machine learning projects.
40 |
41 | We can enter the world of MLOps by forking this project https://github.com/kinfey/AzureMLWithCodespace
42 |
43 | Specific operations (this example depends on the previous machine learning environment configuration, if you have not completed the configuration, please go back to the previous reference for related operations)
44 |
45 | 1. Data upload
46 |
47 | Download the data by executing download-data.py under the MLOps folder, and then upload it to your Azure ML platform,
48 |
49 | ```bash
50 |
51 | az ml data create --file data.yml --resource-group my-resource-group --workspace-name my-workspace
52 |
53 | ```
54 |
55 | 2. Go to GitHub and set different keys
56 |
57 |
58 |
59 |
60 | AML_WORKSPACE,AZURE_SUBSCRIPTION,RESOURCE_GROUP
61 |
62 |
63 |
64 | run this command
65 |
66 | ```bash
67 |
68 | az ad sp create-for-rbac --name $AML_SP \
69 | --role contributor \
70 | --scopes /subscriptions/SUBSCRIPTIONID/resourceGroups/my-resource-group \
71 | --sdk-auth
72 |
73 | ```
74 |
75 | Set AZURE_CREDENTIALS
76 |
77 | Once done, you can run
78 |
79 | 1. Here I want to explain that you can change each environment configuration. Azure ML is set based on the yml file. For details, you can refer to https://learn.microsoft.com/en-us/azure/machine- learning/reference-yaml-overview
80 |
81 | 2. We can now integrate data, training, and deployment with Azure ML through GitHub Actions
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | ## **Resources**
91 |
92 | 1. Learn about Azure ML v2 https://learn.microsoft.com/en-us/azure/machine-learning/concept-v2
93 |
94 | 2. Understand the use of GitHub Actions https://github.com/features/actions
95 |
96 |
--------------------------------------------------------------------------------
/EN/README.md:
--------------------------------------------------------------------------------
1 | # **GitHub Codespaces Workshop**
2 |
3 |
4 |
5 |
6 |
7 | Hi everyone, this is an online Workshop based on GitHub Codespaces. I hope to tell you how to use GitHub Codespaces by combining different content, how to combine GitHub Codespaces as your own platform for learning programming languages, and maintain your projects through GitHub Codespaces, etc.
8 |
9 | ## **GitHub Codespaces Introduction**
10 |
11 | Or you already know that GitHub Codespace is free for 60 hours a month from GitHub Universe 2022, but how to use GitHub Codespaces? How to configure your GitHub Codespaces environment? How do GitHub Codespaces work?
12 | Through the study of this chapter, you can master the following content
13 |
14 | 1. What are GitHub Codespaces?
15 | 2. How to use GitHub Codespaces?
16 | 3. Build your Python project with templates from GitHub Codespaces
17 | 4. Build your .NET project from GitHub Codespaces' blank template
18 |
19 | Study time: 40 minutes
20 |
21 | Related content: (Click to learn)
22 |
23 | ## **Learn programming languages with GitHub Codespace**
24 |
25 | Learning a programming language is a very important step on the road to programming. When we learn a programming language, we must install different environments including SDK, including some libraries, and plug-ins on the IDE. This takes up a lot of our time. Sometimes you will encounter all kinds of incompatible content. At this time, we can combine GitHub Codespaces to start an out-of-the-box development environment, so that as a beginner, you can quickly enter programming and experience the programming fun of different programming languages . By studying this chapter, you can master the following:
26 |
27 | 1. Learn .NET via GitHub Codespaces (click to learn)
28 | 2. Learn Java through GitHub Codespaces (click to learn)
29 | 3. Learn Python with GitHub Codespaces (updating)
30 | 4. Learn Rust with GitHub Codespaces (click to learn)
31 |
32 | Learning time: 180 min
33 |
34 | Level : 100
35 |
36 | ## **Do cloud-native applications through GitHub Codespaces**
37 |
38 | In GitHub Codespaces, you can directly develop and maintain cloud-native projects for enterprise development, and entrepreneurial teams can open up the development of any cloud platform through GitHub Codespaces. This series will use a few examples to guide you through the development and maintenance of cloud native projects through GitHub Codespaces.
39 |
40 | 1. Configure the cloud native development environment on GitHub Codespaces (click to learn)
41 | 2. Create an application combining Azure Static Web App and Azure Function through GitHub Codespaces (click to learn)
42 | 3. Build a Dapr application through GitHub Codespaces (click to learn)
43 | 4. Develop a WasmEdge application with Rust (click to learn)
44 |
45 | Learning time: 120 min
46 |
47 | Level : 200
48 |
49 | ## **Machine Learning via GitHub Codespaces**
50 |
51 | Machine learning is a very hot technology now. GitHub Codespaces brings very good technical support to machine learning. We can write machine learning well through GitHub Codespaces, and we can also connect with Azure Machine Learning Service so that everyone can make better use of it. Cloud resources to complete related machine learning projects. This series will introduce you how to use GitHub Codespaces to complete machine learning related knowledge.
52 |
53 | 1. Configure the machine learning development environment on GitHub Codespaces (click to learn)
54 | 2. The ability to get through Azure Machine Learning (click to learn)
55 | 3. Complete the development skills of MLOps (click to learn)
56 |
57 | Study time: 120 min
58 |
59 | Level : 200
60 |
61 | ## **Maintain your project via GitHub Codespaces (updating)**
--------------------------------------------------------------------------------
/EN/imgs/00/00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/00.png
--------------------------------------------------------------------------------
/EN/imgs/00/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/01.png
--------------------------------------------------------------------------------
/EN/imgs/00/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/02.png
--------------------------------------------------------------------------------
/EN/imgs/00/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/03.png
--------------------------------------------------------------------------------
/EN/imgs/00/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/04.png
--------------------------------------------------------------------------------
/EN/imgs/00/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/05.png
--------------------------------------------------------------------------------
/EN/imgs/00/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/00/logo.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/00.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/01.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/02.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/03.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/04.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/05.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/06.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/07.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/071.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/08.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/09.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/10.png
--------------------------------------------------------------------------------
/EN/imgs/01/CSharp/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/CSharp/11.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/00.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/01.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/02.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/03.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/04.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/041.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/041.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/05.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/06.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/061.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/07.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/071.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/08.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/09.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/10.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/11.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/12.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/13.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/14.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/15.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/16.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/17.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/18.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/19.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/20.png
--------------------------------------------------------------------------------
/EN/imgs/01/Java/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Java/21.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/01.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/02.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/03.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/04.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/05.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/06.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/07.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/08.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/09.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/10.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/11.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/12.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/13.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/14.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/15.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/16.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/17.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/18.png
--------------------------------------------------------------------------------
/EN/imgs/01/Rust/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/01/Rust/19.png
--------------------------------------------------------------------------------
/EN/imgs/02/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/01.png
--------------------------------------------------------------------------------
/EN/imgs/02/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/02.png
--------------------------------------------------------------------------------
/EN/imgs/02/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/03.png
--------------------------------------------------------------------------------
/EN/imgs/02/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/04.png
--------------------------------------------------------------------------------
/EN/imgs/02/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/05.png
--------------------------------------------------------------------------------
/EN/imgs/02/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/06.png
--------------------------------------------------------------------------------
/EN/imgs/02/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/07.png
--------------------------------------------------------------------------------
/EN/imgs/02/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/08.png
--------------------------------------------------------------------------------
/EN/imgs/02/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/09.png
--------------------------------------------------------------------------------
/EN/imgs/02/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/10.png
--------------------------------------------------------------------------------
/EN/imgs/02/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/11.png
--------------------------------------------------------------------------------
/EN/imgs/02/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/12.png
--------------------------------------------------------------------------------
/EN/imgs/02/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/13.png
--------------------------------------------------------------------------------
/EN/imgs/02/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/14.png
--------------------------------------------------------------------------------
/EN/imgs/02/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/15.png
--------------------------------------------------------------------------------
/EN/imgs/02/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/16.png
--------------------------------------------------------------------------------
/EN/imgs/02/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/17.png
--------------------------------------------------------------------------------
/EN/imgs/02/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/18.png
--------------------------------------------------------------------------------
/EN/imgs/02/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/19.png
--------------------------------------------------------------------------------
/EN/imgs/02/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/20.png
--------------------------------------------------------------------------------
/EN/imgs/02/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/21.png
--------------------------------------------------------------------------------
/EN/imgs/02/22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/22.png
--------------------------------------------------------------------------------
/EN/imgs/02/23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/23.png
--------------------------------------------------------------------------------
/EN/imgs/02/24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/24.png
--------------------------------------------------------------------------------
/EN/imgs/02/25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/02/25.png
--------------------------------------------------------------------------------
/EN/imgs/03/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/01.png
--------------------------------------------------------------------------------
/EN/imgs/03/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/02.png
--------------------------------------------------------------------------------
/EN/imgs/03/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/03.png
--------------------------------------------------------------------------------
/EN/imgs/03/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/04.png
--------------------------------------------------------------------------------
/EN/imgs/03/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/05.png
--------------------------------------------------------------------------------
/EN/imgs/03/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/06.png
--------------------------------------------------------------------------------
/EN/imgs/03/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/07.png
--------------------------------------------------------------------------------
/EN/imgs/03/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/08.png
--------------------------------------------------------------------------------
/EN/imgs/03/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/09.png
--------------------------------------------------------------------------------
/EN/imgs/03/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/03/10.png
--------------------------------------------------------------------------------
/EN/imgs/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/EN/imgs/logo.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # **GitHub Codespaces Workshop**
2 |
3 |