├── .DS_Store ├── .gitattributes ├── 00.Introduction.md ├── 01.LearnCSharp.md ├── 01.LearnJava.md ├── 01.LearnRust.md ├── 02.CloudNativeEnv.md ├── 02.CloudNativeInAzure.md ├── 02.CloudNativeInDapr.md ├── 02.CloudNativeInWasmEdge.md ├── 03.MLEnv.md ├── 03.MLwithAzure.md ├── 03.MLwithMLOps.md ├── EN ├── .DS_Store ├── .gitattributes ├── 00.Introduction.md ├── 01.LearnCSharp.md ├── 01.LearnJava.md ├── 01.LearnRust.md ├── 02.CloudNativeEnv.md ├── 02.CloudNativeInAzure.md ├── 02.CloudNativeInDapr.md ├── 02.CloudNativeInWasmEdge.md ├── 03.MLEnv.md ├── 03.MLwithAzure.md ├── 03.MLwithMLOps.md ├── README.md └── imgs │ ├── 00 │ ├── 00.png │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ └── logo.png │ ├── 01 │ ├── CSharp │ │ ├── 00.png │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 07.png │ │ ├── 071.png │ │ ├── 08.png │ │ ├── 09.png │ │ ├── 10.png │ │ └── 11.png │ ├── Java │ │ ├── 00.png │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 041.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 061.png │ │ ├── 07.png │ │ ├── 071.png │ │ ├── 08.png │ │ ├── 09.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 20.png │ │ └── 21.png │ └── Rust │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 07.png │ │ ├── 08.png │ │ ├── 09.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ └── 19.png │ ├── 02 │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ └── 25.png │ ├── 03 │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ └── 10.png │ └── logo.png ├── README.md ├── imgs ├── 00 │ ├── 00.png │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ └── logo.png ├── 01 │ ├── CSharp │ │ ├── 00.png │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 07.png │ │ ├── 071.png │ │ ├── 08.png │ │ ├── 09.png │ │ ├── 10.png │ │ └── 11.png │ ├── Java │ │ ├── 00.png │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 041.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 061.png │ │ ├── 07.png │ │ ├── 071.png │ │ ├── 08.png │ │ ├── 09.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 20.png │ │ └── 21.png │ └── Rust │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 07.png │ │ ├── 09.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ └── 19.png ├── 02 │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ └── 25.png ├── 03 │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ └── 10.png └── logo.png └── pdf ├── .DS_Store ├── 00.Introduction.pdf ├── 01.LearnCSharp.pdf ├── 01.LearnJava.pdf ├── 01.LearnRust.pdf ├── 02.CloudNativeEnv.pdf ├── 02.CloudNativeInAzure.pdf ├── 02.CloudNativeInDapr.pdf ├── 02.CloudNativeInWasmEdge.pdf ├── 03.MLEnv.pdf ├── 03.MLwithAzure.pdf └── 03.MLwithMLOps.pdf /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/.DS_Store -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /00.Introduction.md: -------------------------------------------------------------------------------- 1 | # **GitHub Codespaces 介绍** 2 | 3 | 4 | 5 | 6 | GitHub Codespaces 可以让你在 GitHub 不仅可以像往常一样维护你的代码,现在还可以编译你的项目,让你可以直接通过云端直接完成你的研发任务以及开源项目的内容。通过 GitHub Codespaces 你可以在任意设备上,随时随地进行编程语言的学习,项目研发,以及代码维护。最大的优势是,你不用再为学习或完成一个应用,而花任何时间配置不同的环境,而且可以快速在任何地方任何设备维护你的项目。在 GitHub Universe 2022 上,每位 GitHub 用户都可以每个月独享 60 小时的使用时间。 7 | 8 | ## **什么是 GitHub Codespaces** 9 | 10 | GitHub Codespaces 是托管在云中的开发环境。 您可以通过将配置文件提交到您的 Repo(通常称为配置即代码)来为 GitHub Codespaces 自定义项目,这会为项目的所有用户创建可重复的 GitHub Codespaces 配置。每个代码空间都在 GitHub 托管的虚拟机上运行。 您可以根据需要的资源选择要使用的机器类型。 提供需要提供各种类型的机器。您可以从浏览器、Visual Studio Code、JetBrains Gateway 应用程序或使用 GitHub CLI 连接到代码空间。 11 | 12 | 13 | 14 | GitHub Codespaces 面向个人,也面向企业开发。只要你的设备有浏览器就可以使用 GitHub Codespaces ,让你更高效地编写和管理你的代码。 15 | 16 | ## **如何使用 GitHub Codespaces** 17 | 18 | ### **场景一** 19 | 20 | 登录你的 GitHub ,在上方导航栏,选择 "Codespaces" ,就可以进入你的 Codespaces 环境。 21 | 22 | 你可以基于不同模版,创建你不同的应用,现阶段模版还是有限,主要针对 Python , Ruby , 以及 JavaScript 技术上,当然你也可以通过空模版去搭建基于不同编程语言的不同应用场景的解决方案 23 | 24 | 25 | 26 | ### **场景二** 27 | 28 | 如果你希望针对一个 GitHub 上的 Repo , 也可以 fork 后,选择 Codespaces ,进入相对应的环境 29 | 30 | 31 | 32 | ### **场景三** 33 | 34 | 你可以通过本地的 Visual Studio Code 以及 Jetbrains 的相关 IDE ,启用你的 Codespaces 35 | 36 | 37 | 38 | 39 | ## **关于 GitHub Codespaces 的环境设置** 40 | 41 | ### **云端硬件** 42 | 43 | 在 GitHub Codespaces 上有不同的硬件,你可以根据自己的需求构建更好的硬件 44 | 45 | 46 | 47 | 你可以根据项目的变化去修改相关的内容 48 | 49 | ### **关于 Dev container** 50 | 51 | 当您在 GitHub Codespaces 中工作时,您工作的环境是使用托管在虚拟机上的开发容器或开发容器创建的。 52 | 53 | 开发容器或开发容器是专门配置为提供功能齐全的开发环境的 Docker 容器。 每当您在代码空间中工作时,您就是在虚拟机上使用开发容器。 54 | 55 | 您可以为存储库配置开发容器,以便为该存储库创建的代码空间为您提供量身定制的开发环境,并配备处理特定项目所需的所有工具和运行时。 如果您未在存储库中定义配置,则 GitHub Codespaces 将使用默认配置,其中包含您的团队在开发项目时可能需要的许多常用工具。 56 | 57 | 开发容器的配置文件包含在存储库的 .devcontainer 目录中。 您可以使用 Visual Studio Code 为您添加配置文件。 您可以从各种项目类型的预定义配置中进行选择。 您可以在没有进一步配置的情况下使用它们,或者您可以编辑配置以改进它们生成的开发环境。 58 | 59 | devcontainer.json 里面可以添加不同的语言环境,不同的 SDK ,以及不同云端的支持,以及端口配置,还可以设定你项目所需要的不同插件。你还可以根据不同需要去定义配置更多的内容。 60 | 61 | 62 | ### **通过模版开发不同的应用** 63 | 64 | 现在通过模版你可以快速创建 Rudy,Python,以及 JavaScript 技术栈的相关内容,这里以一个 Flask 应用为例,来创建一个通过 GitHub Codespaces 维护的应用。 65 | 66 | 67 | 68 | 69 | ### **通过空模版来搭建编程环境** 70 | 71 | 如果你是 .NET , Java , Rust 或者 Go 编程语言的用户,你也可以通过空模版的方式去完成相关的编程语言学习。这里我以 .NET 为例,来和大家说说如何构建一个 .NET 项目。 72 | 73 | 具体请参考 点击进入了解更多 74 | 75 | 76 | ## **相关资源** 77 | 78 | 79 | 0. 注册你的 GitHub https://github.com/signup 80 | 81 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces 82 | 83 | 2. 学习 Flask 的相关知识 https://learn.microsoft.com/en-us/training/modules/python-flask-build-ai-web-app/ 84 | 85 | 3. 学习 .NET 的相关知识 https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/ 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /01.LearnCSharp.md: -------------------------------------------------------------------------------- 1 | # **在 GitHub Codespaces 上学习 C#** 2 | 3 | .NET 在 2016 年开源后,成为了一个跨应用场景,跨平台的技术。你可以通过 C# 编写网页,桌面应用,游戏,物联网,移动应用,云计算,大数据等应用。我们可以通过 GitHub Codespaces 学习与 .NET 相关的内容。本次练习我们通过 GitHub Codespaces 构建简单的控制台,用,以及云计算的应用。 4 | 5 | ## **场景一:构建控制台应用** 6 | 7 | 1. 在 GitHub Codespaces 上选择空模版,构建一个 GitHub Codespaces 的模版 8 | 9 |
10 | 11 |
12 | 13 | 2. 如果你是 Windows / Linux 用户 ,请使用 Ctrl + Shift + P ,如果你是 macOS 用户请使用 Cmd + Shift + P,选择 Codespaces: Configure Dev Container Features... 14 | 15 |
16 | 17 |
18 | 19 | 3. 选择 C#(.NET)devcontainer 20 | 21 | 22 |
23 | 24 |
25 | 26 | 4. 选择 .NET 7 27 | 28 |
29 | 30 |
31 | 32 | 5. 设置成功后,选择 Rebuild 33 | 34 | 6. 在打开的 GitHub Codespaces 上,打开控制台,输入以下命令,查看 .NET SDK 的相关信息 35 | 36 | ```bash 37 | 38 | dotnet --version 39 | 40 | ``` 41 | 42 |
43 | 44 |
45 | 46 | 7. 在终端中,输入以下命令创建一个最简单的 .NET 控制台命令 47 | 48 | 49 | ```bash 50 | 51 | dotnet new console -o HelloWorldApp 52 | 53 | ``` 54 | 55 | 56 | 8. 在 GitHub Codespaces 上选择 Run and Debug ,选择 .NET 5+ and .NET Core , 直接运行 57 | 58 | 59 |
60 | 61 |
62 | 63 | 9. 结束 Debug ,可以设置断点,再运行看看 64 | 65 |
66 | 67 |
68 | 69 | 这就是你的第一个在 GitHub Codespaces 构建的 .NET 应用程序,你可以继续进入下一个场景的学习。 70 | 71 | 72 | ## **场景二:在 GitHub Codespaces 学习 C#** 73 | 74 | 作为入门者我们需要学习 C# 的语法,传统的语法学习我们需要 IDE ,但是现在我们可以通过 Notebook 进行 C# 编程的学习 75 | 76 | 0. 创建一个 GitHub Codespaces , 通过空模版创建一个 .NET 6 的开发环境 77 | 78 | 1. 在 GitHub Codespaces 的 Extension 查找 Polyglot Notebooks ,并安装 79 | 80 | 81 |
82 | 83 |
84 | 85 | 86 | 2. 打开 GitHub Codespaces 的终端,输入以下命令 87 | 88 | ```bash 89 | 90 | git clone https://github.com/kinfey/csharp-notebooks.git 91 | 92 | ``` 93 | 94 | 3. 选择目录 csharp-notebooks 下的子目录 csharp-101 95 | 96 | 97 |
98 | 99 |
100 | 101 | 4. 选择 02-The Basics of Strings.ipynb ,选择 Run All 按钮 102 | 103 | 104 |
105 | 106 |
107 | 108 | 你现在可以通过交互式的方式学习 C# 编程语言,比过往需要配置 IDE 的方式更加简洁了。希望结合 CSharp 101 打开你的 C# 编程之路。 109 | 110 | 111 | ## **场景三:构建一个 Minimal API 的 GitHub Codespaces 环境** 112 | 113 | 如果你学习完 C# 编程语言,你希望做一些微服务的工作,你可以通过 .NET 构建 Minmal API 。 114 | 115 | 1. 创建一个 GitHub Codespaces , 通过空模版创建一个 .NET 7 的开发环境 116 | 117 | 2. 通过命令行构建一个 Minimal API 118 | 119 | ```bash 120 | 121 | dotnet new web -o DemoAPI 122 | 123 | ``` 124 | 125 | 3. 直接通过 Debug 运行 126 | 127 | 4. 这里需要把 Port 设置为 Public 128 | 129 | 130 |
131 | 132 |
133 | 134 | 5. 你也可以安装 Thunder Client 的插件直接用 localhost 直接访问 135 | 136 | 137 |
138 | 139 |
140 | 141 | ## **相关资源** 142 | 143 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces 144 | 145 | 2. 学习 C# https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/ 146 | 147 | 3. C# 101 学习手册 https://github.com/kinfey/csharp-notebooks 148 | 149 | 4. 学习 .NET Minimal API https://learn.microsoft.com/en-us/aspnet/core/tutorials/min-web-api?view=aspnetcore-7.0&tabs=visual-studio 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /01.LearnJava.md: -------------------------------------------------------------------------------- 1 | # **在 GitHub Codespaces 上学习 Java** 2 | 3 | Java 是非常古老的编程语言,在现代很多场景都在使用 ,如果你是一名 Java 初哥,你一定会为环境变量的设置烦恼,配置 JDK 等对于初学者都是非常困难的。 GitHub Codespaces 可以为你节省环境配置的所有时间,让你可以快速进入 Java 的学习当中。 4 | 5 | 下面是几个场景的例子,希望能给学习 Java 的初学者一些指引 6 | 7 | ## **场景一:在 GitHub Codespaces 上快速启用 Java 开发环境** 8 | 9 | 1. 在 GitHub Codespaces 上选择空模版 10 | 11 | 12 |
13 | 14 |
15 | 16 | 2. 如果你是 Windows / Linux 用户 ,请使用 Ctrl + Shift + P ,如果你是 macOS 用户请使用 Cmd + Shift + P,选择添加 Add Dev Container Configuration Files 17 | 18 |
19 | 20 |
21 | 22 | 3. 在搜索框选择 Java 23 | 24 |
25 | 26 |
27 | 28 | 并选择 Java 17 的版本 29 | 30 |
31 | 32 |
33 | 34 | 你可以选择基于 Maven 或者 Gradle 的方式,这里我选择 Maven 35 | 36 |
37 | 38 |
39 | 40 | 我们还需要添加 Docker from Docker 给后面场景使用 41 | 42 | 43 |
44 | 45 |
46 | 47 | 4. 选择右下方出现的 Rebuild 48 | 49 |
50 | 51 |
52 | 53 | 5. 稍等片刻就可以进入新创建的 Java 开发环境,你可以从 GitHub Codespaces 上的插件列表看到,把最基本 Java 开发的组件都已经配置好了 54 | 55 |
56 | 57 |
58 | 59 | 6. 在 GitHub Codespaces 启动终端,执行以下命令,输入以下命令,你可以看到相关内容 60 | 61 | ```bash 62 | 63 | java --version 64 | 65 | ``` 66 | 67 |
68 | 69 |
70 | 71 | 72 | ```bash 73 | 74 | docker --version 75 | 76 | ``` 77 | 78 |
79 | 80 |
81 | 82 | 83 | 84 | ## **场景二:构建 Spring Boot 上的应用** 85 | 86 | 基于场景一的开发环境,你可以通过 Spring Boot 构建你的微服务,也是最常用的方式,这和我们在 Visual Studio Code 构建 Java 的方式是一样的。 87 | 88 | 1. 如果你是 Windows / Linux 用户 ,请使用 Ctrl + Shift + P ,如果你是 macOS 用户请使用 Cmd + Shift + P,选择 Java : Create Java Project 89 | 90 | 91 |
92 | 93 |
94 | 95 | 2. 选择创建 Spring Boot 项目 96 | 97 |
98 | 99 |
100 | 101 | 如果你是第一次使用,会安装 Spring Boot 的支持插件,完成后需要重复第一,第二步的操作 102 | 103 |
104 | 105 |
106 | 107 | 选择 Spring Boot 的版本 108 | 109 |
110 | 111 |
112 | 113 | 语言 Java 114 | 115 |
116 | 117 |
118 | 119 | 添加好命名空间,以及确认打包方式,这里选择 Jar 120 | 121 |
122 | 123 |
124 | 125 | 选择好对应的版本,如 17 ,以及所需要的 Java Spring Boot 的功能,这里需要选择 Spring Web 126 | 127 |
128 | 129 |
130 | 131 | 选择好保存的文件夹,我会在 Codespace 上添加一个 app 作为项目保存 132 | 133 |
134 | 135 |
136 | 137 | 3. 在 src/main/java/com/ghcsdemo/springbootdemo 中添加一个 APIController.java 文件,包括以下内容 138 | 139 | 140 | ```java 141 | 142 | package com.ghcsdemo.springbootdemo; 143 | 144 | import org.springframework.web.bind.annotation.PathVariable; 145 | import org.springframework.web.bind.annotation.RequestMapping; 146 | import org.springframework.web.bind.annotation.RequestMethod; 147 | import org.springframework.web.bind.annotation.RestController; 148 | 149 | @RestController 150 | @RequestMapping("api") 151 | public class APIController { 152 | 153 | 154 | @RequestMapping(value = "/getInfo/{name}",method = RequestMethod.GET) 155 | public String getInfo(@PathVariable String name){ 156 | return "Hi ," + name ; 157 | } 158 | 159 | 160 | 161 | } 162 | 163 | ``` 164 | 165 | 4. 选择 Debug 进行运行 166 | 167 | 168 | 5. 你可以直接通过把 Port 8080 显示出来,进行结果查看,也可以通过 169 | 170 |
171 | 172 |
173 | 174 | 也可以通过安装 Thunder Client 进行内部检测 175 | 176 |
177 | 178 |
179 | 180 | 6. 把应用进行打包 181 | 182 | 183 | ```bash 184 | 185 | ./mvnw package 186 | 187 | ``` 188 | 189 | 7. 可以在 GitHub Codespaces 的终端上直接运行刚打包好的 jar 190 | 191 | 192 |
193 | 194 |
195 | 196 | 197 | 198 | ## **场景三:构建基于 Spring Boot 容器的应用** 199 | 200 | 我们知道容器化是现在必不可少的云原生方式,微服务通过容器快速部署到云端。 Spring Boot 应用可以快速部署到容器上,在 GitHub Codespaces 也可以支持容器的封装。 201 | 202 | 1. 在 springbootdemo 文件夹中添加 Dockerfile 203 | 204 | ```yml 205 | 206 | FROM openjdk:17-alpine 207 | ARG JAR_FILE=target/*.jar 208 | COPY ${JAR_FILE} app.jar 209 | ENTRYPOINT ["java","-jar","/app.jar"] 210 | 211 | ``` 212 | 213 | 2. 在终端上运行以下命令 214 | 215 | 216 | ```bash 217 | 218 | docker build -t kinfey/springdemo . 219 | 220 | docker run -p 8080:8080 kinfey/springdemo 221 | 222 | 223 | ``` 224 | 225 | 3. 非常简单地完成了容器应用的部署 226 | 227 | 228 |
229 | 230 |
231 | 232 | ## **相关资源** 233 | 234 | 235 | 0. 注册你的 GitHub https://github.com/signup 236 | 237 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces 238 | 239 | 2. 学习 Java 的相关知识 https://learn.microsoft.com/zh-cn/azure/developer/java/ 240 | 241 | 3. 学习 Spring Boot v3 的相关知识 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes 242 | 243 | 4. 部署 Spring 应用到容器 https://spring.io/guides/gs/spring-boot-docker/ 244 | 245 | 246 | -------------------------------------------------------------------------------- /01.LearnRust.md: -------------------------------------------------------------------------------- 1 | # **在 GitHub Codespaces 上学习 Rust** 2 | 3 | 在新一代编程语言上, Rust 是非常受欢迎的。通过 Rust 你可以更高效地写出更可靠的软件。Rust 可以应用在云原生,系统管理,以及 Web 3 ,物联网以及加密货币等领域。现在不少公司都把 Rust 作为 C/C++ 的一种安全替代语言。你可以通过 GitHub Codespaces 快速搭建你的 Rust 学习环境。 4 | 5 | 以下是三个场景 6 | 7 | ## **场景一:GitHub Codespaces 搭建 Rust 开发环境** 8 | 9 | 1. 通过空模版创建 GitHub Codespaces 10 | 11 | 12 | 13 | 2. 通过 CMD + Shift + P - macOS / Ctrl + Shift + P - Linux / Windows 创建 devcontainer.json 14 | 15 | 16 | 17 | 选择 Rust devcontainers 18 | 19 | 20 | 21 | 3. 添加你需要的一些功能,如 Azure CLI 等 22 | 23 | 24 | 25 | 4. Rebuild 你的 GitHub Codespaces 26 | 27 | 28 | 29 | 5. 你可以通过输入以下命令行查看 Rust 环境的设置 30 | 31 | ```bash 32 | 33 | cargo --version 34 | 35 | rustc --version 36 | 37 | ``` 38 | 39 | 40 | 41 | 恭喜你,你已经完成了 GitHub Codespaces 上的 Rust 环境设置。 42 | 43 | 44 | 45 | ## **场景二:在 GitHub Codespaces 调试 Rust 应用** 46 | 47 | 我们延续使用场景一的环境,如果你没有完成场景一,请跳转到场景一,完成环境配置。 48 | 49 | 1. 在 GitHub Codespaces 上打开 Terminal 通过 cargo 创建一个 Rust 项目 50 | 51 | ```bash 52 | 53 | cargo new rustdemoapp 54 | 55 | ``` 56 | 57 | 2. 进入 rustdemoapp 文件夹 , 输入如下命令,执行你人生中第一个 Rust 程序 58 | 59 | ```bash 60 | 61 | cargo build 62 | 63 | cargo run 64 | 65 | ``` 66 | 67 | 68 | 69 | 70 | 3. 在 GitHub Codespaces 上打开 src/main.rs , 并设置断点 71 | 72 | 73 | 74 | 75 | 4. 选择 Debug 后进入 launch.json , 添加如下路径 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. 点击 Debug , 就可以进入调试 99 | 100 | 101 | 102 | 103 | 104 | ## **场景三:在 GitHub Codespaces 用 Rust 开发 Azure Functions** 105 | 106 | 我们继续延续场景一,所搭建的 GitHub Codespaces 来完成相关的学习,如果你没有完成场景一的搭建,请回到场景一来完成相关的环境。 107 | 108 | 我们知道 Rust 可以完成云原生的相关操作,所以你可以通过 Rust 完成不同的云原生功能开发,这里介绍一下如何通过 Rust 完成 Azure Functions 的开发。 109 | 110 | 0. 删除场景二的文件夹 rustdemoapp 111 | 112 | 1. 设置 GitHub Codespaces 的环境,转换为 4 核 CPU , 8 GB 内存, 32 GB 存储 113 | 114 | 115 | 116 | 2. 在 GitHub Codespaces 添加与 Azure 相关的组件 , 选择添加到 devcontainer.json 里面 ,并 Rebuild 开发环境 117 | 118 | 119 | 120 | 3. 选择登录你的 Azure Portal 121 | 122 | 123 | 124 | 登录成功后,如下 125 | 126 | 127 | 128 | 129 | 4. 在命令行安装与 Azure Functions SDK 相关的组件 130 | 131 | 132 | ```bash 133 | 134 | curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg 135 | 136 | sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg 137 | 138 | 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' 139 | 140 | sudo apt-get update 141 | 142 | sudo apt-get install azure-functions-core-tools-4 143 | 144 | ``` 145 | 146 | 147 | 148 | 5. 在 GitHub Codespaces 上创建 Azure Function 149 | 150 | 151 | 152 | 153 | 154 | 依次选择 Custom Handler - HTTP trigger - RustFuncHttpTrigger - Anonymous - Add to workspace 155 | 156 | 创建成功后,如图 157 | 158 | 159 | 160 | 6. 在命令行,根目录下输入以下命令 161 | 162 | 163 | ```bash 164 | 165 | cargo init --name handler 166 | 167 | 168 | ``` 169 | 170 | 7. 修改 Cargo.toml 171 | 172 | 173 | ``` 174 | 175 | [dependencies] 176 | warp = "0.3" 177 | tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] } 178 | 179 | 180 | ``` 181 | 182 | 8. 修改 src/main.rs 183 | 184 | 185 | ```rust 186 | 187 | use std::collections::HashMap; 188 | use std::env; 189 | use std::net::Ipv4Addr; 190 | use warp::{http::Response, Filter}; 191 | 192 | #[tokio::main] 193 | async fn main() { 194 | let example1 = warp::get() 195 | .and(warp::path("api")) 196 | .and(warp::path("RustFuncHttpTrigger")) 197 | .and(warp::query::>()) 198 | .map(|p: HashMap| match p.get("name") { 199 | Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)), 200 | None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")), 201 | }); 202 | 203 | let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT"; 204 | let port: u16 = match env::var(port_key) { 205 | Ok(val) => val.parse().expect("Custom Handler port is not a number!"), 206 | Err(_) => 3000, 207 | }; 208 | 209 | warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await 210 | } 211 | 212 | ``` 213 | 214 | 215 | 9. 命令行执行 216 | 217 | 218 | ```bash 219 | 220 | 221 | cargo build --release 222 | 223 | cp target/release/handler . 224 | 225 | 226 | ``` 227 | 228 | 10. 修改 host.json 中的 customHandler 字段 229 | 230 | 231 | ```json 232 | 233 | "customHandler": { 234 | "description": { 235 | "defaultExecutablePath": "handler", 236 | "workingDirectory": "", 237 | "arguments": [] 238 | }, 239 | "enableForwardingHttpRequest": true 240 | } 241 | 242 | ``` 243 | 244 | 11. 在命令行输入 func start 即可启用 Azure Functions 245 | 246 | 247 | 248 | 249 | 建议安装 Thunder Client 来看运行结果 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | ## **相关资源** 260 | 261 | 262 | 0. 注册你的 GitHub https://github.com/signup 263 | 264 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces 265 | 266 | 2. 学习 Rust 的相关知识 https://learn.microsoft.com/en-us/training/paths/rust-first-steps/ 267 | 268 | 3. 学习用 Rust 构建 Azure Function https://learn.microsoft.com/en-us/azure/azure-functions/create-first-function-vs-code-other?tabs=rust%2Cmacos 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | -------------------------------------------------------------------------------- /02.CloudNativeEnv.md: -------------------------------------------------------------------------------- 1 | # **配置 GitHub Codespaces 上的云原生开发环境** 2 | 3 | 现阶段有非常多的云原生技术,通过 GitHub Codespaces 我们可以应对不同的云原生场景。如容器的开发,如 K8s 应用场景的配置以及维护,可以协助不同的项目上云。这对于开发团队有不同的挑战,首先环境的统一性,其次就是多场景多技术的整合。或者你可以把 GitHub Codespaces 看做成一个云端的在线 Visual Studio Code ,但他的功能至于 Visual Studio Code ,不仅兼容插件,还支持不同的云端场景以及模版。我们可以快速通过 GitHub Codespaces 构建云原生的开发环境。下面我们就通过简易的步骤构建一个云原生开发环境。 4 | 5 | 6 | **1. 选择空模版构建一个 GitHub Codespaces 项目** 7 | 8 | 9 | 10 | **2. 并把机器配置切换为 4核 CPU , 8GB 内存 , 32GB 存储** 11 | 12 | 13 | 14 | 15 | **3. 为 GitHub Codespaces 搭配设置好环境** 16 | 17 | macOS 使用 CMD + Shift + P , Windows / Linux 使用 Ctrl + Shift + P 选择 Codespaces 下的 Add Dev Container 选择 Ubuntu 22.04 开发容器 (对于云原生环境 Ubuntu 是最好的开发系统) 18 | 19 | 20 | 21 | 版本选择 jammy - 22.04 22 | 23 | 24 | 25 | 26 | **4. 添加不同的 SDK 和语言环境的支持** 27 | 28 | Azure 相关的如 Azure CLI , Azure Functions 等 29 | 30 | Dotnet CLI , Miniforge , 以及 nodejs 等 31 | 32 | 选择成功后可以参考以下 devcontainer.json 的配置 33 | 34 | ```json 35 | 36 | { 37 | "name": "Ubuntu", 38 | "image": "mcr.microsoft.com/devcontainers/base:jammy", 39 | "features": { 40 | "ghcr.io/devcontainers/features/azure-cli:1": {}, 41 | "ghcr.io/devcontainers/features/dotnet:1": {}, 42 | "ghcr.io/devcontainers/features/node:1": {}, 43 | "ghcr.io/rocker-org/devcontainer-features/miniforge:0": {}, 44 | "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {} 45 | } 46 | 47 | 48 | } 49 | 50 | ``` 51 | 52 | 53 | **5. 这里可以为环境添加一些 extensions 的插件** 54 | 55 | 在 devcontainer.json 增加下面的语句, 为你的云原生 GitHub Codespaces 环境添加 .NET , Python , Thunder-Client 等插件。 56 | 57 | 58 | ```json 59 | 60 | "customizations": { 61 | // Configure properties specific to VS Code. 62 | "vscode": { 63 | 64 | // Add the IDs of extensions you want installed when the container is created. 65 | "extensions": [ 66 | "ms-python.python", 67 | "ms-python.vscode-pylance", 68 | "ms-dotnettools.csharp", 69 | "rangav.vscode-thunder-client" 70 | ] 71 | } 72 | } 73 | 74 | 75 | ``` 76 | 77 | 我们可以看看完整的 devcontainer.json 78 | 79 | 80 | 81 | ```json 82 | 83 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 84 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu 85 | { 86 | "name": "Ubuntu", 87 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile 88 | "image": "mcr.microsoft.com/devcontainers/base:jammy", 89 | "features": { 90 | "ghcr.io/devcontainers/features/azure-cli:1": {}, 91 | "ghcr.io/devcontainers/features/dotnet:1": {}, 92 | "ghcr.io/devcontainers/features/node:1": {}, 93 | "ghcr.io/rocker-org/devcontainer-features/miniforge:0": {}, 94 | "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {} 95 | }, 96 | "customizations": { 97 | // Configure properties specific to VS Code. 98 | "vscode": { 99 | 100 | // Add the IDs of extensions you want installed when the container is created. 101 | "extensions": [ 102 | "ms-python.python", 103 | "ms-python.vscode-pylance", 104 | "ms-dotnettools.csharp", 105 | "rangav.vscode-thunder-client" 106 | ] 107 | } 108 | } 109 | 110 | // Features to add to the dev container. More info: https://containers.dev/features. 111 | // "features": {}, 112 | 113 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 114 | // "forwardPorts": [], 115 | 116 | // Use 'postCreateCommand' to run commands after the container is created. 117 | // "postCreateCommand": "uname -a", 118 | 119 | // Configure tool-specific properties. 120 | // "customizations": {}, 121 | 122 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. 123 | // "remoteUser": "root" 124 | } 125 | 126 | 127 | ``` 128 | 129 | 6. 完成后, Rebuild 你的 GitHub Codespaces 130 | 131 | 132 | 133 | 134 | 你的环境就配置好了,接下来我们尝试构建两个项目,为后面的联系打好基础 135 | 136 | 在终端创建一个文件夹 apps , 并在 apps 下构建一个 backend.app 和 frontend.app 的子文件夹 137 | 138 | 139 | 140 | 141 | 142 | ## **项目一: 构建一个 .NET Blazor Web Assbembly 应用** 143 | 144 | 1. 通过终端进入刚才建立好的 frontend.app 文件夹 145 | 146 | 147 | ```bash 148 | 149 | cd apps 150 | cd frontend.app 151 | 152 | ``` 153 | 154 | 2. 在 frontend.app 下输入以下命令构建一个 .NET Blazor Wasm 应用 155 | 156 | 157 | 158 | ```bash 159 | 160 | dotnet new blazorwasm -o BlazorUI.App 161 | 162 | cd BlazorUI.App 163 | 164 | dotnet restore 165 | 166 | dotnet build 167 | 168 | dotnet run 169 | 170 | ``` 171 | 172 | 3. 在浏览器可以直接打开 Blazor Wasm 的应用 173 | 174 | 175 | 176 | 177 | 178 | 179 | ## **项目二: 构建一个 Python 写的 Azure Functions** 180 | 181 | 182 | 1. 进入终端, 安装配置好你的 Python 183 | 184 | 185 | ```bash 186 | 187 | conda create -n pydev python=3.9.10 188 | 189 | conda activate pydev 190 | 191 | 192 | ``` 193 | 194 | 2. macOS 使用 CMD + Shift + P , Windows / Linux 使用 Ctrl + Shift + P 选择 Azure Functions 下的 Create Function , 选择好之前构建的 backend.app 文件夹, 选择 HttpTrigger 和匿名访问 ,并命名为 AIOnnxHttpTrigger 195 | 196 | 3. 把 https://github.com/kinfey/PythonOnnxDemo/tree/codespace-kinfey-bug-free-space-winner-gwjxj67qvv6fvr6/OnnxHttpTriggerDemo 内的文件替换为 AIOnnxHttpTrigger 文件下的文件 197 | 198 | 199 | 4. 在命令行通过 func start 启动你的 Azure Functions 200 | 201 | 202 | ```bash 203 | 204 | func start 205 | 206 | ``` 207 | 208 | 5. 通过 Thunder Client 验证一下 209 | 210 | 211 | 212 | 这样大家就完成了本次 GitHub Codespaces 的云原生环境配置了,如果大家希望了解更多请进入下一章节 213 | 214 | 215 | 216 | ## **相关资源** 217 | 218 | 219 | 0. 注册你的 GitHub https://github.com/signup 220 | 221 | 1. 了解 GitHub Codespaces https://github.com/features/codespaces 222 | 223 | 2. 学习 .NET Blazor 的相关知识 https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor 224 | 225 | 3. 学习 Azure Functions 的相关知识 https://learn.microsoft.com/en-us/azure/azure-functions/functions-overview 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | -------------------------------------------------------------------------------- /02.CloudNativeInAzure.md: -------------------------------------------------------------------------------- 1 | ## **通过 GitHub Codespaces 打造一个 Azure Static Web App 和 Azure Function 结合的应用** 2 | 3 | 4 | Azure Static Web Apps 是一种服务,可从代码存储库自动生成完整的堆栈 Web 应用,并将其部署到 Azure。 5 | 6 | 7 | 8 | Azure 静态 Web 应用的工作流适用于开发人员的日常工作流。 基于代码更改生成并部署应用。 9 | 10 | 当你创建 Azure Static Web Apps 资源时,Azure 会直接与 GitHub 或 Azure DevOps 交互以监视你选择的分支。 每次你向受监视的分支推送提交或接受拉取请求时,系统都会自动运行一次生成,并将你的应用和 API 部署到 Azure。 11 | 12 | 通常使用不需要服务器端渲染的库和 Web 框架(例如 Angular、React、Svelte、Vue 或 Blazor)来生成静态 Web 应用。 这些应用包括构成应用程序的 HTML、CSS、JavaScript 和映像资产。 对于传统 Web 服务器,这些资产与任何所需的 API 终结点一起由单个服务器提供。 13 | 14 | 使用静态 Web 应用时,静态资产与传统 Web 服务器分离,由分布在世界各地的服务器端提供。 由于文件在物理上离最终用户更近,这种分布使文件提供的速度更快。 此外,API 终结点使用无服务器体系结构,无需将完整的后端服务器组合在一起。 15 | 16 | **主要功能** 17 | 18 | 适用于 HTML、CSS、JavaScript 和映像等静态内容的 Web 托管。 19 | 20 | Azure Functions 提供的集成 API 支持,可选择使用标准帐户链接现有的 Azure Functions 应用程序。 21 | 22 | 一流的 GitHub 和 Azure DevOps 集成,其中的存储库更改会触发生成和部署。 23 | 24 | 全球分布的静态内容,使内容更接近你的用户。 25 | 26 | 可自动续订的免费 SSL 证书。 27 | 28 | 自定义域为应用提供品牌自定义。 29 | 30 | 调用 API 时使用反向代理的无缝安全模型,这不需要配置 CORS。 31 | 32 | 身份验证提供程序与 Azure Active Directory、GitHub 和 Twitter 集成。 33 | 34 | 可自定义的授权角色定义和分配。 35 | 36 | 后端路由规则,使你能够完全控制所提供的内容和路由。 37 | 38 | 生成的临时版本由拉取请求提供支持,在发布前提供站点的预览版本。 39 | 40 | CLI 支持通过 Azure CLI 创建云资源,并通过 Azure 静态 Web 应用程序 CLI 进行本地开发。 41 | 42 | 43 | 本次的练习会结合之前设置好的环境和任务来完成以下两个任务,如果你还没有完成,请跳去改章节进行配置 https://github.com/kinfey/GitHubCodeSpaceWorkShop/blob/main/02.CloudNativeEnv.md 44 | 45 | 46 | ### **任务一: 配置好你的 swa cli** 47 | 48 | 1. 我们在之前已经配置好了对应的环境配置,但我们需要确认我们的 nodejs 在 16.x 的版本,因为我们选择了 nvm 包进行管理,所以这里我们可以通过 nvm 对 nodejs 版本进行调整, 通过终端输入 49 | 50 | ```bash 51 | 52 | nvm install v16.14.0 53 | 54 | ``` 55 | 56 | 通过 node -v 验证一下是否已经正确 57 | 58 | 59 | 60 | 这个时候你可以通过你的 terminal 进行验证 61 | 62 | 63 | 64 | 2. 安装好你的 swa cli 65 | 66 | 67 | ```bash 68 | 69 | 70 | npm install -g @azure/static-web-apps-cli 71 | 72 | 73 | ``` 74 | 75 | 可以通过 swa -v 验证版本号,这样就完成了 swa cli 的配置 76 | 77 | 78 | 79 | ### **任务二: 修改之前的项目** 80 | 81 | Blazor wasm 项目中替换 Pages/Index.razor 82 | 83 | ```csharp 84 | 85 | @page "/" 86 | @using System.Web 87 | @inject HttpClient _httpClient; 88 | 89 | Index 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 |

