SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
.NET Interactive
Notebooks
一次就上手
Poy Chang
Poy Chang
任職於全美 100 大私人企業,負責企業內部 IT 解決方案設計與開發,
專注於 Azure、.NET 等技術研究
✓ STUDY4 / Azure Taiwan 社群核心成員
✓ Microsoft MVP 微軟最有價值專家
✓ 2021 線上 DevDays Asia 講師
✓ 2020 台北 .NET Conf 總召 / 講師
✓ 2019 台北 .NET Conf 總召
✓ 2019 廣州 Global Azure Bootcamp 講師
✓ 2019 台北 Insider Dev Tour 講師
✓ 2019 宜蘭 Angular TW Conf 講師
s.poychang.net/blog
s.poychang.net/github
s.poychang.net/fb
s.poychang.net/twitter
s.poychang.net/linkedin
活動時間 2021-08-28 (六) 14:00 ~ 16:30
https://s.study4.tw/202108
stackblitz.com
jsfiddle.net dotnetfiddle.net
線上分享程式碼
Try .NET
✓ 基於 .NET 的嵌入式的程式碼執行器
✓ 提供網頁介面來執行 .NET 程式碼
• 使用 Blazor 和 Web Assembly 技術
✓ 可安裝成 dotnet CLI 全域工具,提供
離線執行環境
✓ Microsoft Docs 線上學習支援大量使
用此技術,讓 .NET 學習者能閱讀文件
的同時,直接在網頁上執行程式碼
https://try.dot.net/
dotnet tool install --global Microsoft.dotnet-try
Try .NET
✓ 基於 .NET 的嵌入式的程式碼執行器
✓ 提供網頁介面來執行 .NET 程式碼
• 使用 Blazor 和 Web Assembly 技術
✓ 可安裝成 dotnet CLI 全域工具,提供
離線執行環境
✓ Microsoft Docs 線上學習支援大量使
用此技術,讓 .NET 學習者能閱讀文件
的同時,直接在網頁上執行程式碼
https://github.com/dotnet/try/blob/main/DotNetTryLocal.md
dotnet tool install --global Microsoft.dotnet-try
Try .NET
✓ 基於 .NET 的嵌入式的程式碼執行器
✓ 提供網頁介面來執行 .NET 程式碼
• 使用 Blazor 和 Web Assembly 技術
✓ 可安裝成 dotnet CLI 全域工具,提供
離線執行環境
✓ Microsoft Docs 線上學習支援大量使
用此技術,讓 .NET 學習者能閱讀文件
的同時,直接在網頁上執行程式碼
https://dotnet.microsoft.com/learn/dotnet/in-browser-tutorial/
dotnet tool install --global Microsoft.dotnet-try
為什麼有 Notebook
✓1984 年 Donald Knuth 提出文學式
程式設計,希望能用來取代結構化程
式設計
www.literateprogramming.com/knuthweb.pdf
為什麼有 Notebook
✓1984 年 Donald Knuth 提出文學式
程式設計,希望能用來取代結構化程
式設計
✓1988 年 Wolfram 公司推出筆記本介
面的 Mathematica 工具
為什麼有 Notebook
✓1984 年 Donald Knuth 提出文學式
程式設計,希望能用來取代結構化程
式設計
✓1988 年 Wolfram 公司推出筆記本介
面的 Mathematica 工具
✓2015 年眾多資料科學解決方案採用
Notebook 的方式來呈現
https://devblogs.microsoft.com/cesardelatorre/using-ml-net-in-jupyter-notebooks/
.NET
Notebook
.NET
Interactive
Notebook
.NET Interactive
✓.NET interactive 是一組 CLI 和 API,利用 .NET 並將其功能
嵌入到 Web 或 Notebook 之中,在其中共享程式碼、探索
數據、撰寫和學習,提供交互式體驗
✓開源專案
github.com/dotnet/interactive
https://github.com/dotnet/interactive/blob/main/docs/kernels-overview.md
Visual Studio Code
Jupyter nteract
Visual Studio Code
Extension
VSCode 1.59 已內建基本功能
動手玩玩看
.NET Interactive
Notebook 基本玩法
https://blog.poychang.net/play-with-dotnet-interactive-notebook/
https://github.com/poychang/demo-dotnet-notebook
https://github.com/poychang/dotnet-notebooks
.NET Notebook for C#
✓使用修改版的 C# Script 語法
• 也就是使用 .csx 腳本的格式,跟平常寫的 C# 不一樣但也差不多
• scriptcs.net
✓預設載入以下套件參考
• .NETStandard.Library
• Microsoft.AspNetCore.Html.Abstractions
• Microsoft.DotNet.Interactive
• Microsoft.DotNet.Interactive.Formatting
// 設定 NuGet.org 的套件來源
#i "nuget:https://api.nuget.org/v3/index.json"
// 使用本機的 NuGet 套件來源
#i "nuget:C:mypackagesrcbinRelease"
// 還原最新 pre-release 版本的 NuGet 套件
#r "nuget:Microsoft.DotNet.Interactive.ExtensionLab,*-*"
.NET Notebook for C#
✓預設使用以下 namespace
• System
• System.Collections
• System.Collections.Generic
• System.Ling
• System.Threading.Tasks
• System.Text
• Microsoft.DotNet.Interactive
• Microsoft.DotNet.Interactive.Formatting
IntelliSense 岀不來?建議使用 using 語句明確指定要
使用的 namespace,讓 IntelliSense 比較不會出狀況
Magic Commands
• 將複雜的行為封裝成單一指令,用更快捷的方式執行
• 必須放在行的開頭,並以 #! 或 # 作為前綴
通用型 Magic Commands
宣告類
用於宣告該 區塊是使用哪個 Subkernel
• #!sql
• #!csharp 或用 #!c#, #!C#
• #!fsharp 或用 #!f#, #!F#
• #!pwsh 或用 #!powershell
• #!javascript 或用 #!js
• #!html
• #!markdown
功能類
提供適用於檢視或紀錄的功能
• #!lsmagic 列出當前可用的指令
• #!log 開啟並檢視詳細執行日誌
• #!about 顯示當前 .NET Interactive 版本
• #!time 測量並顯示該區塊執行時間
• #!value 儲存值,需搭配 #!share 使用
特定語言專用 Magic Commands
提供給 C# 和 F# 語言專用
#i 設定 NuGet 套件來源
#r 將套件加入參考
#!share 從 #!value 取得共享的變數
#!who 顯示頂層變數的名稱
#!whos 顯示頂層變數的名稱、類型和值
https://github.com/dotnet/interactive/blob/main/docs/magic-commands.md
動手玩玩看
自訂
Magic Command
https://github.com/poychang/demo-dotnet-notebook
https://github.com/poychang/dotnet-notebooks
自訂 Magic Command
• 實作 IKernelExtension 介面,並封裝成 NuGet 套件
• 使用 System.CommandLine 來處理命令參數及邏輯
• 專案檔要將產出的 dll 封裝到指定位置
public interface IKernelExtension
{
Task OnLoadAsync(Kernel kernel);
}
<ItemGroup>
<None Include="$(OutputPath)/Extension.dll" Pack="true" PackagePath="interactive-extensions/dotnet" />
</ItemGroup>
https://github.com/dotnet/interactive/blob/main/docs/extending-dotnet-interactive.md
自訂 Magic Command (script-based)
• 用 .NET Notebook 本身作為 Magic Command,並封裝成
NuGet 套件
• 必須使用 .dib 檔案格式來撰寫處理命令參數及邏輯
• 專案檔要將 .dib 檔封裝到指定位置
<ItemGroup>
<None Include="extension.dib" Pack="true" PackagePath="interactive-extensions/dotnet" />
</ItemGroup>
https://github.com/dotnet/interactive/blob/main/samples/extensions/RandomNumber/README.md
寫 Notebook 的建議
https://towardsdatascience.com/on-writing-clean-jupyter-notebooks-abdf6c708c75
✓ 鎖定依賴的套件版本
Lock dependencies
✓ 注意資料的變化
Be careful with mutable data
✓ 區塊模組化
Modularize code
寫 Notebook 的建議
https://towardsdatascience.com/on-writing-clean-jupyter-notebooks-abdf6c708c75
✓ 鎖定依賴的套件版本
Lock dependencies
✓ 注意資料的變化
Be careful with mutable data
✓ 區塊模組化
Modularize code
✓ 分節組織區塊
Organize in sections
寫 Notebook 的建議
https://towardsdatascience.com/on-writing-clean-jupyter-notebooks-abdf6c708c75
✓ 鎖定依賴的套件版本
Lock dependencies
✓ 注意資料的變化
Be careful with mutable data
✓ 區塊模組化
Modularize code
✓ 分節組織區塊
Organize in sections
✓ 寫的是筆記,不是書
Write shorter notebooks
如果你想要打造屬於
自己的 Notebook
VS Code Notebook API
Sample Notebook
VS Code Notebooks: A Deep Dive
https://code.visualstudio.com/api/extension-guides/notebook
https://github.com/microsoft/vscode-nodebook
https://www.youtube.com/watch?v=D-AXZZDTQhM
應用場景
學習程式語言 成為資料探險家 驗證商業邏輯 交接標準流程
Thank You
s.poychang.net/blog
s.poychang.net/github
s.poychang.net/fb
s.poychang.net/twitter
s.poychang.net/linkedin