Result : @responseText

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 |
16 | 17 |
18 | 19 | 3. Select C# (.NET) devcontainer 20 | 21 |
22 | 23 |
24 | 25 | 4. Select .NET 7 26 | 27 |
28 | 29 |
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 |
66 | 67 |
68 | 69 | 70 | ```bash 71 | 72 | docker --version 73 | 74 | ``` 75 | 76 |
77 | 78 |
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 |
4 | 5 |
6 | 7 | 大家好,这是基于 GitHub Codespaces 的线上 Workshop,希望通过结合不同的内容告诉大家如何应用 GitHub Codespaces ,如何结合 GitHub Codespaces 作为自己的学习编程语言的平台,还有通过 GitHub Codespaces 维护你的项目等内容。 8 | 9 | 10 | ## **GitHub Codespaces 介绍** 11 | 12 | 或者你已经从 GitHub Universe 2022 上知道 GitHub Codespace 每个月免费 60 小时的消息,但如何使用 GitHub Codespaces 呢?如何配置好你的 GitHub Codespaces 环境 ?GitHub Codespaces 的工作原理是什么? 13 | 通过本章课程学习,你可以掌握以下内容 14 | 15 | 1. 什么是 GitHub Codespaces ? 16 | 2. 如何使用 GitHub Codespaces ? 17 | 3. 通过 GitHub Codespaces 的模版构建你的 Python 项目 18 | 4. 通过 GitHub Codespaces 的空模版构建你的 .NET 项目 19 | 20 | 学习时间: 40 min 21 | 22 | 相关内容:(点击进入学习) 23 | 24 | 25 | ## **通过 GitHub Codespace 学习编程语言** 26 | 27 | 学习编程语言是开启编程之路上非常重要的一步,我们在学习编程语言时,我们必须要安装不同的环境包括 SDK,包括一些库,以及 IDE 上的插件等。这会占用我们非常大的时间。有时候你会遇到各种不兼容的内容,这个时候我们就可以结合 GitHub Codespaces 启动一个开箱即用的开发环境,让作为初学者的你快速进入到编程中,体验不同编程语言的编程乐趣。通过本章学习你可以掌握以下内容: 28 | 29 | 1. 通过 GitHub Codespaces 学习 .NET (点击进入学习) 30 | 2. 通过 GitHub Codespaces 学习 Java (点击进入学习) 31 | 3. 通过 GitHub Codespaces 学习 Python(更新ing) 32 | 4. 通过 GitHub Codespaces 学习 Rust(点击进入学习) 33 | 34 | 学习时间: 180 min 35 | 36 | 在线学习视频:https://www.bilibili.com/video/BV1FG411K7zj 37 | 38 | 39 | ## **通过 GitHub Codespaces 做云原生应用** 40 | 41 | 在 GitHub Codespaces 直接可以开发和维护云原生的项目,针对企业开发,以及创业团队通过 GitHub Codespaces 可以打通任意云平台的开发。本次系列会通过几个例子引导大家通过 GitHub Codespaces 做云原生项目的开发和维护。 42 | 43 | 1. 配置 GitHub Codespaces 上的云原生开发环境 (点击进入学习) 44 | 2. 通过 GitHub Codespaces 打造一个 Azure Static Web App 和 Azure Function 结合的应用 (点击进入学习) 45 | 3. 通过 GitHub Codespaces 打造一个 Dapr 的应用 (点击进入学习) 46 | 4. 用 Rust 开发一个 WasmEdge 的应用 (点击进入学习) 47 | 48 | 49 | 学习时间: 120 min 50 | 51 | 在线学习视频:https://www.bilibili.com/video/BV1584y1x7Hm/ 52 | 53 | ## **通过 GitHub Codespaces 做机器学习** 54 | 55 | 机器学习是现在非常火热的技术, GitHub Codespaces 给机器学习带来非常好的技术支持,我们通过 GitHub Codespaces 可以很好地编写机器学习,也可以和 Azure Machine Learning Service 打通,让大家能更好地利用云端资源完成相关的机器学习项目。本系列会介绍大家如何使用 GitHub Codespaces 完成机器学习的相关知识。 56 | 57 | 1. 配置 GitHub Codespaces 上的机器学习开发环境(点击进入学习) 58 | 2. 打通 Azure Machine Learning 的能力(点击进入学习) 59 | 3. 完成 MLOps 的开发技巧(点击进入学习) 60 | 61 | 62 | 学习时间: 120 min 63 | 64 | 在线学习视频:https://www.bilibili.com/video/BV1NM411a7CY/ 65 | 66 | ## **通过 GitHub Codespaces 维护你的项目(更新 ing)** -------------------------------------------------------------------------------- /imgs/00/00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/00.png -------------------------------------------------------------------------------- /imgs/00/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/01.png -------------------------------------------------------------------------------- /imgs/00/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/02.png -------------------------------------------------------------------------------- /imgs/00/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/03.png -------------------------------------------------------------------------------- /imgs/00/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/04.png -------------------------------------------------------------------------------- /imgs/00/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/05.png -------------------------------------------------------------------------------- /imgs/00/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/00/logo.png -------------------------------------------------------------------------------- /imgs/01/CSharp/00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/00.png -------------------------------------------------------------------------------- /imgs/01/CSharp/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/01.png -------------------------------------------------------------------------------- /imgs/01/CSharp/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/02.png -------------------------------------------------------------------------------- /imgs/01/CSharp/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/03.png -------------------------------------------------------------------------------- /imgs/01/CSharp/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/04.png -------------------------------------------------------------------------------- /imgs/01/CSharp/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/05.png -------------------------------------------------------------------------------- /imgs/01/CSharp/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/06.png -------------------------------------------------------------------------------- /imgs/01/CSharp/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/07.png -------------------------------------------------------------------------------- /imgs/01/CSharp/071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/071.png -------------------------------------------------------------------------------- /imgs/01/CSharp/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/08.png -------------------------------------------------------------------------------- /imgs/01/CSharp/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/09.png -------------------------------------------------------------------------------- /imgs/01/CSharp/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/10.png -------------------------------------------------------------------------------- /imgs/01/CSharp/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/CSharp/11.png -------------------------------------------------------------------------------- /imgs/01/Java/00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/00.png -------------------------------------------------------------------------------- /imgs/01/Java/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/01.png -------------------------------------------------------------------------------- /imgs/01/Java/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/02.png -------------------------------------------------------------------------------- /imgs/01/Java/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/03.png -------------------------------------------------------------------------------- /imgs/01/Java/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/04.png -------------------------------------------------------------------------------- /imgs/01/Java/041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/041.png -------------------------------------------------------------------------------- /imgs/01/Java/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/05.png -------------------------------------------------------------------------------- /imgs/01/Java/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/06.png -------------------------------------------------------------------------------- /imgs/01/Java/061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/061.png -------------------------------------------------------------------------------- /imgs/01/Java/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/07.png -------------------------------------------------------------------------------- /imgs/01/Java/071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/071.png -------------------------------------------------------------------------------- /imgs/01/Java/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/08.png -------------------------------------------------------------------------------- /imgs/01/Java/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/09.png -------------------------------------------------------------------------------- /imgs/01/Java/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/10.png -------------------------------------------------------------------------------- /imgs/01/Java/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/11.png -------------------------------------------------------------------------------- /imgs/01/Java/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/12.png -------------------------------------------------------------------------------- /imgs/01/Java/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/13.png -------------------------------------------------------------------------------- /imgs/01/Java/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/14.png -------------------------------------------------------------------------------- /imgs/01/Java/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/15.png -------------------------------------------------------------------------------- /imgs/01/Java/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/16.png -------------------------------------------------------------------------------- /imgs/01/Java/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/17.png -------------------------------------------------------------------------------- /imgs/01/Java/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/18.png -------------------------------------------------------------------------------- /imgs/01/Java/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/19.png -------------------------------------------------------------------------------- /imgs/01/Java/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/20.png -------------------------------------------------------------------------------- /imgs/01/Java/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Java/21.png -------------------------------------------------------------------------------- /imgs/01/Rust/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/01.png -------------------------------------------------------------------------------- /imgs/01/Rust/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/02.png -------------------------------------------------------------------------------- /imgs/01/Rust/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/03.png -------------------------------------------------------------------------------- /imgs/01/Rust/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/04.png -------------------------------------------------------------------------------- /imgs/01/Rust/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/05.png -------------------------------------------------------------------------------- /imgs/01/Rust/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/06.png -------------------------------------------------------------------------------- /imgs/01/Rust/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/07.png -------------------------------------------------------------------------------- /imgs/01/Rust/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/09.png -------------------------------------------------------------------------------- /imgs/01/Rust/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/10.png -------------------------------------------------------------------------------- /imgs/01/Rust/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/11.png -------------------------------------------------------------------------------- /imgs/01/Rust/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/12.png -------------------------------------------------------------------------------- /imgs/01/Rust/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/13.png -------------------------------------------------------------------------------- /imgs/01/Rust/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/14.png -------------------------------------------------------------------------------- /imgs/01/Rust/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/15.png -------------------------------------------------------------------------------- /imgs/01/Rust/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/16.png -------------------------------------------------------------------------------- /imgs/01/Rust/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/17.png -------------------------------------------------------------------------------- /imgs/01/Rust/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/18.png -------------------------------------------------------------------------------- /imgs/01/Rust/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/01/Rust/19.png -------------------------------------------------------------------------------- /imgs/02/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/01.png -------------------------------------------------------------------------------- /imgs/02/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/02.png -------------------------------------------------------------------------------- /imgs/02/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/03.png -------------------------------------------------------------------------------- /imgs/02/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/04.png -------------------------------------------------------------------------------- /imgs/02/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/05.png -------------------------------------------------------------------------------- /imgs/02/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/06.png -------------------------------------------------------------------------------- /imgs/02/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/07.png -------------------------------------------------------------------------------- /imgs/02/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/08.png -------------------------------------------------------------------------------- /imgs/02/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/09.png -------------------------------------------------------------------------------- /imgs/02/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/10.png -------------------------------------------------------------------------------- /imgs/02/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/11.png -------------------------------------------------------------------------------- /imgs/02/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/12.png -------------------------------------------------------------------------------- /imgs/02/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/13.png -------------------------------------------------------------------------------- /imgs/02/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/14.png -------------------------------------------------------------------------------- /imgs/02/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/15.png -------------------------------------------------------------------------------- /imgs/02/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/16.png -------------------------------------------------------------------------------- /imgs/02/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/17.png -------------------------------------------------------------------------------- /imgs/02/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/18.png -------------------------------------------------------------------------------- /imgs/02/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/19.png -------------------------------------------------------------------------------- /imgs/02/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/20.png -------------------------------------------------------------------------------- /imgs/02/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/21.png -------------------------------------------------------------------------------- /imgs/02/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/22.png -------------------------------------------------------------------------------- /imgs/02/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/23.png -------------------------------------------------------------------------------- /imgs/02/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/24.png -------------------------------------------------------------------------------- /imgs/02/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/02/25.png -------------------------------------------------------------------------------- /imgs/03/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/01.png -------------------------------------------------------------------------------- /imgs/03/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/02.png -------------------------------------------------------------------------------- /imgs/03/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/03.png -------------------------------------------------------------------------------- /imgs/03/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/04.png -------------------------------------------------------------------------------- /imgs/03/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/05.png -------------------------------------------------------------------------------- /imgs/03/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/06.png -------------------------------------------------------------------------------- /imgs/03/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/07.png -------------------------------------------------------------------------------- /imgs/03/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/08.png -------------------------------------------------------------------------------- /imgs/03/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/09.png -------------------------------------------------------------------------------- /imgs/03/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/03/10.png -------------------------------------------------------------------------------- /imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/imgs/logo.png -------------------------------------------------------------------------------- /pdf/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/.DS_Store -------------------------------------------------------------------------------- /pdf/00.Introduction.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/00.Introduction.pdf -------------------------------------------------------------------------------- /pdf/01.LearnCSharp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/01.LearnCSharp.pdf -------------------------------------------------------------------------------- /pdf/01.LearnJava.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/01.LearnJava.pdf -------------------------------------------------------------------------------- /pdf/01.LearnRust.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/01.LearnRust.pdf -------------------------------------------------------------------------------- /pdf/02.CloudNativeEnv.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/02.CloudNativeEnv.pdf -------------------------------------------------------------------------------- /pdf/02.CloudNativeInAzure.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/02.CloudNativeInAzure.pdf -------------------------------------------------------------------------------- /pdf/02.CloudNativeInDapr.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/02.CloudNativeInDapr.pdf -------------------------------------------------------------------------------- /pdf/02.CloudNativeInWasmEdge.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/02.CloudNativeInWasmEdge.pdf -------------------------------------------------------------------------------- /pdf/03.MLEnv.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/03.MLEnv.pdf -------------------------------------------------------------------------------- /pdf/03.MLwithAzure.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/03.MLwithAzure.pdf -------------------------------------------------------------------------------- /pdf/03.MLwithMLOps.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kinfey/GitHubCodeSpaceWorkShop/1ce1ab98c2e05237fb33bcfb86ccd822ab792315/pdf/03.MLwithMLOps.pdf --------------------------------------------------------------------------------