Más contenido relacionado

La actualidad más candente

Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
 
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
Takayuki Kyowa
 

La actualidad más candente (20)

Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Consistent hash
Consistent hashConsistent hash
Consistent hash
 
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
全文検索サーバ Fess 〜 全文検索システム構築時の悩みどころ
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
事例で学ぶApache Cassandra
事例で学ぶApache Cassandra事例で学ぶApache Cassandra
事例で学ぶApache Cassandra
 
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
GMOインターネット様 発表「OpenStackのモデルの最適化とConoHa, Z.comとGMOアプリクラウドへの適用」 - OpenStack最新情...
 
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 

Similar a 玩轉 .NET Interactive Notebooks 一次就上手

1_大二班_資料視覺化_20221028.pdf
1_大二班_資料視覺化_20221028.pdf1_大二班_資料視覺化_20221028.pdf
1_大二班_資料視覺化_20221028.pdf
FEG
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
Hsu Ping Feng
 

Similar a 玩轉 .NET Interactive Notebooks 一次就上手 (20)

twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
 
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定Angular Conf 2018 - 原來 Angular 可以這樣玩設定
Angular Conf 2018 - 原來 Angular 可以這樣玩設定
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
 
@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure
 
03 azure devops pipeline - release
03 azure devops pipeline - release03 azure devops pipeline - release
03 azure devops pipeline - release
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
2021 Net Conf Taiwan-初探 Azure Communication Service 讓 App 也有視訊、通話、即時聊天、簡訊和電話功能
2021 Net Conf Taiwan-初探 Azure Communication Service讓 App 也有視訊、通話、即時聊天、簡訊和電話功能2021 Net Conf Taiwan-初探 Azure Communication Service讓 App 也有視訊、通話、即時聊天、簡訊和電話功能
2021 Net Conf Taiwan-初探 Azure Communication Service 讓 App 也有視訊、通話、即時聊天、簡訊和電話功能
 
scriptcs 簡介
scriptcs 簡介scriptcs 簡介
scriptcs 簡介
 
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
[2021 DevDays]Microsoft Teams 整合 Azure DevOps之實務應用
 
在雲端上啜飲爪哇
在雲端上啜飲爪哇在雲端上啜飲爪哇
在雲端上啜飲爪哇
 
1_大二班_資料視覺化_20221028.pdf
1_大二班_資料視覺化_20221028.pdf1_大二班_資料視覺化_20221028.pdf
1_大二班_資料視覺化_20221028.pdf
 
02 azure devops pipeline - build
02 azure devops pipeline - build02 azure devops pipeline - build
02 azure devops pipeline - build
 
使用最新 Edge 瀏覽器來進行開發​
使用最新 Edge 瀏覽器來進行開發​使用最新 Edge 瀏覽器來進行開發​
使用最新 Edge 瀏覽器來進行開發​
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设
 
01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview
 
淺談 Kubernetes於大數據生態系的相關開發近況
淺談 Kubernetes於大數據生態系的相關開發近況淺談 Kubernetes於大數據生態系的相關開發近況
淺談 Kubernetes於大數據生態系的相關開發近況
 
Introduction to K8S Big Data SIG
Introduction to K8S Big Data SIGIntroduction to K8S Big Data SIG
Introduction to K8S Big Data SIG
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 

Más de Poy Chang

智慧型校園Ip網路監控系統
智慧型校園Ip網路監控系統智慧型校園Ip網路監控系統
智慧型校園Ip網路監控系統
Poy Chang
 

Más de Poy Chang (10)

打造 AIoT 智慧物聯網時代解決方案
打造 AIoT 智慧物聯網時代解決方案打造 AIoT 智慧物聯網時代解決方案
打造 AIoT 智慧物聯網時代解決方案
 
Vue 和 Angular 開發習慣
Vue 和 Angular 開發習慣Vue 和 Angular 開發習慣
Vue 和 Angular 開發習慣
 
#19 Azure with Build 2019 - Windows Terminal
#19 Azure with Build 2019 - Windows Terminal#19 Azure with Build 2019 - Windows Terminal
#19 Azure with Build 2019 - Windows Terminal
 
Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目
Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目
Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目
 
那個 Code 不是我弄壞的! 持續整合與版本控制策略
那個 Code 不是我弄壞的!持續整合與版本控制策略那個 Code 不是我弄壞的!持續整合與版本控制策略
那個 Code 不是我弄壞的! 持續整合與版本控制策略
 
Azure TechDay Party - AIoT 智慧物聯網時代
Azure TechDay Party - AIoT 智慧物聯網時代Azure TechDay Party - AIoT 智慧物聯網時代
Azure TechDay Party - AIoT 智慧物聯網時代
 
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
 
從雲端到邊緣 Azure IoT Edge 幫工廠設備長智慧
從雲端到邊緣 Azure IoT Edge 幫工廠設備長智慧從雲端到邊緣 Azure IoT Edge 幫工廠設備長智慧
從雲端到邊緣 Azure IoT Edge 幫工廠設備長智慧
 
Global Azure Bootcamp @ 北京 - Azure Bot Servic 快速打造你的機器人
Global Azure Bootcamp @ 北京 - Azure Bot Servic  快速打造你的機器人Global Azure Bootcamp @ 北京 - Azure Bot Servic  快速打造你的機器人
Global Azure Bootcamp @ 北京 - Azure Bot Servic 快速打造你的機器人
 
智慧型校園Ip網路監控系統
智慧型校園Ip網路監控系統智慧型校園Ip網路監控系統
智慧型校園Ip網路監控系統
 

玩轉 .NET Interactive Notebooks 一次就上手