From c75af916490ddb9a198f8c1ef862e04d714f26cd Mon Sep 17 00:00:00 2001 From: Philess Date: Mon, 10 Mar 2025 16:37:06 +0100 Subject: [PATCH 1/5] Externalise GH Copilot Workshop --- packages/database/external.yml | 124 +- workshops/github-copilot/assets/agents.png | Bin 25756 -> 0 bytes workshops/github-copilot/assets/banner.jpg | Bin 78604 -> 0 bytes .../github-copilot/assets/git-commit.png | Bin 21205 -> 0 bytes .../github-copilot/assets/git-commit2.png | Bin 23143 -> 0 bytes workshops/github-copilot/assets/quickchat.png | Bin 15720 -> 0 bytes .../assets/src/completesolution.zip | Bin 48956 -> 0 bytes .../assets/src/exercisefiles.zip | Bin 7020 -> 0 bytes .../translations/workshop.ja.md | 1147 ---------------- workshops/github-copilot/workshop.md | 1148 ----------------- 10 files changed, 71 insertions(+), 2348 deletions(-) delete mode 100644 workshops/github-copilot/assets/agents.png delete mode 100644 workshops/github-copilot/assets/banner.jpg delete mode 100644 workshops/github-copilot/assets/git-commit.png delete mode 100644 workshops/github-copilot/assets/git-commit2.png delete mode 100644 workshops/github-copilot/assets/quickchat.png delete mode 100644 workshops/github-copilot/assets/src/completesolution.zip delete mode 100644 workshops/github-copilot/assets/src/exercisefiles.zip delete mode 100644 workshops/github-copilot/translations/workshop.ja.md delete mode 100644 workshops/github-copilot/workshop.md diff --git a/packages/database/external.yml b/packages/database/external.yml index af7bb966..82ce281f 100644 --- a/packages/database/external.yml +++ b/packages/database/external.yml @@ -1,7 +1,7 @@ # **************************************************************************** # External workshop entries to include in the database # **************************************************************************** -# The entry format is the same as the frontmatter format described in +# The entry format is the same as the frontmatter format described in # CONTRIBUTING.md, with these additional fields: # - url: Required. The URL of the workshop website # - language: Required. The language of the workshop (e.g. "en" for English) @@ -9,24 +9,24 @@ # - github_url: Optional. The URL of the workshop's GitHub repository # **************************************************************************** - title: Azure Confidential Computing powered by AMD SEV-SNP - Workshop - description: In this technical workshop, you will gain a comprehensive understanding of Azure's Confidential Computing capabilities powered by AMD SEV-SNP. - url: https://aka.ms/Azure-CC-AMD-Workshop - language: en - last_updated: 2023-07-06 - type: workshop - level: advanced - github_url: https://github.com/microsoft/MDCC/ - authors: + description: In this technical workshop, you will gain a comprehensive understanding of Azure's Confidential Computing capabilities powered by AMD SEV-SNP. + url: https://aka.ms/Azure-CC-AMD-Workshop + language: en + last_updated: 2023-07-06 + type: workshop + level: advanced + github_url: https://github.com/microsoft/MDCC/ + authors: - Jumelet Arnaud - - Ren Jacques - contacts: + - Ren Jacques + contacts: - '@Arnaud_Jumelet' - 'in/jacques-ren/' - duration_minutes: 300 - audience: students, pro devs + duration_minutes: 300 + audience: students, pro devs tags: Security, Confidential Computing - + - title: Azure Blinking IoT Compressor url: https://iot-workshop.maneu.fr/ github_url: https://github.com/cmaneu/Azure-Blinking-IoT-Compressor @@ -94,7 +94,7 @@ level: beginner tags: powerplatform, azure, cli, function, connector, vscode -- title: Product Hands-on Lab AKS - Azure Kubernetes +- title: Product Hands-on Lab AKS - Azure Kubernetes url: https://aka.ms/aks-workshop github_url: https://github.com/lgmorand/aks-workshop language: en @@ -102,7 +102,7 @@ type: workshop description: In this lab, you’ll go through tasks that will help you master the basic and more advanced topics required to deploy a containerized application to Kubernetes on Azure Kubernetes Service (AKS). authors: - - Louis-Guillaume MORAND + - Louis-Guillaume MORAND - Iheb KHEMISSI - Clémence Lesné contacts: @@ -114,7 +114,7 @@ level: beginner tags: aks, container, docker, helm, cli, kubernetes, azure, csu -- title: Product Hands-on Lab ACA - Azure Container Apps +- title: Product Hands-on Lab ACA - Azure Container Apps url: https://aka.ms/aca-workshop github_url: https://github.com/lgmorand/workshop-aca language: en @@ -122,7 +122,7 @@ type: workshop description: In this Hands-on Lab, you’ll go through tasks that will help you master the basics and more advanced topics required to deploy applications to Azure Container Apps. authors: - - Louis-Guillaume MORAND + - Louis-Guillaume MORAND - Fethi Dilmi - Maxime VILLEGER - Zlatko ARIFHODZIC @@ -138,13 +138,13 @@ - title: Product Hands-on Lab DAPR - Distributed Application Runtime url: https://daprbuildworkshop.z6.web.core.windows.net/ - github_url: https://github.com/SoTrx/dapr-build-workshop + github_url: https://github.com/SoTrx/dapr-build-workshop language: fr last_updated: 2023-02-23 type: workshop description: Ce Hands-on Lab est une introduction à Dapr et à ses concepts. Au travers de différentes activités, le but sera de découvrir les fonctionnalités de Dapr, tout d’abord en isolation, et ensuite en utilisant son intégration dans Azure Container Apps. authors: - - Louis-Guillaume MORAND + - Louis-Guillaume MORAND - Lucas Peirone contacts: - '@lupeiron' @@ -194,12 +194,12 @@ - title: Product Hands-on Lab ARO - Azure Red Hat OpenShift url: https://microsoft.github.io/aroworkshop/ - github_url: https://github.com/microsoft/aroworkshop + github_url: https://github.com/microsoft/aroworkshop language: en last_updated: 2023-01-13 type: workshop description: Azure Red Hat OpenShift is a fully managed Red Hat OpenShift service in Azure that is jointly engineered and supported by Microsoft and Red Hat. In this lab, you’ll go through a set of tasks that will help you understand some of the concepts of deploying and securing container based applications on top of Azure Red Hat OpenShift. - - Louis-Guillaume MORAND + - Louis-Guillaume MORAND - Oren Kashi - Ahmed Sabbour contacts: @@ -208,12 +208,12 @@ - '@lomorand' duration_minutes: 240 audience: students, pro devs, ops, admin - level: intermediate + level: intermediate tags: container, docker, kubernetes, azure, aro, ocp, openshift, redhat, csu - title: Product Hands-on Lab - App Service url: https://appservicebuild.z28.web.core.windows.net/ - github_url: https://github.com/franckfotso1/app-service-workshop + github_url: https://github.com/franckfotso1/app-service-workshop language: fr last_updated: 2023-03-13 type: workshop @@ -224,7 +224,7 @@ - '@franckfotso1' duration_minutes: 120 audience: students, pro devs, ops, admin - level: beginner + level: beginner tags: azure, web apps, api apps, app service plan, container, docker, app service, csu - title: Product Hands-on Lab - Code to Cloud @@ -310,7 +310,7 @@ authors: - Thivy contacts: - - 'https://github.com/thivy' + - 'https://github.com/thivy' duration_minutes: 60 audience: students, pro devs level: intermediate @@ -325,7 +325,7 @@ authors: - simonkurtz contacts: - - '@simonkurtz' + - '@simonkurtz' duration_minutes: 420 audience: students, pro devs, architect level: intermediate @@ -355,7 +355,7 @@ language: en last_updated: 2023-11-10 type: workshop - description: Discover how to create and populate a vector database, create a Web chat interface and an API to expose your agent to the Web interface. + description: Discover how to create and populate a vector database, create a Web chat interface and an API to expose your agent to the Web interface. authors: - Yohan Lasorsa - Julien Dubois @@ -369,38 +369,38 @@ level: intermediate tags: chatgpt, openai, langchain, retrieval-augmented-generation, azure, containers, docker, static web apps, javascript, typescript, node.js, azure cognitive search, fastify, azure container apps -- title: Azure Container Apps - Hands on Lab - url: https://markharrison.io/lab-azure-container-apps/ +- title: Azure Container Apps - Hands on Lab + url: https://markharrison.io/lab-azure-container-apps/ description: Hands on Lab and demo script for Azure Container Apps - language: en + language: en last_updated: 2024-03-14 - type: workshop - level: beginner + type: workshop + level: beginner github_url: https://github.com/markharrison/lab-azure-container-apps - authors: - - Mark Harrison - contacts: + authors: + - Mark Harrison + contacts: - '@markharrison' - duration_minutes: 60 - audience: students, pro devs - tags: azure, ACA, Dapr, container, .net, app, container apps + duration_minutes: 60 + audience: students, pro devs + tags: azure, ACA, Dapr, container, .net, app, container apps -- title: Create self-study Flashcards using RAG (Retrieval Augmented Generation) with Microsoft Fabric and Azure OpenAI - url: https://moaw.dev/workshop/?src=gh:microsoft/flashcards-workshop/main/workshop.md +- title: Create self-study Flashcards using RAG (Retrieval Augmented Generation) with Microsoft Fabric and Azure OpenAI + url: https://moaw.dev/workshop/?src=gh:microsoft/flashcards-workshop/main/workshop.md description: Learn how to use Microsoft Fabric and Azure OpenAI to generate a set of study flashcards. Connect Fabric to Azure Blob Storage to store the flashcards and QR codes. Generate a PDF with the flashcards. - language: en + language: en last_updated: 2024-03-25 - type: workshop - level: beginner + type: workshop + level: beginner github_url: https://github.com/microsoft/flashcards-workshop - authors: - - Alvaro Videla - contacts: + authors: + - Alvaro Videla + contacts: - '@old_sound' - duration_minutes: 30 - audience: students, pro devs - tags: openai, fabric, python, flashcards, Microsoft Fabric, Azure OpenAI - + duration_minutes: 30 + audience: students, pro devs + tags: openai, fabric, python, flashcards, Microsoft Fabric, Azure OpenAI + - title: Product Hands-on Lab - Functions url: https://microsoft.github.io/moaw/workshop/gh:microsoft/hands-on-lab-functions/main/docs/ github_url: https://github.com/microsoft/hands-on-lab-functions @@ -439,7 +439,7 @@ tags: azure policies, azure deployment environment, github advanced security, microsoft dev box, dev center, azure, github, ops, csu navigation_levels: 3 - + - title: Product Hands-on Lab - Platform engineering for Devs url: https://microsoft.github.io/moaw/workshop/gh:microsoft/hands-on-lab-platform-engineering-for-devs/main/docs/ github_url: https://github.com/microsoft/hands-on-lab-platform-engineering-for-devs @@ -511,7 +511,7 @@ level: beginner github_url: https://github.com/HoussemDellai/running-llms-on-aks authors: - - Houssem Dellai + - Houssem Dellai contacts: - houssem.dellai@microsoft.com video_url: https://www.youtube.com/watch?v=INOeJg4ECh4 @@ -600,3 +600,21 @@ level: beginner tags: java, python, GitHub, copilot, AI, csu navigation_levels: 3 + +- title: The Ultimate GitHub Copilot workshop for developers + url: https://aka.ms/github-copilot-hol + github_url: https://github.com/Philess/GHCopilotHoL + language: en + last_updated: 2025-03-10 + type: workshop + description: Discover how to leverage GitHub Copilot to develop your project + authors: + - Philippe Didiergeorges + contacts: + - "@philess" + duration_minutes: 180 + audience: students, pro devs + level: beginner + banner_url: https://raw.githubusercontent.com/philess/GHCopilotHoL/main/assets/banner.jpg + tags: JavaScript, .net, GitHub, IA, Copilot, AI, csu + navigation_levels: 3 diff --git a/workshops/github-copilot/assets/agents.png b/workshops/github-copilot/assets/agents.png deleted file mode 100644 index cd6c59c1febc83b1b50f1506b81cc7cface0b084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25756 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 diff --git a/workshops/github-copilot/assets/banner.jpg b/workshops/github-copilot/assets/banner.jpg deleted file mode 100644 index e1ddc32d4390fd3321065f6f146049c4f0164d15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78604 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

iG?oJjPlVYY`K!=9y8d$AeC#U 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 diff --git a/workshops/github-copilot/assets/quickchat.png b/workshops/github-copilot/assets/quickchat.png deleted file mode 100644 index bbe86c0c3680c8244c62826a2b1c097b18a02d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15720 zcmcJ$c|4Tw+c!Ryvo}lUutU|M)9@y#KM) zKll8$G@Y?b&mx{|jWN{!f_LqI?^T2fF-P=$_#noI%({rsbI;Kfr%Io`57gsbctofG zGDEBClI?EOZ+JZnPKa01_pDkMUpYEV6xPs8(h=*XVnlatxX=cJYZHBId((_Spqj1R zV;fP9atc2jrP$?poT+tHwdcRB1GUFyr&^M~24sVp_uR#;0UbFlMcNXj4hVkl`WbTD zUyL=tM@NtU$;Bt(Qlw}>R&A{YIIuYmpJ=}HZ5Xrs-t-;I&mtZUnXIo}bURi&%r+0D z(UH(5=c%_%CLz6bru}#9Z6QQ?$rO~``5D9RD<3^n51uThFBWZUkV{RtMQhsGe~j}{ zDDO+uZVd6> zKs+(hPT-6xfIhuoYBF};&7c_%#pt|m^9|IZG-xn)aqo!UMrZk$8d>_?;Hq+8%120% zuG8`5n=W&zL#O&7~f zyT1{59`7U1;I|kwFYPEytb+=C6Q~GH`jTDf$A}(7AAJEr&bq@*hYJ551rvTRa+?WS z{^(bLnQvD28)02);0&eky-07DkZ>$Mz%-@+}*K6$}Ox047)bg-6 z=jzf8>xz zxjT}KK>gf-`$&?1z``S3MgJf?Va(uC%IV@zB2HNZ=DaZc=)w%TI3AqXg;;u)&-uHm z%`7yb^=N#hDKsmUi0cVf*5+NEsLYyecT#u)`wt0Ap~EL0!UE%kq9s z>uc-!XY3P{*qg)nK8Bf79M^osA=; z2G|66()Mz)VqOQHNVq}kj_A3(eSp|P=_YN@JWs@Wc|aqEqsSvcSw(`h>4LWs3D`$Y z>)31j*7(hH7hrD)(owL10^lPAEjV57jm>sTSy-feD~-RgH^6 z^DvpUQ!=1WWxtFW!h-O4@jhLj$|%^vq}F*2?hEb2j($x>awE$u3Kn#yO`&^|5O$b1 zK5)4w4-4amjVBEI7ZdlGlp|k+GtH0(N)ZZ8Rjet;vXOvJ8(il3g1F1}YIchv#AUdj z8@(Ugbr=3U!P_Pe@etoDA`fQjgFrfODcRZ(&f(WX?F1fjCywC_ zf>N_7+kPA}>qh9Q6*+5~U6og#bN2{Av3gN7;oS+C8ns^u`?++^3otZt$~7Mc?N@gUm` z1hPLBY3V1An|hqQ88uIpGSPT&hP6F?Lg`hz79%;5a7r+@rYy`w1~qx~xO<|&OMX!X zMG`-OT|3Ye19!S-Yg0E^b?CC`X4{XYXLtI4+qgc!f2JD{uhb?Wm0P#O>~^-A!`qbk z>A)z>S@~zxLub^#MZ^Wx*-4yVJxI=sQa5dHY^UJEc{LaeD?A3_MXB1aVoFl)#-tRc zN#`!WZf8MRbxrn9bOOnu?-~xpRceqX=0;Ry_&x#mcHMl~q`5D?IjMY}TdDSOV}$9V z|E1$2w_Uc6XI8cQ_n^Zr_<;{d(3Q-P(Betj8W7_O#1g**MWML{kiviT-Br$6JBQ6H zQsX{x37EHDv@NoiDobNzT~yU)$z}1aXS9J59J-$4lgN>Vt zeEgIZo&I}zos~Msb#@icO8`iJ;8EYTG;~G-{=^~x2y;?)Sn5XuKm`K1CU0B8eBcwv zUgdvs(Oung_6Ld1WwL&4e<>$p{{RmdyGWgFW{k5hj$OdC*veXLQO;T7}LSq;}5*e zSo`As?f+X4-Q8f#b62P=ndxii(+!o8QhpH@rxNeh=7wGm0v)qNrz)(S@qMr0|H}lQCQ(7iYck9 zhx2M0tke0m(}ei&>&bKsf>qGYE5tc){AGyl`#91dS9^2Gv6PFUbxXoJ#`H*(ZZNqm zM!&5p3@YCU-Ise zAHV4+ZAS~oIOStPVk6lj#=jT7xx&a zIfzva7-p9+9aM@N>=veVJl({ezK`=aMIUBol6X6d@7(s|u5Hu#&W2yKAj~mJF+b~( z4Z=yiHsk`NQ^&j9J(aV0bmmAa!ll;s7{&O7w_jbC&rfs?wrjHZ%03pn78YC4IR1V1 zJP733H@<@e1isd=)cby-2efZIR?D#s=F1!}Bcn5|4%1iwEo}{t;`CT_2C%Qz=69yy2YS86w~h zh0n*$OwhTGl$+Q_vq`Oo$Er%2j^TqyzfgzJn8 z(Xg=LYH3-NNQLz7GE#rx?a!VW=+2jOk|Ju{MA=_YHv8B~(Gz;FefP9!^!kva%nS4e z+cuoZ36Cx9(bmJdl+$7QZv&T(`e^Q%`N)xLtlO>QQeGX2yLA}Ssko*Kf8Kv+&u}VAof%WDSlPUEFLBWscDhcj*p|0SD zFNT)In4CK1R36Zg(RG|X+x%g;b_a@MIXC*nrK&biZ&VKCh&BfT7ak}4^G)k4M|QTh z!N!A}y+xdJ4l3W;CD&c!nn}U4-r~nFO*3IHmVXdN8_0{zR+`mmen|x2J$UHo%ndSU zy=Mym|MoFqb&(&br8}HXr8JY&cj9>C6|wi#OtC?}yDcFv*GD!g6t`5H+I)I%G1&d3 zPGM)un+8TCb9(Vy ztxKT%UWR!M>yj4`>oAL(fk>b##e(5>eIZJBv*xE~5B{ns`4n$r!t%BF`B)v4{Rg$< zvmd%?F^bZEw@3rXpS^n(%Ku#af10nq;tp2L=F_kZw?!q~-`Jk|h$d6~^n!)^Z{va? z-cKeo6&9*7G!%f}kLmC4wriv+Abw)nhD}~gM-K{v__X^a2iCWJTs+rj%b!*-W9CBOP~kS^DWe zczbtxvn4!RPFG~?*&Q|im|fDI+AX0=&jZ|VtlMcRKd$)BOD8?!hn5~#9w+V$@E{e zp8f8MnAx3fg-ZwCCG4QCtHtd$9r3-OJoR5Q^7UccmbmZl{~ndqr+L)Y@gZy5Li9?k zXerBbHTpk!TDQif&&g&_hK`J5n2pYASMwg}BzOxlx#v8f3nk-cI6X##`ex>j5_eAp z7dUrmdnGP#9$8%V;_v7-Nn>fr9I)p(?WHjhzEeAS_+p1({Ht(nM3Dd*jE@o9y4zCr z6?!u(`_cGo@@s|zH7W-YdM`>@q8xZgr>x)<&3xz#U#HU!Z_TR9b?HAK8c`@ON;CI0 zi&Syw?8`#;`7WE@(qpHCKtR}5J7Z*AL*OC8SAro!rTm^x9^maNYaJJ=bL-S&J{`Mv zUEGEfCgHm*f~(@dIj7#a6%Anf9<*^C-|`-hC<6+=s_XqGMIoUwYN+C&(ZSZ%w|>`@ z6K;eh#C-;mI|mu+5l=MvxF`kBT#t2ezNOkS(C0YDyDfXB5#QOz*Qf7uPo`_r@=o=M zfi#<$lqT4VIH51wT-a~socJO8FkX1Oqm|M~yhit?A_NyB3KyvPt%kc++ zC2Tk^(T3ChbXcKGF(3SpjjoQa7gR)YM~<^<63&S(AX1z)A`j>MC=xtp;}TquyXYi2 z&?ya+km0#_rQ$clG)HxFl>C%vk0^U*!``Tfr?<+ms;ICrzE zUjv>nPaJ{RN8NwpEAe@FYIA#sX_bAq*;ig1duOfZq-5-z*Vl9}!Ui6~r9r=_I+Bk{ zc*U^~8L7v75&5ux(Jfxo9v*+xd1ddcu|=_YJ`#uQn8+%d&0JWj84(DZXz zkZyccHm&O zos;~f>-!moilhAMX==)ZBUQUTfrnt>pQj}b8^2o=5n|o@DIafj8U8vx7M!+-a^!I| z=0wKr?~yZ9-WG~}jcs}0!S)Kzu@jXTTRMeT-z8WBa(#~4jM^krA+2AY>Tomfj<4$2 z&P~Tj|57&V{^+f<-&Cd^HMc9~z5jw$HJD;>`a7XAD<>`0q@jDLb?rcw19Bv(a7?Ym zEF?jZlWL+AIBIf;^6B;YlLfb-wsYpcbeO%tnLS`00y(>WIoP18Ix=E(?|x_IVyWUA ztVD~*JSI1&U(=k#bU+w;I+Z7gayb~>>^jh=Jv#ck~GQoE$ z+W}ppw1LD8OZvs~;=YY4CY|L&Y+EJQGY;16Ke(0_*AmcvrF2$?`g0(M_&t6!d_4)J zoaCNHDWcz=^61o;LwSx&hBtC9B~<+dX0+&2y2D$ONZsMFCf7L^iXjejNJnO%oU$NglS;zk_e8N8u%>@tg1ET{)uGm9?Jq z_N@B3cx(8bw4d!teeQ}`MUA)K=#qKWl$cuVbKyG*~6Apt{H5wEMwm-Y|b z>UhCa!8wQ*a+up(Hk7_XjP)gCnqX^+$3HyHe4@$fR?YK-mQO7gf1k~9CVzx;CdBJN zrxF!8-5us7OP2DSm-=P*Y>thY&=MX8OPc^L?7>R48)`0PK4Ts=GPI2g0=-gQ!P6?# zM$`aWibT``Q00hW6inJu9>|+N9nxZWYz6KDfeOn$OPjBJaCDGb{jIFLS|$f=X{T-= zB}Oid17phB&a4fE@s%4ZHIo>H;5$d>wo{FR2owc=Q*Sl1HEuKN3tJcr0W z61V3(n}b`fqYVv70bi&3!s)V))q7cF(SZQo-jY`7-CXQ+Dz>E|4IVLPBWQtOdq}^( z$gq_n=ahiLd`WDs;>+~QKGyHI<=O9@aeF7di;Epo!hUYJZ^3&H@fc;StQUS&>+hli zhFWg&)&>LF+KCgBwT47vpeF$OtMcvlClAcGbh}1pMLayC-a#Mv4qU$XJ#O(@S1idH zxv4N6kXq;l#qM9(j*GeWFVpAfkrI0Nhlih4?vRs43tytG*8xL+`<#(Qne}~rR_H+% zEhy<%ix zs;Z*RfZqq3oe{wM~dUaulzbvOAk_kw}qqa(DlC=4>zWe!aTgTPCwkJuM zADq&6shN;dH+zM|#XLFa-gY#Ag-HtDIvql^59pX8v8}BE$#l~noD5Ibh6pCSNBqS7 zenQIVLX+{3L&M_r2JZ;yd3*VprGR zM*eB!FhMQw9~E|nM!24h&YDR=|80EfuZnRQbcC#*6%Bds1#6LeNES8kBON(2$BXerNpl%1*>Q>4JTIzV;JZ;Wta(6Cp}($)^Y z5T{cgBNlgupBkUxoEQ1rKP*O;>We+<7i*9(m%taLxr{1S3L77I ziE<5gzII8+y&@B5UJx{-Hck6}*qy44I!16=SG#{aD~HfVRI|X=5nOU9XV)e1FTxR{ zL2~o>!emSlXD6P-PhWOOe9z1mP1od#S}4^0bWOq2nGC`j5LsJjVlEu4bAV%lC%DtS z;3d++&-nVpC7sbzDSlCZA9=a#mp6XkkB&9hSISxvj&zX}dmQ-Be^RACyi{m$x=SCp z`-XN4ta^5$dRh_!<|A0NYuV>BeA{+A1a};C!Czx9OqWhpMhu5wYnlSgkV!05{Xx^_ zV*b!TnG4k;eWu!98YnSm=X-8g^z4r*WoNYR?D4KOCp;_l&=4AD zW;{cll!rb-z)e!5Q}V^ssXoI3!adC((oD_3(MdS6*92iPy#H2&i@OdB$4*7;;MY(& zrI;XJ7y2t`PCkq8I4vZQF44(6r-V#s0arN$OcYX)C_RrlLgjjptKwq!#ZAH98IpjM zKzgSz(KqXa|4r_4z0v9tv)p6`Un&sju>$GeL5wIcb_ak}0S@6(Rv1{r__Eb%8 zdiIQR(pcyubC-pn4_3h0)gKU-yg!|tOwgxIEX-T?_vDKRnK*7KhW2fNco#7k_{~Mh z^bEzss0dD>=Fw^VlbO~uCbxRtsrg)@ra0IokkjF^!#fq*GwQnmxFa zTZ~k6hUGw?3MbBGMcm<#-&jlh=q-p%*zNNP>gFf=MtijwZo9W}pXC3%9(OzZs-RIH z+pW~N_!1)Hdhk)+w-oHWQ`0x|_1DT=nztIc-u5p-hJXPvc4S(sDzla*;m~a6>jzKt zo4bu<-Fs3p0%@;%K0VK&Bf9J;-#Z(aOEYGHtiL;Jy;;dKUeQ_4#6dGb#j6siHy~L7 zly}p?Cm#|h(k>f=-#A&*&ty`l*%Tk`8MRQC-*Rlo@q*%ib{5S6`+ zTavI^x>q&;OuE}inzV|i0Al*`Er3V?q%8L@#Ei;*_{OO%TQH{&`|TGdWXl1AvFCm2 z6Oq1N2rHnqf4RtG1@=Hvmh#p%s{lyd!*F}II=drO%6tou4+FypprY_*&nf~UxBVMt z3-zMZW8+r33HK@iNiMGhOrR3NMwIfQRaET$>u|5S%#1#2qIT`F(348WT z{d_Y1mMHkScm&1NTMd6OECf8TVQyE$b5=oagPJLYutiSo#E+4%aoI>Pk^kD8Ki$*( zs`mu~C7hqU164|E7}Dq+fn$=;{x|4A2)4T3^L2plWDkdq21f!B!xTIc=x*ONH8stO z(4*yETs#Y}#qV2VH9_^XBm;#PRX|kNwADQ!{c~QQG=W|Cs!?Mh8Mol$EkuJ|HIbsK zNY1L1J+_NfOtJ#YuU_csey;?w$UT?&jI3#SiDppP5?1C?Pq2iK>rr}b&KB3N2tkA!0m;d-2B!f$gPhs!Q@SvUD) zeDt8dL3mQ!hK>f(-3J4cF#8xx;_c-jVT;i;KJYADW?FlkiJGqO>8}8%w4W!mfse)V zQzLmxxi0kl@d2b&m$f8WcsAonD$Jo4XC7NI?O29$u?sKa03PzjYLG?xMe4FImK!bFZqR!7(3jPt)1(# z*b<^*El75sNWeEg3t<%mmWsY1RL(c0LU6#OJSTn~9M zu!32Ft}9AbFOGGFII2kC*MuYfcj!)>c2>vr={{! zg{_X$#Q30$nH=VR8h0s3&0G+K$;H1;9EKBg&}<;-1q>B9!>J3Mq4nbuz%tt+4LB>> zi>OY5*YEka-lm$KeKFFTNLCzKbdnKNgb^@#5LIrE`!{S4ys7&Ol=gDQYu)2vTS=d` zz7_7k;4@9}-pfyD@Wg{iLZW$bL=hzR<%7gg32W5%^~VIgTTsHYc03qne#CH;f@ zMzn9pQ;$d&rEonOi})>M5VFpx=FAs@Oj^c_h}eZWTnk3&dPHaKww-z}xU706kQU@S zZGMZcyZp=WdKq@QMrSYurUkV3fM^%6xZ`^_nxVMgmdld;B1JTb*Sv%aS^kbhBE#n^ z?<5&bYhgTaL23tm@_t{ek{R@khaF7Mdz5k$O3ihIi2laeNRgb6`pQI1dqu+>B4u?@ zm#ChJ8T>2Az)Eod=eAQuadxVyMq5^fi~ArP2ngF8%Z67p`6Hhe!%fID^3oOLm0@5s|E7K&fDGBe9QE^UVn#Ps6QSpcXpsbPbkBGiCUD)Tx9%fFP{616m%caM25g>{OriP3L02ioaf{MWZ5wGWiQt3 z%DOW&XFXH-;VN(Be)CB4SY>U-VBoptR7{}dS=ue&oY%m67ad(JA@wOn;%|9R3dF$~ zB>If-F}H>)exUxfxb}4|>mz;*$Z`LwFV~-&Z_}^cAg^A%4CFBU&zCme4)@Xi&r|*? zR)KeQBi-s0JoiMw0!*!c7XVn+tG-?Jn?79lFmhpoV4`J*U<5t8dYA}9;Bv>)a%c17+b@zdMcm8%3ZV-4BNQPzpzIdSW&G$!6 z$EgM3z?L;;M~`$ZwRcq~VrJZZmnC9JhpxpPorW8mfNx^j`dGf-lxOr(^@@)TAgWJ^ zC1j+;Xy!3aGL7S7e-&U?n1zVb%u_`&z0XpycapLnUN>fBr^=v>ey?Pc<^xXTSTi6s z?)XYx5pS1~EV{M68yGqgK~TJ4tq$P;63U^x2kiJy0qnjvR$l3Pcw){#-ugI@tozwx zIMh$6u`9)dEx4lf$fvJj&46{>BwIoTjmt~?f>s9LPV!Wz=g%H$s@@^@8h^y>i058h znTz+VKgQ_CW9N&T3O{__V4hrGx>7XA>N$C3;@3IXWMKOq4`nC=Gh8OBZdZ=71a3jE zY_Kb4(&vop+5SC@$`;bx$}@`rl^P|7`@t*m0q7I?Pf5hp^$)w?$PqwA4;y|r3@x9y zyAqs$`sG$*3XrttZ_C-3Wuf=VMMs_gD4f7@8bW4aOQmT0FhL+OWOeis(69T`Td!q* z&gejXUKgt8Jxd$PVqm7~ML&Kv)HJL_SHRbAPd~=U45`v!)ilozg~$h3&US3LQe8{1 zdqA?S8uq3YcyUCGsr73{>;$C?iH2t@?XnJfqvLKC45YfuV{U zTQq9r>w`3DE9V&0mS2#a3jQqf#?KJPSiha0 zbo}x!$(~_JLxV<^{r35lM|4%9{%GOlXhjRoe&te$leETat;==z-wFoo6^0c~&aA3P z`Q*PUUR(a9-Pl#0322=)84(1K*_NNzihg6~c$iS$*TkVBv~d!+jk!W3@jXia=trjs z{-JfnnXJ%0gRua!#JM5ub?_*`=-3+Ptyi0+YJn*V^GL&t9{HWKG1}b&#&v%h-ML zMr`fVJ~Nrbnj81ODd~sFW5eyF z%r#CW`Ln|NqTrgUI^e0W`$1V>^lyd>8dt5O1iTSt_ad9J@cgvKt1n6Tv$kZJ@yWGL zYTVPj?w0)U3o6_mR$8{wL$YJ#;hxYh1>wh^X@_?muBX>mZ4jugoSi$s48OLZh=1j& zM!`5cNJE5bfU0>g8n$>^pW45hd&b=>%ZHz+y~0Pj_ZQ>hdqaj{EdJ{Dik`%qiv_{n zX!qNj#}IF`>A0RrYEO89d*U{35Ke##=O?9(JenzMo%o z*2Xt2*q}g#h$XvYv=lQNorRKAq`c)Js)absgf`V@?XoeI>e~#N+AV%Ee8SRi2&Z}H z)M`THX$0^fCi_Ck8RzCt``uPtKJR#F)kEFOt}>2Q}O8=W#wEeYrrF!{)!=HX-OXfrxEPeH2JI?V+ zA8P1z&p@9g|7D9vw~w3A~AUQt<6p8}y9S}7Uz5FY9%|0HA3B93i6`c>pF z0vZ7sz9Nil==Q~|S{BC}H|^4pJ9hX%Ju$YZKiex&`_1eMle=OiyDU-9-;CNmVO1@o zSu8oNAHtaUiTlM0CnFTH-VGOZf7(eMFSrwuA!Rs?Xg;?#=Rx}wnt>%d9bHnpLJjnw zdTz_A!EAlMHtoUbVReg5?JVt$04X1Is`H6Ojx9OEscnb(@)d|kioC&?wJYn}AV`TP z7*D^e#4;_$MrFwdEIw~fNp!G>tWP5JuO30rwPnlM--Oz`lV!A_Zxy`T$uIOph?!Gm=U2D85pq0v>a_Et30U)kC)DH)K1+*4Zp?SFEI3b}g+{+T`D@AK)GN zR>?vPJVNc-?Xy>BF8~3dFW0(hAmywU(PT@+@EC} z>;+Hz4VwXsghQPO!Ts74}h>4~{4Dkss!Nc?&@ zPMTyT&dFH1xngbE^1xW$3LO&oXSe4+8ZpQIyY9^Y>0*;v)W~Oamu=(*h~&3$Sb(dE zK8N#;DV>BIQBWU&P`~2f8)>t(A8l}p8ZNjjF)dWmweJt9fx6q@biQEc{tbBe+^al*X)mpOmVDC?t=GSoVVD(JdtDZV9g(Hv@kYw?oy$E8 zhebJeRvH*711~LS@6m?pf!7K$?=}Zo>c7Rv-=Z#-Q!Kld$2iA^Cf5zlq&FqIs(f*g zk8~bZ0CV)GDCUfF)jnC#ug8NRu1*GuWz22diL6&sSm;I8EZ#qQ#Hr{8lw7{tahthe zB`P_@Xi2Ku$~J1=2w>}*B!n`T`f95(p(Uwmg(%pA1@N_RVOz)G+KI|cfZrqfb1dRMk*8os$mmU6PCicW79s{|)<9q$E#}q? zipNEbuQS@2J@(<|?Ms0+VR}Pt!Mc1C9f4zMV%joepu5JSIPi`CNX~c~^F{l|xw^Up zkuE8}5`9q3m?SqHks;8(Q101{aeU_zpX-tcHMRGCdpY?DYr2L?xK-3!sn!AqoKH$O z;CqZOk(0ow!&7I9i!5|BxDlUZG{i&nbvSQ*Jr^>k@yhih!YF;aXNDWn`Py^fej z?vg>p&K<4kFFZfcFo}BQZi^B7e=)QE@r)(p;78>>p1mmT;I$TGzKVN{W)GP$oPQc3 z&Gj+EVYq#if(TZZU(nDsv#x%Dt@pg)dG-~SU+4JZK2v$Lx{%o)(bX?RpGv&miFeZK zyQ_BeGZ33P8UYkev5*ujRw3EDuQ%T{Gq3S^hN<G{u!W_J|9kqzzX-}?*4sR|s#n zVCBbaoM)wNa@urAoRU6d*FV zTt9N|bBfNlbeYQPlA;GuMUvBRFDKaTI&OD?pjf8Y=!L20MGfK*CI$SPCI!=V=btuu zzG`NK5#OS|`}J56>LC@_O7Tw#&yab-whbO1EA;GYe1e?1-ceN#k*FJt2d$4E68D^( zwQ4i(4~I<>@ITZSu|V z+SiUWpf@p-prWh35}>~PC`O8e*`+;1)S*mXZK>r{gLT zlc#46Deq|inC^EH){E)i=5%Lt29T(^pE=|YyE6LWBK{%HJzzJJMr~q-MP8`&Bnmzb zPYE73S8|^H=i3Rx2MOoVy(YQ2cueF(7k;wFupVgdI$~u2a&?=dqIj+&Pad_%30;Whm2J$etalOG3CWww+iZF+!RTtsPCkzV1!b z{w2UsN=K3>BqcqPdAXp4^bk9aH?^7}Z-P~yi-Zn(nvMN2a4?sa|j>d0@N zpv^J&M_C2A=cev+MY4z6JJ$94j&W&*im$sRH(lDc=lHugQw#oWwC16(TdZ?%8^HX5owU z%jyniuN`MU2%7@WcjavFFE^>U)v05S1sv8O`dEJ$Y<$S8CM$1=q=h1hxD>|wmWKnxkL*f*X+m@n3U;79?rtQFM%501run{krRbIt4< zW5Y^;K;;pLF<*ObM(u*84#(&i56yiQ@-ZU0>JHW}8{Fz!ej_-dc{gpL7$_yk4?~G7 z{0ESum7O$c>yK5WgaUD5ly+4-SVxV^&jb=vmbrkmzDr}}zI?;$xBw^yp@OP;Mp-4*|}9spDp z0Cboktj}n+HQx8_!4ajX;l8R$BqlnGHEWHN|B{Ba`y&wN2%v54aLpm4+)0Mvd4O5{ zvj9@_6KN^xJyl+$8P@pbkhr1kTiYVlxQrz?$Y1Yxfs9Vy6uy2Flvr@PdxweaO(NmgqqMC? zi^|@r-yg_6^dNr(ds6w^zFQq;ctlOzTvg7!aE3Nx-xq!4jXML-(_|S9WZ_!cBYAhK z?<;K&|AjL5YruQD5mUvAdxOqJYLH*JPW45>>@G9qP*w?ffyFTcu+`Szy+KysvPN;l WA=>RgpP7}jan9z_>0&F_sQ(35U)kgU diff --git a/workshops/github-copilot/assets/src/completesolution.zip b/workshops/github-copilot/assets/src/completesolution.zip deleted file mode 100644 index 42cf96100eecc09d42bfd2e25cae8532478c9dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48956 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

$_#4|3*ZHM$TY3yItBS#)fy8hloO8Jq) z1oYwsK=LzT;{m5l^2I;S<4(43lp2-P{Kn{aY(|;G4`w*hA!8Q<mA7y$9RD%mdHSSeT1SX zk0?w&wtuL%hK$M(nN=eaDHbDaUCT5EqGN@q1942(Nim&pQ&RRI{by%wz2dEm$`|HB zv`8WV%~J%D;V(;om}O&%Ze-6r9Qg8$c;6s`Y%IZ2Q`wbZ#ltDlg#>N0AN*VcBL1j=Db`%VA@)TD+ zL$Yzx7_BuK8e*WSm~)8m)y9)PP@|_^;;X^uBZ33GlOwMttD2mDcq}@I$I7Wegu4}T z)ZAdw>goKaZtc2G9n9P}zMh!l10+%pUbBUv<(ht%(qHL}8IcfAdlH076a!s;O@>+~ zV@m$!183)FM3r;%cDC31wI%Q}r*889=Y~*2&aT9N>AHbi&Ae9|-(AQxjCbSYw8<^z z+mQ)pA866Gv*2}Tfc67gF%igGpbZ3O(eadVVX873LH6**bjuvf+H8^_zF#aMc-3J) z_6|q>14vhIho2+Vdf5r{@q>7Sk*`Le^A>vjv+(h>&#cO_n?XS`4T^-Dv!`H;?`%f8 z7QQyqXfu`;k<#7 zO~R7W?asS8eo9ysc=cWHZ4FgQZ?gQN70o4}YCDNx$^->hEko!@CZ|Q4Raq?53rWQf z(}t&~X}P9XAA3J(MNgfK3hsA_v9f}@rKuF52jLcfE5Vd9$d%J01NpT{g~|v5NLEN0 zvBr|ow9_p*H&*+nu5uF4vz;GbMENqLdh0UL<{|SdjV&99-8SfhFrKaMmgk>q{#;bc z1>9UE?Ldm`R-z#0tOCWU<(}v*#E!e6p(3g4jRFgBQ@RT^Yn4`_#V&o&@2d>NtS@qX zCw9}UDJ6Ff)FvcT5xD?2s4)u`DPtoc8YYM#%)1lA-e0z>w%)5>!1b0_!6y8MlDH7z z2=#ehn`(VII%6-u|2sDFxj#?pjlS8~h|fb*27G;PI@V*c&j2>7`ZkmG-7>B(Y_+qM z@;$9ecstEAfwS;}f{JCRwxZ37JaW+Na{BKAGb#c?e#_jo$KxR$k#wA&md0l-&ov>6 zL1m2;vIMFc)5(q~VDp^kAOjs*AO7l1*Oz3fEmy-6Kj-;Pc?C!Smqr#o1QveN1A{lH zkd)ZV+xTD8;+t{3c%)RtNn0&@LJ}N2`t%mti5f}WZlO`HLxq{nLH^^(sGe3t5C-q8 zr?!Zk{Dsi5J8Xnr0tSG|7GOB2FSm9VAx^CFXwSlNATLv+?W%cePm7wp{h_f=g5Dvv zGH~7TVUN+>uw_V*LZ8EIFdTyYYS@`X4=hpu$_fB3iQmB-kq|WI5!oQNEI!x0JhH{a z>^n|XyKk>n^%E4_w*!wsGi$fbDX2Z~9Tj~fC#ajLO13}@BhgB=4YE6zgjM5Q;~PKi zA2-ZOTkZ=2mAsq}ETZ^e5)WviPUU+JfoR~t}ke~kVKhXJe~i_r+}1w@T> z=p{+F9v2Sm9=A}%XhUO^nw0A;ynEH`g`92&cGCooY(aHTZmPam*Y3))thdx~NnOXf zrwU{nmk0^eD*17~veM7-fto}3&op6LFF-^t9l(j$-y~b9i?+b3-wK#|q^Msddm;*4 zk4OhWh#U+O%!8*!&~+iLa7q}7%8!l9U|DT4+|635H7l-nSqZ;NrRfi|AQUXT^A)*HkV@* z@%0&2hapR*!MEOgM@a=6UP7zPT%%`+-5t-^s6!@fz_^vaDkEK^T22NG55aMb7;)xB z@Z9)pI<1+F$3UErgk}qGB2n{}_Ab~IJH;36vw(o|(|{(}Z(n%VK9sPlsT|naW-}if z3FNQssM8^Bb(u8vUwGe6Na1?z?8wMMc1d`!6RZjCCY}`QhD}*Y0PeZCJR&?DqY&rm zla~BoV2iao=2s>9;Ez*9u{@76qr84a-tG(E89&t1yN$&TgD`;h;*CQG62J#O7u-HA z_~$UaNgj8tjzKjlYt^gtwrKy7*6()iiaju+W-j_5UU8<}1&WPSFptPWmf!L)6KmnE zO&xbNb~fKpIx7_%@5@T6`O0}BrBmR$zV1!H@E;<|kXhc2dGG*RYvbZDtpDf9yP(f&Wmfmac2Af{Uo9ocI$Gp^lD@=a{(ld_c(16>HTnY z>NS%$x<>0oUucW=vX#-l*PSz-Y%2|j{cD-EqU zHkJC_E^TFx$>5}$Bn?>$$M#1}E(FpqU*Fh0?1o}e!0eUZ_+O&Gx=LzY8|xi zn9)Em$w@+}rGuiw;UKYj9;X9#$5#JeG%iDxA<3wfJ0d3CE?LdQy__r}|I*5Y0-Y+< zkYSt<{&e_A{G42D+&Pc4zjr<0Yvb1ia~c(`}F089ibAS2iH- zha3D^O6dDu>?SFzx3uvy73>5dF2zqUv=4z~27R3P{r+kYuPz$au*JZF+E{89vNFaY z=)sHN{;K-ir~e)&7;e1FzU>YWf$UbOSgBA|hlXeA3f2lpsrmdZQ@9-x4tliDkdxPS ze{JW6uO0rsjSWnPLC1UDRjDym#rP^qgbf9rn07Yc-fdxso!6Rs9v8)v;xBfMO(01N zIp+O-`~as~e@5g2Q5O)_q;o3gdHj=0H`;5v5xQr>Hsw2y=0Gkol^Vge+&|LOkGseh zgFsyMTRbx4%V;bzcYd*e2%_*hRW%X8;)7%Mznuvnu2XOxyA2;o4|YNWePA!|Ar>s& z9`6=6JGBhOAD4ClqSHj}TDGP8Yhwv2K37TgkNnawKM0pmGgk_d2Jn?O5M?4BpvQM_ z@%QG(bkztuq5$GQc8DR2c9UJy!a;Q}@psu?Ft6EijQ!uk{V8UjJu6)9D+IP}oMy5d zH69^{XUL{@&&~SSJo;kAEoR}g`z>3?b6f8gjk%4}N>9bM_rD201;^K&%zCa5?#@K_ z&sYQYAHb2B60SDv7F`1sW?JW5hqgwr9@4jO?biPqd*2|OBEC9;4q{yYwJ)e$b4q{Z zP_b0!Ihc1G;!L4)oeCu4msxb6-nEkTN-e2Bq#5dzH4g%hQ(Ck*bciPkblG?skiB1C zQ(*RY>@x@I6r0Dc&L;X+)e$vYn4xi-9i~`{}QU~ zu2qP^i-Yt%5Av82GTk!Uo(hP5?<%;n;8YF0#LgVUqHNtqJ$5G6%2~-qz#M|^kv#OU zcc(Pxcy``9QQt4$IA;%-0ZZA*GI>Dy*R#XX$#qc84eD(Oxthc$*+608msfM{11>2U zWA{U!XqhBzxAdmF4UJah_SlJCnxEsSLTHf=8Z4)Syz$Qdw#Px*6|^9NF=W{1MzrqK zrsqC(s+8);4XAhCSWE|Erg36&qj6?N$e_6YiUL}vmH{tMj0>WdIrqmI zSDSK7Kg)@|=0*nEa_3dkfr$6Tv1RVzN|MV(PfrkQB@De>as;dlePh}`(J=lq$N}vI zXDwBRjY(QvB6Fo3VcUYGSyZ`=)XY=c7X>ka3Ccn+u>@}Hl=iE8x%{_DHy^n8o_s0IJTD5AeT6^!>_u0%- z4t>`cJ~yyeR*;(DQ$edZ6#G0ceSd{>>r=7Uf#MAXTSyW`&2LOYHI4{>&WGOVa9zy} z4g!NxJeLOBK2aVlb6Zn4rK>+XJk*l;-w#HH%k?+2ap2#^W-Illz;PLabP!3aPkT{`H!Jw)MR{?p8f8}#f|$#{xoT*)5nZ)(QhiQ%~A2oDFT^R($g z3#vWb{+ie^-{K`en>}X~C2az#ZN%^2aZu@|k z&P`X*`=s#zXFr1FuVzHN1!_v1JaV6{5vI@|2iG;?W&veClJ(L<^8jMFchx186_1lRKk1{DMc;z8x&~z;&}+M%+Z0@ z^ZrP~S>3(5AI@o+6A3M=zzn>gdT}(mlq6Y0v6Sxk0Ee(lwVMYcpG&cff$aH{z`T3> z@si*UpW|_glTIiwtc&L6ao;PLN<)~P&kdof;rNtHtVmObLKO4WZ=yv5TIZa@%CA2m zME0rde4fjpgj7k>$B={91cymE!Z@9n5=wuMdS9<;!a@tY-m7kX%yTs0+`Op_zB7w% zEcssX_#?GfK;5s+lMUZ>qY?w%pET0 zPb{RGd$9Tl&{QYty#2n-azGRQ<08A(SDi@)3SF8XTT_Ac+OB@L!@J(CYoe?Br|SW& z$tEU|>RM_RC!ZD+Q*tQPw!_QvSr9rJ-h@eAz_xG6C~#X}I;RQLU_kbnb3MhRYv~(% zY&`f3^4`pT%gDh6gy{=guN^k#Pp7j(vIHl-)_JA6er36>Expx1;}>8%D6COH4anG?EUHJ6#U_t^llLzzsrGrV{pMm z+uM@Z&ANiOTz2Cy^L&)v=80@2yu_WOMg{3xNPtgxm9u?e~oyawtR&70i!F(`6E+mYM0-TmQWHW22VU7*> zV2VUi`h>DZ&Z6+&NAA*(4Q&K-#$Av5-A3fbTvDYMtoTx#ToQPSYH#K>po$-L5{+9s z70sQNCuz#_h*!xnhQ|XvO;bKW`!a-uA2-WUyePK|D~ce)!5fn{rJHsbCdF8C;>4id zFssTboWdt+=@{buv`-&thHBCbMgM=mH_s z_myA7w4KpJ!QKE?DrSOrfS$V?yBp0KgJv*a@%vf9i?(V@FI75x;sq%WR@e@W9{GYo zUxgP6-xohFS7v~(YiINC4$`9aQO1v7NiVuAwlvTmTj_6Nu@2hSVS?RJAE2~1&HAr5 zkVTtneuNqsgG7&G!Za@~f=(3&?ZaS5;@@YV23$?&`i`p;G3@}X8h%bOT;9jjkiP>& zC00&$o(=6t~Z7~3eU_?+25%rhraxW^$-~&CF>FDSi)OI{gFXXpcDgUt#HZ|r_Ps27JCVNL zT#9*&k-LRTv+u`?4V9n6Ixb{u6ekm7MlAvzuN&3%8$51k587V5oV=v3x08O;&=VzSbjE~DX^nqYcZCymx7DGi05|iEs=iY;dC{O zcC_p-wi@i$jdo0JEY8R9O!G_$_n=^HgM8*KohJVGc7{o{H}M88F{3;JI`PS(c0V|Y z5#rT4MdoZ4h?q!kl3>(MR|AaoOK}p|5~R+mhkj(=3V#r)%5mJi)5a(+#rw#o(7b{a zKL+pelI#f4GrBjHa^;B#jj5T0UH_7Esb=4QF7|JlZIU@HD$PR60=d}cTPA@)^sVo?Ul+oyd@K1+Q#tCZB_jl19Y5ADpe?PZ2r299 z!oai=>mB4O*G5DX$>j!jIU%^3q`L!0=`KFRYg0s6msc&ZkR9E>$J%CQJ?8a~ zs6wxqv~fATsEo&NlQ$@}YM}|IKfx=uD-}4RTWhf{eUzJPB@}jXz#+A_^6Ut18#P|V zI1y)wSRm)lVl5DoCBf(=5$%4{aOP`Vpi`SlvMvA}V!YL00nV8o@fI*ZeALJrA-BGo zCS?a=!Gj6O`{)3;nCD^9sj&5uH-ePk&BV`#k&}+wA#+*VdX?vUVvw@j> zu@+jomRC)4=Da9fMNvkM z=B{KnE{556GrmBs zu`T1p_7dWvlSrW)iUsDS!`W4S19n!2?ppXn?^I!-)z~uCVGj@L7zUq|p@sB)RR;E~ zvQZwE1QkqLHf5!VEmtV|uWqvvbFk`Ly-|F4Gy1rVBC@*OzBS~oJ9fb^W9*jGa5crd z-%Ezw*R^T@t_6p|DlN`31@N2_gd^=0G7Akk2%Z5_Mq!&Xkmie{yh|_L_-Wa*a?GDy_$4gK}|KKG}@9SRuh$2&)lIc^WFb41{5N7n&udIvK)tz7y(_ zQ=Yxgk5+||n1<&d-jc4a7c}7EBc`$fg%t4F1u}>Zr;~`XNO(2S*}ql758Xd0?hKcl~U}ZYRiqB)kE1z!+nqH zLIpx+#-sV!MX}s5LG^>?)KcN(uvv@CmzKcm$#|rar6zHnyYe|nk%B{p!)wWV{e%%_ z`iw?>Q5QO!OA~JAy`6*wa z$cNT_=)IrN5jT+>Zs6&)Y|u5~X7%$#Pu4Yf8>oRjZx6|JcK<76Y?usv5u?oUy>R8j z7xvMpk(&JHG~_ZE_VR6(+S#bkPD<|c>Mug&;j3PqAithvbO!PszhyKHs)t~-(DUP9;`^m1+QhsEj@g+_}-%jaBgjTYC&GX0uzub-^8 z^!|7Fk%_(B__oo%Ww49D#gk&T$ueQt&-#)Y5~Q}##l-@)0RenL3xk#X$PZM8Tski$boA zSHaXK;KZD^d;=Hb9ldHHVf89#BgJN$u22jvO{g8?FeTe!uK`P10tytYI>SMiT39YP z%_D_Tl^F+wrNFx7iz&YH9295QEn6>atT47jukg8tw=n<5LmRd|JQMyfy8>eo4>c_z6baa1=uh;34$Pwv|7e*Py$yo^T{mb&&cr1p-q6WS52$oYRe+u^3U*@@+ z>=6e=@FV0vSd+rHmI0v0S=86QGb}VaYB??(RW05q z8r&o=ZhpHwv%T=T^*V}UWzO;G_k>)_w=tJVSh6nSkdjH18fm$$W zIF=;3|E*(OXdxeXZuPozH@e6$B2OZ3Dh*|-7<}^Xl&271MPJ;~r+G=yqnGf*O11W_ zP{m`Nt+qSH;|kRAHFulGG)8`gpMvVKlB+&ROca2^>(`Qiyq*n%VT4UNBT}42ujJk4 z0-t?qZMxphr{-6a!+d+_002*r2wD8>S&q%XPKC)dJhKgJ;b1pU>bzi%_2h2Hktl%L zLyH7o+(}q_@^$=}7~_x2^NfVEnSgHnlD8P<`H!zTR&Ivw&LtlC=TO^8QHMPno^mH7 z%GnNAIbM@Sv1d>V_v3XtDc@S1E)HupQZ`6YaE|fpbI2Ndp=zus1tRy7zD(x_Xd5gI zq^N45pU01cs0j@7mG>qOseL?a*lE8Jmke~Jf3#MrI9qt1HzW76RAmZJD4{R$Y6Av4 zGQ%*lQNAa*df!3YHxV{kBTpi8{|Em@V_r54EQs%=FW)HvG(uM9bWWTGAWSZiBc;T) zp`VrbC)6eQ$G~B@kf&U|D35J^J7_pFes+Z?QhY-#shf1R!T*w06P{FPgL zh>*y`-AbqTWLX+sF)>Jd}zF%bC)jC-^VvPD9?^g+B9RMO?)hp^Wdt*zfBC z9~F?k;t@+8DrAv3bKfmP6;KqGLp^HZ3HX8{Z>PgiH2p=DLWXYm3xMe>#Oompj>nCeyC&P8IsuL=YImo@Wi&Ni z$Hn26V%L?&S58r&M+bvV=leprO95pyJeR}fQiS;);yL!pWzv_v8%U)}!v22tlun8RjRzD^=@%W$n!l?vjn=q^^E zK=4EYcc(K^`J6j5S(upQ=OJ|+a;K@w2Ngm$@Our_>esf)w{lB&3k zimB0_q@%E%Rf-y0Zx|@L+k6H-dFfK6r@prVH&ym69s3BjwmgILz8^Vu)hHE%lfg*+?Mq>fiOJkWDf1M#qluEpM!gVDlT@kJm8FAJ$(k0z7VY;EF|7@Q1M1>wS!W zG+~c<5o!slhs^QI77f(To0{D=Frcn6~eltB6auAisVq+GnvKKP zzqsE9hCI6smGxkM{HHo4`NTM!jF1F6AZ!^?=SZGn1V8rnILl9?EI!(A986s&C`9iK zVGKV$zqU##rt92@vj1+0-geb9|i0IB8O(?thJMl}=e zAi;k6STs;h#R0a`JfSd~bZxv4C`3z`+*D%59F8qlrVyrDWz|DcKi{lpJ}`flO29pB zJndE|@=+6eP)lPiiXleHG zljiQ168#|)A_TyUeqn_)J{iQ>mT9~_^l$fsD5#2U0%;uHHLdZx%AK8g%F8Fi((`B3s=0|CIlKf!I#>}s?gFIu12?=^;lTgI7zA23ahR~E>X^cYvT89a1BJL`@xJFKXXZcWi zfo&ZnCOg9O(9otKsUE4xiHiOc&2i*Utstk+Mvq9VSLT**mfMMQZ00QR~>@xLs0X2>|9c-mTHvHpa8%A-c@ zSH6+2?SaOkn}UxWR#0J>)nT8tRUIOxUI3sRAgd$n1iUv2P0U%#e}t8y;5Ood;R7bm-s#Z z=?xBgxE5mHSy2J|Z4-gHe)IGVbi_&E$jHrVe|=MElg=^5*vjlnv4rN9Y zV_bF+)hFee&FPl<%AOvXa;Cb_U|$MFF`X>Y6;*$u)(NItAB)XL8LCHp!kfqMeUH1} z`$i%<61{m>7DtYLoe0ui>?tW`Z~oBVO!mBcd84$vaFNq%CYIFayTXeS6>EPx5nYeo zumETQ$J$!!uG)4jK6!3#9J*kGX7#O%V!tESwyy(kbBE_jVRF< z^2_cCr)oFZ)0C6MH4YVZvyzAQ%2=G_vbuIxkwwE(N4HP**4pK%Z{3v@-90wEhH+fa z_7o&2{Jm_gJ&Warg&$OjvZKzBKkj?=M@MZT-@^sALDo(>NiQA4r&5{{Bzzr%&=E}a zjfO#J2VbQNSQTH{1q9B{8bIAoV?v4m>}T3Qvz$sh#{f1St6fX44L zV5-gQgyH)_Mqr-j2zE!;loo|@CDy5*+a8x4uh2By*X5D=+4G%GpO>}Gbm4r(p6S37 z@4lR&sKH$z_9LV88{J+)morrP9yeOLy?v-@WAQ3Qu=CfPD=5U;1g!jxafSX3w@2ZF z6X|@p|hij(b^U|5s!Sb4mXUD*&(bX;f+x+~d9lHwJ2nw7=@sS!7uj8ja% z_yg|f_cEu-DkWJ$ZhC0WG&EW>jj*A3%EaXfK3BaXxPl%rj~vCvCVI`y4y;<+K(>AH zgpWV{VlfJmqJ9NyYJ5f_mJ!3-RYf-b3KF4g!e|6f-!YRy2cEt(f`D=Pvk)>UwZ=?3 zjVP;@C?uy*n%qH(0Sr_5IZ%56082MXgu9V}6u&s3^%B-gmt}lZ?u|a&!?%$&4n*+i z?d4#_dI>sEA@$iIYixZvV#e{)wGcOtpkz8nAad1TZC~$ z1?Sck$GrW=)w0&oeC^mZ)f*x$1Xp9vA8t@LJr+gIz8|osr^Y{3b&rhME+txq)aG^E zeNFP1p<<`^`c{+@I;S0buOHv_wPy{H&lK^t;dtv;NL5Fy6U39RL{OLStO`-xcta#D zzMrCL)0i%$23z#PYKzUj$TpY0D_D}ZZ)iYMBT%?iDZ(GO_$WPwLMOY9*Sq4M}RPm2D&N~e|B>(bkD30PNCht^{MwE zBMm|G?h0;G5PRL-N=@!MQqv}wGps4eF~XpB@q*HY-ytWzI@GoqcNiW#7f#{(D!%2p zB(YuIeR1ibk+r$l8>|fP~&;bucQ4d{ip%3nAd zlk$Hz*if%J?0nJlc0`G`)M6C|*2+`j+-Zp_V1-f*8^>e(Tus#!8x)5_bP0nhh8A&a zH#dJa0=VdHedJFDXFnb|)VAKzg2lGfehZ!$IG&o>Q*{|t-_-P-?dYcA25K5`PL{-% zHPf^=rj(>`C|)3?FQ&Z@X$T?eNbT5vt<_jT%jHLYr>^Xlod^A9OkxXr^OKC5m5iypS96f_{=BcB8n8%EW*?K*vnG~RxeBd)%+ zP2EC+0oUn}H(2O*W1rb0(dnw)OXKN)^uS$5>T-J9k0F-yI`6qREG$?YmX?+=1h%H^ zz1M~+gSHBdw)tSo#I@U$)BRnOdJPReLBQY?mvaxVZT$dKBIY!mihABUuU%@VC=_3Y z8%Vn_Eni=If@eFfp<0`BwANUZeSf-`3e#A#)CSieEjewt5qGIn|y4UW%j$oCt7K_*{0p+m5Wa@i&EkNmE;z>o1KRu=kt~p%GW=>dX(-B<1D^KOgqx_ z)Uau~mnT%nEt=m9k03tpc2XkSj;(zW4~wUBC1Xg!e-ug0S3yvajdV5*S&a#ls3l%W z7IP=i=vi>e_2Lw=CtAd)+mOKVFnBs^j;+)|Jv0k73+4%8z%$|sOfGrot_>rVaZyq)84OKB2=_~rfNl^{9xAAg?FsFABDMcuBNxQ5g51ZdR zS)-xvD!A&qP9Rk@%0rMqd{ERyNn8CI=^Nqxj5&epR03*JW-n?_s6t|c(5mn&D@x6B zI93Cb1}ud%SdP4>2IpC&q z&e!OtwCfh=d>ca&5L?jw;cU!E<-JB;9o%8j=yF)pP4e2_WLOnFG#9)UNNjH)*Q1^t zgO2cWi5co^yZJ|oA5oV%mwF2JInl-~E1kk>qieQ_FemyLowHr@7>@PBW~QhJ$#6tA zGS%4}sV-Oipak?-wL=2XMRQ_J|HCf?v zH)$iU)yDdW{DsCO4=q>S%Z%9zGRvSSscRZeUwtk^$FHd0WMCLWxswB4ZDYNflrb4p zqRT?VA`j|dS3fALsSO^&Ar4)+4fOmy25}PRj9WvW&fYRFb;0=NY6b2x@)eSw$%!(5q~sDt3Oo4#O%m zs3)L^ibzTzh_vK`$E*Xg@#tu#HV_bcb1J{Sk>z)jzx)%<`IF4SO2zGZ8CXW-M8Z}5 zxDBd>C!KPI*1iOxD(e8fgi*lt+o`UL;%-FgC7mEKgR>?_IQ%=ORe5}_rL=n#oSs;V zqX=klJCqbO=tU4;ju^-ss1r}j9y+*V@ivY%?b-FgBcwPbZ0WS zLr3qM!9%Mp`l2M!cbTibUQh4shuz{ACXQNf3|c-Fgu;FX)hl%N8AMKlQu6uvlOp_` zs8_k*TTzR9OHPe7EcZqh3<;+Y)u$$w$K9M3A5!_+fF2{p$7?%3$5$Q^$l834{7*xb zDQf)}k{|eIyc+vt5{8!sCT@g~`uW^_aN-of}is=k77MngnQ zcCG##d8m-d{0)%3qP(qHmy7x!T?%kC59*>( zgV+Q07q&7=iKE}sW?+e@K59l=g}iqE9N{vehZ;LrgMpm08|7^pis@m{l;C;oGPAbv z>BX7x>2rlIP!IJ%N+2VVK$p-6s)|{c`@8q$;JrmMol%1=3K~TD4Mxf2xYb~l-9pI9L1yIO(kqQ4N&|TXNs(c=W^;#J^bZ#ap=J$Rql9jM>%^I(wqCKGgJKm--Nk;;4Owdvq!kpS%UP;Yn?vH3x|LcjHmVUkv*K(k@S7nFiXJWCLG)Xj>7`Ow!=luR zAi*`mN6GZ8Ij!JYp-Hjg;H{(4cp1VWV2jXo`EmCuYRcwxQ0IYU~##V-A02WIJTcB=KIeG^h z>f3AS`(S#Guz`VruAvZuuanBK)Nh=jC?Ru>mvgxa*W z=LOICZswF_W*a*tq6a#<4w+YAg<*3#BX4m<;XTP1BecgC=AXesT8L+nd%EcfJI7s?g%1cSN#=Zi+LkNfF1K~~R!kbRZ zEa@8s*+)MP>Wqsw7BPt0Z}UYcp4Zh(hti{JrmMe(Qd7c6TH@nO4O`D5A1nlU`Zrug zI?V6AOHmOBVJUyrMRqO_z3jldopFUIQCTh*vXoqmU-Gz-v{u~yA(^dT4jNxwUth#o z9*s`Ie*?_Me^bHTGZQb6jN#Bf(a`pCcDr3IE&^H};neUoY13m3Lz|PIdfO=U@@g{? z-F^Go_-VgHaKfNmTd|Bajt^ zi}d`SVs}e-2e%jF8f1+C$I1S0Hvw1BN_uQzH5DI)>K841Edr>ezxvbXu#TZ%K{ zyO&qRWftP*%B9t^M05I?q)7IrcYPK)J{s%RSCoO&s)u?Sj!?gbLZG zf4u+O;Cu!}{_983Py|r=?E@ekk2&an{O<2>{}Y1X4+vJs-~1cG#MTiAaAf`Kq-Vd# zPq9VI3s&>#=&8~CP9ldK0U+(qNGv9{##R83g&EKm1o-b*AVdHETETx}pKMt1KVaV& zIXHq0jh|wk!ymN$&)DB0si9~^))PP$(gU1-(Dw4LVx?3a03a0r$l1aez+&w1zf=A< zDdf^09E>15A4vP76gLpL{>S)kLAGWfL!19K^WW!1 zs^4{eGA<43|H!lhfE+CVf6u^eyQg+fii$#p6Zh}XCj*=QHK?_r6VTXP<-a29zs9ux zJhS|}@)W90qOr`6DJ{n~B3X$7$+)KmMX zQmp?9HxGYjywh0jxh$&e+!47Ub}6tAW3Y6rB*Y zN`W|&6a-2ByFH(fLfC(X{B05VuT#KZC9XJ9iv+>eH{S>_53*u6x|=x6o=^ge~11fv1Yc0%y@s>zJJW&|0`*Dvaess re*ph&<{uO7|ISn_{WIo2((b=DRNxUH@x6K4 diff --git a/workshops/github-copilot/assets/src/exercisefiles.zip b/workshops/github-copilot/assets/src/exercisefiles.zip deleted file mode 100644 index fa3ead7fedf316f0717b20da3341db49182b337e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7020 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 - -> GitHub Copilot は急速に進化している製品であるため、このワークショップは、使用する拡張機能のさまざまな機能に関して 100% 最新ではない可能性があります。コンテンツと異なる場合は状況に応じて推察して進めてください。参考までに、このページは 2023 年 12 月に更新されました。 - - - -## 前提条件 - -| | | -|----------------|-----------------| -| Node.js v16+ | [Node.js のダウンロード](https://nodejs.org) | -| .Net Core | [.Net Core のダウンロード](https://dotnet.microsoft.com/download) | -| GitHub アカウント | [GitHub 無料アカウントの作成](https://github.com/join) | -| GitHub Copilot のアクセス | 60 日間の試用版は[こちらから申請](https://github.com/github-copilot/signup) | -| コードエディター | [VS Code のダウンロード](https://code.visualstudio.com/Download) | -| VSCode 拡張機能 | [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot), [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat)| -| ブラウザー | [Microsoft Edge のダウンロード](https://www.microsoft.com/edge)もしくはその他| - -

- -## GitHub Codespaces で作業 - -ハンズオン環境は既に [GitHub Codespaces](https://github.com/features/codespaces) で動作するように構成されており、構成ファイルは *.devcontainer* フォルダーにあります。 - -新しい codespace を作成するだけでプログラミングを開始する準備が整うため、何もインストールする必要はありません。 - -## ローカルで作業 - -また、ローカルのコンピュータ上で作業することもできます。 - -1. [Visual Studio Code](https://code.visualstudio.com/) のインストール -2. [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) 拡張機能のインストール -3. [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) 拡張機能のインストール -4. [Node および npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) のインストール -5. mocha のインストール - ``` bash - npm install --global mocha - npm install axios - ``` - -7. [Docker](https://docs.docker.com/engine/install/) のインストール -8. [.NET Core](https://dotnet.microsoft.com/download) のインストール - ---- - -# Github Copilot の最初のステップ - -このセクションでは、GitHub Copilot を使い始めるための最初の手順について説明します。GitHub Copilot でできること、そして GitHub Copilot の可能性を最大限に活用する方法を学びます。既に GitHub Copilot の操作に慣れている場合は、NodeJS での最初の課題にスキップできます。 - -## 準備 - -この最初のチャレンジでは、次の GitHub リポジトリをクローンする必要があります: [Github Copilot Demo](https://github.com/Philess/gh-copilot-demo) - -このリポジトリは、GitHub Copilot の全ての機能を試すのに役立つコードスターターです。ページに表示されているアーキテクチャ設計をよく確認し、準備ができたら、コマンドラインからリポジトリをクローンして VS Code で開きます。 - -``` bash -git clone https://github.com/Philess/gh-copilot-demo -cd gh-copilot-demo -code . -``` - -## はじめての GitHub Copilot - -プロンプトの入力を開始し、Copilot が提案を生成したら、次のショートカットを使用して Copilot を操作できます。 -
    -
  • `tab` : 現在の提案を完全に受け入れる (`最も一般的`)
  • -
  • `ctrl + →` : 単語単位で提案を受け入れる (`部分的に利用`)
  • -
  • `alt + ^` : 次の候補を表示
  • -
  • `shift + tab` : 前の候補を表示
  • -
  • `ctrl + enter` : Copilot ペインの表示
  • -
- -
- -> これらのショートカットを思い出せない場合でも、候補の上にポインターを置くだけで表示されます。 - -
- -## 自然言語翻訳 - -**文字列の自動補完** - -`album-viewer/lang/translations.json` ファイルを開きます。 - -```json -[ - { - "language": "en", - "values": { - "main-title": "Welcome to the world of the future", - "main-subtitle": "The future is now with copilot", - "main-button": "Get started" - } - } -] -``` - -- 最後の "}" の後に "," を追加して新しいブロックを追加し、Enter キーを押します - -
- -## コード生成 - -**プロンプトとは?** -Copilot のコンテキストでは、プロンプトはコード候補を生成するために使用される自然言語の説明の一部です。これは、Copilot がコードを生成するために使用する入力です。1 行または複数行のプロンプトを利用することができます。 - -**プロンプトからコードを生成** - -新しい `album-viewer/utils/validators.ts` ファイルを作成し、プロンプトから始めます: - -```ts -// フランス語形式のテキスト入力から日付の検証をおこない、date オブジェクトに変換 -``` - -Copilot は正規表現を書くのにも役立ちます。これらを試してください: - -```ts -// GUID 文字列の形式を検証する関数 - -// IPV6 アドレス文字列の形式を検証する関数 -``` - -
- -**Copilot で新しいツールやライブラリを発見する** - -同じ `album-viewer/utils/validators.ts` ファイルに、次のプロンプトを追加します: - -```ts -// テキスト入力から電話番号の検証をおこない、国コードを抽出 -``` - -
- -> この例では、おそらく未定義のメソッドを呼び出すという提案がされるでしょう。これは、`ctrl+enter` ショートカットを使用して Copilot ペインを表示し、代替案を検討する良い機会です。 -
外部ライブラリを参照しているものを選択し、Copilot を使用してインポートしてみてください。新しいものを発見するのにこのツールが役に立つことがわかるでしょう。 - -
- -**複雑なアルゴリズムの生成** - -`albums-api/Controllers/AlbumController.cs` ファイルで、`GetByID` メソッドの現在の実装を置き換えて完成させてみてください: - -```cs -// GET api//5 -[HttpGet("{id}")] -public IActionResult Get(int id) -{ - //here -} -``` - -同じファイルで、次のような他のプロンプトを試してみてください: - -```cs -// アルバムを name, artist ないし genre で検索する関数 - -// アルバムを name, artist ないし genre でソートする関数 -``` - -## 大きなタスクと小さなタスク - -### 大きなプロンプトと短いプロンプト - -Copilotは多くの場合で、クラス全体を生成するための複数行のプロンプトではなく、小さいながらも正確に記述されたコードを生成するプロンプトの方がより効果的です。 - -
- -> 大きなコードを生成するための最良の戦略は、簡単なプロンプトでコードの基本的な構造の生成から始めて、単純なプロンプトで小さな部分を 1 つずつ追加していくことです。 - -
- -**動作する*可能性のある*大きなプロンプト** - -- `albums-viewer/utils` に戻り、新しいファイル `viz.ts` を追加して、グラフを生成する関数を作成します。これをおこなうプロンプトの例を次に示します: - -```ts -// D3.js でアルバムの販売価格を年ごとにプロットする -// X 軸は月、Y 軸はアルバム販売数を示す -// アルバムの売上のデータは、外部ソースから読み込まれ、JSON 形式 -``` - -
- ->Copilot はおそらく、詳細を追加してプロンプトを完成させようとするでしょう。自分で詳細を追加するか、Copilot の提案に従ってください。提案を停止してコード生成を開始したい場合は、別の行にジャンプして、Copilot に任せてください。 - -
- -- チャートのコードを生成すると、IDE が d3 オブジェクトについて警告します。これにも Copilot が役立ちます。 -ファイルの先頭に戻り、`import d3` と入力して Copilot に自動補完させます。 - -```ts -import d3 from "d3"; -``` - -Copilot が生成したものを確認してください。コードが正常に動作し、要求した全てを実装している場合もありますが、トークンの制限に達し、Copilot がコード全体を生成できなかった可能性もあります。 - -これは、自動補完用の Copilot が、大きなコードを一度に作成するために作られているのではなく、小さな断片を段階的に生成することに特化しているためです。 - -**ステップバイステップで再チャレンジ** - -以下の手順に従って、プロンプトを細かく分割してコードを生成してみてください: - -```ts -import * as d3 from 'd3'; - -// json ファイルからデータを読み込み、then 関数のコールバック内で d3 svg を作成 -``` - -then 関数のコールバック内で、プロットの基本条件を設定することから始めます - -```ts -// svg の作成 -``` - -```ts -// X 軸と Y 軸のスケールを作成 -// X 軸は月、Y 軸はアルバムの販売数を示す -``` - -```ts -// X 軸と Y 軸の作成 -``` - -あとは、Copilot にチャートを完成させるように依頼するだけです - -```ts -// アルバムの売上データに基づいて折れ線グラフを生成 -``` - -
- ->Copilot の自動補完で大きなタスクを小さなチャンクに分割することで、**常に**より良い結果を得ることができます。また、Copilot は魔法ではなく、他の IDE 機能や開発者のロジックと共に使用する必要があることも示されています。 - -
- -## テスト - -Copilot は、コードで記述されたあらゆる種類のテストを生成するのに役立ちます。これには、たとえば JMeter スクリプトを使用した `単体テスト、統合テスト、エンドツーエンドテスト、ロードテスト` などのテストが含まれます。 - -- `albums-viewer/tests` フォルダーに新しいファイル `validators.test.ts` を追加します - -- 適切なテストの提案を得るには、使用するテストフレームワークなどの基本情報を Copilot に提供する必要があります: - -```ts -import { describe } -``` - -`describe` 関数を入力し始めると、Copilot は開発者が TS のテストファイル内で作業していることを確認し、JS / TS の有名なテストフレームワークである Mocha から `describe` 関数と `it` 関数をインポートすることを提案します。 -提案を受け入れると、Chai からの `expect` 関数も自動的に提案されますので、それも受け入れてください: - -```ts -import {describe, it} from 'mocha'; -import {expect} from 'chai'; -``` - -これでテストフレームワークの準備が整いました。ここで、`import` キーワードで新しい行を開始し、テスト対象の関数をインポートするだけで、Copilot はテストファイル内で作業していると判断し、いくつかの `validators` をテストするために、次のようなものを提案します: - -```ts -import {validateAlbumId} from '../src/validators'; -``` - -一見問題ないように見えますが、Copilot は全てのコードにアクセスできるわけではなく、開いているタブと限られた情報しかアクセスできないため、パスと関数名の両方が間違っていることがわかります。 -
-... 少なくとも Copilot は試してみました ... -
-しかし、Copilotは魔法ではなく、他の IDE 機能やあなたの脳と一緒に使用する必要があることを示す良い例です。 - -- 提案を受け入れ、パスを変更します。`ctrl + space` ショートカットを使うことで、実際に使用可能な関数を VS Code が提案してくれます。 - -- テストしたい最初の関数にコメントを追加して、魔法を起こさせます。: - -```ts -import {describe, it} from 'mocha'; -import {expect} from 'chai'; - -import {validateDate, validateIPV6} from '../utils/validators'; - -// validataDate 関数のテスト -``` - -Boom! - -```ts -describe('validateDate', () => { - it('should return a date object when given a valid date string', () => { - const date = '01/01/2019'; - const expectedDate = new Date(2019, 0, 1); - expect(validateDate(date)).to.deep.equal(expectedDate); - }); - - it('should throw an error when given an invalid date string', () => { - const date = '01/01/2019'; - expect(() => validateDate(date)).to.throw(); - }); -}); -``` - -*他の `it` ブロックを追加して、テストケースを追加したり、他の関数のテストを追加したりできます。たとえば、新しい `it` ブロックを追加して、空の文字列が与えられたときにエラーがスローされることをテストしてみてください。* - -## CI パイプラインの記述 - -*Copilot は、さまざまなステップやタスクのコードを生成することで、パイプライン定義ファイルの作成に役立ちます。ここでは、その機能の例をいくつか紹介します:* - -- *パイプライン定義ファイルを `ゼロから` 生成します* -- *さまざまな `ステップ、タスク、スクリプトの一部` の `コードを生成する` ことで、パイプライン定義ファイルの記述を高速化します* -- *あなたのニーズに合った `Marketplace のタスクと拡張機能を見つける` のを手伝ってくれます* - -### ステップ 1: ゼロから生成 - -- プロジェクトの `.github/workflows` フォルダーに新しいファイル `pipeline.yml` を作成し、次のプロンプトの入力を開始します: - -```yml -# main ブランチへの push 時に起動する GitHub Actions のパイプライン -# album-api イメージを Docker build し、ACR に push -``` - -*Copilot はブロックごとにパイプラインを生成します。パイプラインの Yaml ファイル生成では、他のタイプのコードよりも頻繁に次のブロックの生成をトリガーするために、新しい行にジャンプする必要がある場合があります。* - -*多くの場合、インデントが正しくなかったり、タスク名の周りの引用符が欠落していたりして、いくつかのエラーが発生するタスクが生成されます。これらは、IDE と開発者のスキルで簡単に修正できます。* - -### ステップ 2: プロンプトからタスクを追加 - -- 少なくともコンテナーレジストリへの "ログイン" タスクと "docker ビルドとデプロイ" タスクを含む GitHub Actions ワークフローが生成されているでしょう。これらのタスクの後に新しいコメントを追加して、Docker イメージに GitHub Actions run-id のタグを付け、レジストリにプッシュします: - -```yml -# GitHub Actions の run-id のタグをイメージに付与し、Docker Hub に push -``` - -次のような他のプロンプトを試すことができます: - -```yml -# album-api イメージでテストを実行 - -# album-api を dev 環境の AKS クラスターにデプロイ -``` - -### ステップ 3: プロンプトからスクリプトを追加 - -- Copilot は、次の例のようなカスタムスクリプトを記述する必要がある場合にも非常に便利です: - -```yml -# 全ての appmanifest.yml ファイルで %%VERSION%% を見つけて GitHub Actions の run-id に置換 -``` - -## Infra As Code - -Copilot は、インフラをコードとして記述するのにも役立ちます。`Terraform、ARM、Bicep、Pulumi` や、`Kubernetes マニフェスト ファイル` などのコードを生成することも可能です。 - -### Bicep - -`iac/bicep` フォルダー内の `main.bicep` ファイルを開き、ファイルの最後にプロンプトを入力して新しいリソースを追加します: - -```js -// Container Registry - -// Azure Cognitive Services Custom Vision resource -``` - -### Terraform - -`iac/terraform` フォルダー内の `app.tf` ファイルを開き、ファイルの最後にプロンプトを入力して新しいリソースを追加します: - -```yml -# Container Registry - -# Azure Cognitive Services Custom Vision resource -``` - -## Git Commit コメントの生成 - -コメントを書くことは必須であるべきですが、開発者は怠りがちです。GitHub Copilot がお手伝いします。 - -1. 適当なファイルに何かしらのコンテンツを追加します。 - -2. Git コミットパネルで、右側にある小さな魔法のボタンをクリックします - - ![Github Copilot Git コメントジェネレーター](../assets/git-commit.png) - -3. あなたに代わってコメントを生成しくれた Copilot を褒めてあげましょう - - ![生成されたコメント](../assets/git-commit2.png) - -## ドキュメントの記述 - -Copilot は自然言語のプロンプトを理解してコードを生成することができます。また、`コードを理解し、自然言語で説明する`こともでき、コードのドキュメントを作成するのに役立ちます。 -そのため、全てのドキュメント作成タスクに役立ちます。単純なドキュメントコメントや、JavaDoc、JsDoc などの標準化されたドキュメントコメントを生成できます。また、ドキュメントをさまざまな言語に翻訳するのにも役立ちます。それがどのように機能するか見てみましょう。 - -### 単純なドキュメントコメント - -これを確認するには、クラス、メソッド、または任意のコード行の上にポインターを置き、選択した言語のコメントハンドラーの入力を開始して Copilot をトリガーします。たとえば、Java、C#、TS などの言語では、 `//` と入力するだけで魔法が起こります。 - -以下は `albums-viewer/routes/index.js` ファイルの例です。行を挿入し、`try ブロック` 内の 13 行目の入力を開始します - -```js -router.get("/", async function (req, res, next) { - try { - // Invoke the album-api via Dapr - const url = `http://127.0.0.1:${DaprHttpPort}/v1.0/invoke/${AlbumService}/method/albums`; - -``` - -他のコードでも何が起こるかを試してみてください。 - -### 標準化されたドキュメントコメント (JavaDoc、JsDoc など) - -この場合、ドキュメントコメントの生成をトリガーするには、特定のコメント形式を意識する必要があります: - -- `/**` JS/TS: たとえば `index.js` ファイル内 -- `///` C#: たとえば AlbumApi の `AlbumController.cs` ファイル内 - -```cs -/// -/// アルバムを取得する関数 -/// -/// アルバムのID -/// アルバムの情報 -[HttpGet("{id}")] -public IActionResult Get(int id) -``` - -### マークダウンと HTML ドキュメントの記述 - -Copilot は、ドキュメントの記述にも非常に強力です。`マークダウン` と `html` コードを生成し、例えばこのような readme.md ファイルの記述を加速するのに役立ちます。 - -これを試すために、プロジェクトのルートに新しいファイル `demo.md` を作成し、次のプロンプトを入力してください: - -```md -# Github Copilot ドキュメント -このドキュメントは、ツールが何をできるかを示すために GitHub Copilot で作成されました。 - -## -``` - -次に、2 番目のレベルのタイトルで新しい行を開始することで、ドキュメントのコンテンツを生成し、ドキュメントの記述プロセスを加速する方法を示します。 - ---- - -# コード品質を向上させるために Copilot Chat を使用する - -GitHub Copilot は生成 AI であり、そのため、コードを生成するのに最適ですが、コードの分析機能も強力で、コードの品質を向上させるために使用できます。たとえば、セキュリティの問題を見つけ、コードの品質を向上させるための提案を生成し、レガシーコードにコメントを追加し、リファクタリングをおこない、テストを生成するなど、さまざまなケースでコード品質を向上させるために使用できます。 - -既に慣れている場合は、次のセクションに進むことができます。 - -## はじめに - -GitHub Copilot Chat を使用するには、まず次のことが必要です: - -- 有効な GitHub Copilot ライセンス (Individual、Business、Enterprise) を持っていること。 -- IDE に拡張機能をインストールすること。VS Code の場合、拡張機能タブで `Github Copilot Chat` を検索して直接見つけることができます。 - -### リポジトリのクローン - -前のセクションと同じリポジトリを使用し、Copilot Chat を使用してコード品質を向上させる方法を示します。既にお持ちの場合は、この手順をスキップできます。 - -次の GitHub リポジトリをクローンする必要があります: [Github Copilot Demo](https://github.com/Philess/gh-copilot-demo) - -このリポジトリは、GitHub Copilot で全ての機能を試すのに役立つコードスターターです。リポジトリのページに表示されているアーキテクチャー設計をよく確認し、準備ができたら、コマンドラインからリポジトリをクローンして VS Code で開きます。 - -``` bash -git clone https://github.com/Philess/gh-copilot-demo -cd gh-copilot-demo -code . -``` - -## はじめての Copilot Chat - -Copilot Chat をインストールしたら、次の手順で使い始めることができます。 - -- IDE の左側のツールバー (チャットアイコン) から**チャットビュー**にアクセスします。 -- `Ctrl` + `Shift` + `i` ショートカットを押すと、チャットに簡単な**インライン質問**が表示されます。 - -最初のものは固定のバージョンで、チャットを開いたままにして Copilot に質問するのに非常に便利です。 -2 つ目は、質問をし、回答を得てコマンドを起動するための簡単な方法です。 - -### チャットビュー - -チャットビューは、IDE の他のツールビューと同様に統合され、完全なチャットエクスペリエンスを提供します。ビューが開いたら、Copilot をコードコーチとしてチャットを開始できます。会話の履歴を保持し、前の回答に関連する質問をすることができます。また、途中で質問に対する提案も提供します。次のことが可能です: - -- 任意の言語でのコーディングやベストプラクティスに関する一般的な質問をする -- 現在のファイルに関連するコードを生成または修正し、そのコードをファイルに直接挿入するように依頼する - -これは、コード補完の提供に特化した普通の Copilot よりも高レベルの Copilot です。 - -次のようないくつかの質問で試してみてください: - -```text -> C#で乱数を生成するには? -> ASP.NET Core でルートをセキュアにする最良の方法は何ですか? -> NodeJS で静的 Web サイトを生成する最も簡単な方法は何ですか? -``` - -次に、リポジトリ内のコード ファイルのいくつかで試してみてください。ファイルを開いて、次の質問をしてみてください: - -```text -> このコードが何をするのか説明していただけますか? -> (コードの一部のみを選択した状態) 選択したコードが何をするのか説明していただけますか? -> 1 から 10 までの乱数を返す関数を生成できますか? -> この関数にドキュメントコメントを追加できますか? -``` - -途中で表示される質問の提案も使用してみてください。 - -### インラインの質問 - -インライン質問は、Copilot に質問して回答を得るための簡単な方法です。これは、特定のコードについて質問するのに適した方法です。また、Copilot のコマンドを起動するのにも適しています。コードの生成、コードの修正、テストの生成などを依頼できます。 - -`Ctrl` + `Shift` + `i` を押して、チャットビューで試したのと同じコマンドを入力して試してみてください。 - -### スラッシュコマンド - -Copilot がより関連性の高い回答を得られるように、`スラッシュコマンド` を使用して質問のトピックを選択できます。 - -チャット入力の先頭に特定のトピック名を付加すると、Copilot がより関連性の高い応答を返すことができます。 `/` と入力し始めると、考えられるトピックのリストが表示されます。 - -- **/explain**: 選択したコードがどのように機能するかを段階的に説明します。 -- **/fix**: 選択したコードのバグの修正を提案します。 -- **/help**: GitHub Copilot に関する一般的なヘルプを出力します。 -- **/tests**: 選択したコードの単体テストを生成します。 -- **/vscode**: VS Code のコマンドと設定に関する質問に答えます。 -- **/clear**: セッションをクリアします。 - -## コードをセキュリティで保護する - -Copilotは、コード内のセキュリティ問題を見つけて修正するのに役立ちます。また、コード内の悪いプラクティスを見つけて修正するのにも役立ちます。それがどのように機能するか見てみましょう。 - -`album-api/Controllers/UnsecuredController.cs` ファイルを開き、次のような質問をチャットに入力します: - -```text -> このコードにセキュリティ上の問題がないか確認できますか? -> このコードの品質を改善する方法はありますか? -``` - -答えが得られたら、次のように入力して問題の修正を依頼できます。 - -```text -> 修正を提案してもらえますか? -``` - -コードの修正が提案された場合は、チャットのコードブロックにカーソルを合わせ、左上の適切なオプションを選択して、**コピーするか、ファイルに直接挿入する**かを選択します。 - -## コードの説明とドキュメント - -Copilot Chat を使用してコードを説明してもらうことができます。`自然言語でコードを説明したり、ドキュメントコメントを生成したり`することができます。次のコマンドで試してみましょう。: - -```test -> /explain -> このコードのドキュメントコメントを生成して -``` - -## コードのリファクタリング - -さらに印象的なのは、Copilot チャットがコードのリファクタリングに役立つことです。`変数の名前変更、メソッドの抽出、クラスの抽出など`に役立ちます。 - -これらのコマンドのいくつかは、`album-api/Controllers/UnsecuredController.cs` ファイルで試すことができます: - -```test -> メソッドを抽出して -> 非同期処理が適切な場合、各メソッドの非同期バージョンを作成して -``` - -## コード翻訳 - -*Copilot は自然言語とプログラミング言語の両方を理解して生成できるため、それらを組み合わせることで、`コードの断片をある言語から別の言語に翻訳する`のに使用できます* - -特定の言語のコードを翻訳するには、そのコードを開き、チャットで別の言語への翻訳を依頼します。たとえば、Copilot 自動補完専用の最初のセクションで作成した `validators.ts` ファイルを開き、C への翻訳を依頼します。 - -COBOL のようなレガシーコードを扱う場合も非常に便利です。`legacy/albums.cbl` ファイルを開き、コードを Python に変換してみてください。 - -## テスト生成 - -Copilot は、コードのテストを生成するのにも役立ちます。たとえば、JMeter スクリプトを使用して `単体テスト、統合テスト、エンドツーエンドテスト、およびロードテスト`を生成できます。 - -`album-api/Controllers/UnsecuredController.cs` ファイルを開き、次のような質問をチャットに入力します: - -```test -> このコードの単体テストクラスを生成して -``` - -また、Copilot を使用して、テスト用のスタブとモックを生成することもできます。 - -```text -> FileStream クラスのモックを生成して -> そのモックを単体テストで使用して -``` - -
- -> Copilot chat は会話の前の Q & A を追跡しているため、以前に生成されたモックを参照して簡単にテストできることを覚えておいてください。 - -
- -## Chat participants の利用 - -Chat participants は、特定のタスクを支援できる専門の専門家のようなものです。チャットで @ 記号を使用してメンションできます。現在、次の 3 つの Chat participants を使用できます: - -- **@workspace**: この chat participant は、ワークスペース内のコードに関する知識を持っており、関連するファイルまたはクラスを見つけることで、ワークスペースの遷移を支援できます。@workspace chat participant は、メタプロンプトを使用して、質問への回答に役立てるためにワークスペースから収集する情報を決定します。 -- **@vscode**: この chat participant は、VS Code エディター自体のコマンドと機能に関する知識があり、それらの使用を支援できます。 -- **@terminal**: この chat participant は Visual Studio Code のターミナルとそのコンテンツに関するコンテキストを持っています。 - -今のところはそれほどリッチではないかもしれませんが、これらの機能は時間の経過とともに成長し続けます。次に例をいくつか示します - -サイドチャットパネルを開き、 `@workspace /new` と入力して、新しいプロジェクトを作成することを指定します。たとえば、ASP.NET プロジェクトを作成してみてください - -```text -> @workspace /new Index、Users、および Product の 3 つのビューをもった ASP.NET Core 6.0 のプロジェクト -``` - -構造化されたプロジェクトと、ファイルを作成するための新しいボタンが表示されるはずです。`Create workspace` をクリックして、作成中のファイルを確認します。 - -![GitHub Copilot Chat Participants](../assets/agents.png) - -## Tips - -GitHub Copilot Chat は非常に便利ですが、開発者にとっては、キーボードを離れ、マウスを動かしてチャットタブを開くのは面倒な作業です。そのためコードエディター内でチャットを直接呼び出すことができます。 - -1- コードを含むファイルを開きます - -2- ショートカット **Ctrl + i** を使用します。クイックチャットのポップアップ、即ちカーソルを移動させることができる小さなチャットウィンドウが開きます。 - -![GitHub Copilot クイックチャット](../assets/quickchat.png) - -3- コードを生成するコマンドを入力します (たとえば、`Toto という名前の C# クラスを作成して`)。生成されたコードは、現在のファイル内に挿入されます。これはあなたが望むものかもしれません。 - ---- - -# Copilot Chat におけるプロンプトエンジニアリング - -前のセクションでは、基本的なプロンプトを使用して Copilot Chat にコードを生成してもらう方法について説明しました。このセクションでは、プロンプトエンジニアリング手法を使用して、より正確な結果を得るための手法を学習します。 - -**プロンプトエンジニアリングとは?** -プロンプトエンジニアリングは、高品質のコード提案を生成するために、高品質のプロンプトを設計するプロセスです。より良いプロンプトを書くための良いプラクティスとヒントがあります。それらのいくつかを見てみましょう。 - -## 例を挙げる: one-shot と few-shots プログラミング - -プロンプトエンジニアリングを利用し、チャットを使って Copilot に例を提供することもできます。これは、Copilot が何をしたいのかを理解し、より良いコードを生成するのに役立つ良い方法です。チャットで例を提供するには、validator.ts ファイルを開いて次のように入力します: - -```bash -# one-shot プログラミング - -現在のファイルで mocha と chai を使用して、電話番号検証メソッドの単体テストを書いてください。 -ポジティブテスト (true を返すテスト) には、次の例を使用します: -it('電話番号が有効な国際番号である場合、trueを返す', () => { expect(validatePhoneNumber('+33606060606')).to.be.true; }); -ロジックのセットでテストを整理し、メソッドごとに少なくとも 4 つのポジティブテストと 2 つのネガティブテストを生成してください。 -``` - -```bash -# few-shot プログラミング - -現在のファイルで mocha と chai を使用して、全ての検証メソッドの単体テストを書いてください。 -ポジティブテスト (true を返すテスト) には、次の例を使用します。 -it('電話番号が有効な国際番号の場合は true を返す', () => { expect(validatePhoneNumber('+33606060606')).to.be.true; }); -it('電話番号が有効なアメリカのローカル番号の場合は true を返す', () => { expect(validatePhoneNumber('202-939-9889')).to.be.true; }); -it('指定された電話番号が空の場合、エラーをスローする', () => { expect(validatePhoneNumber('')).to.throw(); }); -ロジックのセットでテストを整理し、メソッドごとに少なくとも 4 つのポジティブテストと 2 つのネガティブテストを生成してください。 -``` - -この手法を使用して、**別のファイルのスタイルに従うコードを生成**できます。たとえば、albums-api>Models>Album.cs と同じように音楽スタイルのサンプルのレコードを作成する場合は、ファイルを開いて次のように入力します: - -```bash -Album.cs ファイルのように、6 つのサンプル値を List の形で持つ MusicStyle レコードを作成してください。 -``` - -## 外部参照の提供 - -Copilot Chat は、外部参照を使用して、より正確な提案を作成できます。たとえば、API にリクエストを送信するコードを生成する場合は、チャットで API レスポンスの例を提供するか、API リファレンスの URL を提供できます。Copilot はそれを使用して、より良いコードを生成します。 - -```bash -次の API から全ての犬種を取得し、Breed オブジェクトの配列を返す TS 関数を書いてください: HTTP GET https://dog.ceo/api/breeds/list/all -``` - -Copilot は、指定された外部参照を使用してコードを生成します。subBreeds プロパティをもつ Breef インターフェイス (またはクラス) が生成されます。これは、外部参照によって指定された API から取得されます。 - -```ts -interface Breed { - name: string; - subBreeds: string[]; -} -``` - -
- -> SDK やライブラリなどの外部ドキュメントへのリンクを提供することもできます。または RFC などのイベント規範文書など... - -
- -## ロールプロンプト - -foundational prompt とも呼ばれ、Copilot Chat の行動をパーソナライズし、Copilot のフレーバーを設定するために与える一般的なプロンプトです。 - -Copilot Chat で新しいタスクを開始するときに最初におこなうべきことは、**何を構築したいのか、Copilot にどのように支援してもらいたいのかを明確に説明すること**です。 - -
- -> **これは適切に処理された場合に非常に強力です**。そのため、全てのコーディングセッションをロールプロンプトで開始し、将来的な使用のために最適なプロンプトを保存してください。 - -
- -***ロールプロンプトの構造*** - -ロールプロンプトに何を含めることができるか: - -- 構築したいものに関する確かなコンテキストと背景情報を提供します。 -- GitHub Copilot の役割を定義し、どのようなフィードバックを求めているかについて期待値を設定します。 -- 回答の質を具体的にし、より多くのことを学び、受け取った回答が正しいことを確認するために、参考資料や追加のリソースを求めてください。 -- タスクを再開し、指示が明確かどうかを尋ねます。 - -***ロールプロンプトの例*** - -新しい会話を開始し、次のプロンプトを入力します: - -```bash -私は React Native で構築された新しいモバイルアプリケーションに取り組んでいます。 -ユーザーが犬の写真をアップロードして犬の品種を取得できる新しい機能を構築する必要があります。 -品種を操作するには、https://dog.ceo/api/breeds の API セットを使用する必要があります。コードが少なくとも OWASP Top 10 (https://owasp.org/Top10/) に対応していることを確認する必要があります。 -コードの単体テストが必要であり、また、https://www.w3.org/TR/WCAG21/ で定義されている WCAG 2.1 レベル A および AA の達成基準に準拠したアクセシビリティにしたいと考えています。 -私のコードがこれら全ての要件を満たしていることを確認するために、私自身のコードコーチとして行動してもらう必要があります。 -可能であれば、追加の学習のためのリンクと参照を提供してください。 -これらの指示を理解していますか? -``` - -そこから質問を開始し、時々、Copilot が指示に従っていることを確認するには、次の質問をします: - -```bash -私の指示をまだ使用していますか? -``` - -***ロールプロンプトをテストする*** - -React Native Apps と OWASP Top 10 に関するアクセシビリティのベストプラクティスについて質問をすることで、ロールプロンプトをテストできます。また、アップロード機能のコードを生成するように依頼し、生成されたコードがセキュリティで保護され、アクセシビリティの基準を満たしているかどうかを確認することもできます。 - -たとえば、次の質問を試してみてください: - -```bash -React Native で実装されたアプリのアクセシビリティを向上させるにはどうすればいいですか? - -アプリから写真をアップロードする最も安全な方法は何ですか? -``` - ---- - -# NodeJS サーバーの開発 - -この最初の演習では、機能要件に従って実際のプロジェクトを開発します。自分自身で進めることもできますし、GitHub Copilot の助けを借りることも可能です。 - -## 手順 - -- [exercicefile](../assets/src/exercisefiles.zip) フォルダーをローカルにダウンロードします -- `nodeserver.js` を開き、Nodejs サーバーを作成することから始め、テキストに初めから書いてある指示を基にした Copilot の提案を確認します -- `test.js` ファイルを開き、現在のテストを分析します -- コマンドプロンプトを開き、テストを実行します (`mocha test.js`) -- 結果を見ると、次のように表示されるはずです: - -``` bash -mocha test.js -server is listening on port 3000 - - Node Server - - √ should return "key not passed" if key is not passed - - 1 passing (34ms) - -``` - -- `nodeserver.js` では、演習セクションで残りのメソッドを開発します - -> 全てのコンテキストを与えてよりよい提案が生成されるように、Visual Studio Codeで `color.json` ファイルを開くことを忘れないでください。 - -- test.js ファイルに、機能をテストするメソッドを追加します。 -- テストを実行して、全てが機能していることを確認します。 -- `dockerfile` ファイルを開いてプロンプトを入力し、Web サーバーを実行できる Node イメージを含む Docker コンテナーを作成します。 -- ポート 4000 で docker を実行するコマンドを作成します。 -- アプリケーションがポート 4000 で動作していることをテストします。 -- **nodeserver.js** ファイルに `//サーバーをテストするために curl コマンドを実行` のような新しい行を入力すると、現在のファイルに基づいて GitHub Copilot がコマンドラインで実行するための curl コマンドをどのように生成するかを確認できます。 -- 注: `//daysBetweenDatesをテストするための curl コマンドを実行` といったコメントのように、より具体的に指定できます。この場合は特定のメソッドのテストが生成されるはずです。 - -## 演習 - -次に、新しい機能を開発し、サーバーに追加してください。サーバーが実装すべき要件は次のとおりです。 - -
- -> 入力途中で GitHub Copilot が提案を表示します。提案を受け入れるには Tab キーを押します。数行書いた後 GitHub Copilot が何も表示しない場合は、Enter キーを押して数秒待ちます。Windows または Linux では、Ctrl + Enter キーを押します。 - -
- -
- -> 書くべきコードはたくさんありますが、完成までにかかる時間に驚かれるかもしれません。また、必要に応じて 7 つか 8 つだけ書いても構いませんが、この演習は退屈なものではありません。 - -
- -| メソッド | 要件 | -|---|---| -|**/Get**|hello world メッセージを返します| -|**/DaysBetweenDates**|2 つの日付の間の日数を計算します
2 つのクエリ文字列パラメーター date1 と date 2 で受け取り、これら 2 つの日付の間の日数を計算します| -|**/Validatephonenumber**|クエリ文字列で `phoneNumber` というパラメーターを受け取ります
`phoneNumber` をスペイン語のフォーマットで検証します (例: +34666777888)
`phoneNumber` が有効であれば "valid" を返します
`phoneNumber` が有効でなければ "invalid" を返します| -|**/ValidateSpanishDNI**|クエリ文字列で `dni` というパラメーターを受け取り、DNI の文字列を検証します
DNI が有効であれば "valid" を返します
DNI が有効でなければ "invalid" を返します
機能が正しく実装されていることを確認するための自動テストを作成します| -|**/ReturnColorCode**|クエリ文字列で `color`というパラメーターを受け取ります
`colors.json` ファイルを読み取り、該当する色の `rgba` フィールドを返します| -|**/TellMeAJoke**|axios を使って joke API を呼び出し、ランダムにジョークを返します| -|**/MoviesByDirector**|(この実装には [https://www.omdbapi.com/apikey.aspx](https://www.omdbapi.com/apikey.aspx) を参照し、無料の API キーを取得する必要があります)
クエリ文字列で `director` というパラメーターを受け取ります
axios を使って映画の API を呼び出し、その `director` の映画一覧を返します| -|**/ParseUrl**|クエリ文字列で `someurl` というパラメーターを受け取ります
URL を Parse し、プロトコル、ホスト、ポート、パス、クエリ文字列、およびハッシュを返します| -|**/ListFiles**|カレントディレクトリを取得します
カレントディレクトリの全てのファイルを取得します
ファイルの一覧を返します| -|**/GetFullTextFile**|`sample.txt` を読み込み、"Fusce" という単語を含む行を返します (この実装には注意してください。なぜならば普通は解析前にファイルのコンテンツを全て読み込むことになるため、メモリー使用率が上昇し、ファイルがあまりにも大きいとエラーになる可能性があるためです。)| -|**/GetLineByLinefromtTextFile**|`sample.txt` を行ごとに読み込みます
ファイルを行ごとに読み込む promise を作成し、"Fusce" という単語を含む行の一覧を返します| -|**/CalculateMemoryConsumption**|プロセスのメモリー消費量を GB 単位で返します (小数点以下 2 桁に丸めて)| -|**/MakeZipFile**|zlib を利用して、`sample.txt` を含む `sample.gz` ファイルを作成します| -|**/RandomEuropeanCountry**|ヨーロッパの国とその ISO コードの配列を作成します
配列からランダムな国を返します
国とその ISO コードを返します| - -## GitHub Copilot Chat 演習 - -以下のタスクは、[GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) 拡張機能で実行できます。 - -- **説明** - -validatePhoneNumber メソッドで正規表現の書かれている行を選択し、`/explain` コマンドを使用します。正規表現中のそれぞれの異なる表記法が何を意味するかについて詳しく説明してくれます。 - -- **プログラミング言語変換** - -たとえば、次のソースコードを選択します: - -``` js -var randomCountry = countries[Math.floor(Math.random() * countries.length)]; -``` - -Copilot Chat に別の言語 (Python など) への変換を依頼します。**python** で新しいコードが表示されます。 - -- **読みやすさ** - -MakeZipFile メソッドを選択します - -コードを読みやすくするよう Copilot Chat に依頼します。どのようにコメントが追加されるか、また、短い名前の変数の名前がどのようなわかりやすい名前に変更されるかを確認してください。 - -- **バグの修正** - -この演習では、ほとんどのコードが GitHub Copilot によって書かれるため、バグはほとんどありません。いくつかのバグをわざと作りこむことによって、デバッグ機能をテストできます。 - -次のようなバグを作りこみます: - -for ループで、先頭を次のように変更します (0 を 1 に変更します)。 - -``` js - for (var i = 1 -``` - -当該コードを選択し、Copilot Chat にバグの修正を依頼します。 - -- **堅牢にする** - -ユーザー入力由来のテキスト (クエリ文字列から取得される変数など) を選択します。 - -``` js - var queryData = url.parse(req.url, true).query; - var date1 = queryData.date1; - var date2 = queryData.date2; -``` - -Copilot Chat にコードを堅牢にするよう依頼すると、検証ロジックが追加されることがわかります。 - -- **ドキュメント** - -以下のような行を選択します (例: メソッドや if 句の先頭) - -``` js - else if (req.url.startsWith('/GetFullTextFile')) -``` - -Copilot Chat にドキュメントの作成を依頼します。Copilot Chat がコードの動作を説明し、コメントが追加されます。 - ---- - -# .Net Core - -目標は、GitHub Copilot の助けを借りて、.NET 6.0 と Docker を使用した単純な WebAPI を作成することです。 -以下の手順に従って、可能な限り GitHub Copilot を使用してみてください。 -さまざまなことを試してみて、Dockerfile やクラスの生成、コメントの追加など、GitHub Copilot で何ができるかを確認してください。 - -注意: - -VS Code の右下隅にあるステータス バーを確認し、GitHub Copilot が現在の言語用に構成され、有効になっていることを確認します。 - -## dotnet WebAPI プロジェクトの作成 - -- 新規 .NET プロジェクトの作成 - -``` powershell -dotnet new webapi -``` - -- フォルダーに新しいファイル `User.cs` を作成し、Copilot にクラスを生成するように指示します。 - -- 新しいファイル `UserController.cs` を Controllers フォルダーに追加し、Copilot にコントローラーを ControllerBase から継承して生成するように指示します。 - -- クラスに `ApiController` 属性と `Route` 属性を追加します。 - -- `IUserService` という新しいファイルを Abstractions フォルダーに追加し、Copilot にインターフェースを生成するように指示します。 - -- 次のコマンドを利用してアプリケーションを実行します (GitHub Codespaces を使用している場合は、`Program.cs` から HTTPS リダイレクトを削除する必要がある場合があります) - -``` powershell -dotnet run -``` - -- Services フォルダーの `UserService.cs` にインターフェイス IUserService を実装し、GitHub Copilot が実装を生成できるようにコメントを追加します。 - -- Copilot に、ユーザーのリストと、そのリストを使用した追加メソッドと取得メソッドを生成するように指示します。 - -- アプリをビルドする前に、`Program.cs` で `IUserService` を DI コンテナーに登録します。 - -``` csharp -builder.Services.AddSingleton(); -``` - -- 次のコマンドを利用してアプリケーションを実行します。 - -``` powershell -dotnet run -``` - -> "No server certificate was specified..." エラーが発生した場合、次のコマンドを実行してください。 - -``` powershell -dotnet dev-certs https -``` - -- 必要に応じてポートフォワーディングの設定をおこなってください - -- /swagger エンドポイントにアクセスします。e.g. [https://leomicheloni-supreme-space-invention-q74pg569452ggq-5164.preview.app.github.dev/swagger/index.html](https://leomicheloni-supreme-space-invention-q74pg569452ggq-5164.preview.app.github.dev/swagger/index.html) - -## アプリケーションを Docker コンテナーで実行 - -- アプリケーションを publish し、_publish_ フォルダーに出力します - -``` dotnet -dotnet publish -c Release -o publish -``` - -- 既存の `Dockerfile` ファイルを利用し、アプリケーションをコンテナーに配置して実行します (指示を追加するか、もしくはコードを書き、GitHub Copilot に保管させます) - -- イメージをビルドし、ポート 8080 で実行します - -``` powershell -docker build -t dotnetapp . -docker run -d -p 8080:80 --name dotnetapp dotnetapp -``` - ---- - -# Infrastructure as Code - -プログラミング言語からコードを生成するのは 1 つの使用例ですが、GitHub Copilot は Terraform、Bicep などの構成ファイルを生成するのに役立つでしょうか? - -この演習では、前のセクションで開発した Web アプリケーションをデプロイし、Azure でホストします。要件は次のとおりです。 - -- アプリケーションは、Azure Web アプリ名 `my-webapp` でホスト -- App Service プラン (CPU とメモリ) の名前は `my-plan` で、SKU (サイズ) `B1` を使用 -- Web アプリは、リソース グループ名 `oh-yes` で West Europe でホスト - -
- -> 上記のケースで GitHub Copilot を使用する方法はいくつかあります。たとえば、GitHub Copilot に提案を生成してもらう前に、数行の連続したコメントを書くことができます。さらに、結果が意図したものでない場合、サイドパネルを開いて 10 個の代替案を生成できます。これをおこなうには、`ctrl` + `Enter` をクリックします - -
- ---- - -# 解答 - -ここでは、いくつかの演習の解決策を確認することができます。 - -## コーディング - -コーディング演習の解答は [ここからダウンロード](../assets/src/completesolution.zip) できます。 - -## Infrastructure As Code - -この部分が最も簡単ですが、GitHub Copilot は不適切なコードやコメント付きのコードをランダムに生成する可能性があります。 - -``` bicep -param webAppName string = 'my-webapp' -param webAppPlanName string = 'my-plan' -param webAppPlanSku string = 'B1' -param webAppPlanLocation string = 'westeurope' -param resourceGroupName string = 'oh-yeah' - -resource appServicePlan 'Microsoft.Web/serverfarms@2021-02-01' = { - name: webAppPlanName - location: webAppPlanLocation - kind: 'app' - sku: { - name: webAppPlanSku - tier: 'Basic' - size: 'B1' - } -} - -resource webApp 'Microsoft.Web/sites@2021-02-01' = { - name: webAppName - location: webAppPlanLocation - kind: 'app' - properties: { - serverFarmId: appServicePlan.id - } -} - -resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { - name: resourceGroupName - location: webAppPlanLocation -} -``` - -## DevSecOps - -GitHub Copilotは、全てのコードを修正およびリファクタリングできない場合がありますが (たとえば、`バグの修正` プロンプトを使用)、チャットで質問すると、Code smells や悪いプラクティスを認識してくれるのは非常に良いことです。 - -以下の短いコードには、いくつかのセキュリティ上の欠陥があります。少なくとも 4 つの重大な悪いプラクティスが見つかるはずです。 - -このコードは無害に見えますが、[パスインジェクション](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3003)を許可する可能性があります。これは、誰かがディスク上の別のファイルにアクセスしようとする可能性があることを意味します。 - -``` csharp -using (FileStream fs = File.Open(userInput, FileMode.Open)) - { - // 可能であれば、ユーザー入力に基づいてファイルパスを明示的に既知のセーフリストに制限します。たとえば、アプリケーションが "red.txt"、"green.txt"、または "blue.txt" にのみアクセスする必要がある場合は、これらの値のみを許可します。 - // 信頼できないファイル名をチェックし、名前が問題ないことを確認します。 - // パスを指定するときは、絶対パス名を使用します。 - // PATH 環境変数などの潜在的に危険な構造は避けてください。 - // 長いファイル名のみを受け入れ、ユーザーが短い名前を送信する場合にのみ長い名前を検証します。 - // エンドユーザー入力を有効な文字に制限します。 - // MAX_PATH の長さを超えた名前をリジェクトします。 - // ファイル名を解釈せずにリテラルとして扱います。 - // ファイル名がファイルとデバイスのどちらを表しているかを確認します。 - - byte[] b = new byte[1024]; - UTF8Encoding temp = new UTF8Encoding(true); - - while (fs.Read(b, 0, b.Length) > 0) - { - return temp.GetString(b); - } - } - - return null; -} -``` - -これは [SQL インジェクション](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3001)の有名な例です。一番良いのは、エスケープコードや間違ったパラメーターボックス(型)の試みに対処できるパラメータを使うことです。 - -``` csharp -public int GetProduct(string productName) -{ - using (SqlConnection connection = new SqlConnection(connectionString)) - { - SqlCommand sqlCommand = new SqlCommand() - { - CommandText = "SELECT ProductId FROM Products WHERE ProductName = '" + productName + "'", - CommandType = CommandType.Text, - }; - - // セキュアな方式 - // SqlCommand sqlCommand = new SqlCommand() - // { - // CommandText = "SELECT ProductId FROM Products WHERE ProductName = @productName", - // CommandType = CommandType.Text, - // }; - // sqlCommand.Parameters.AddWithValue("@productName", productName); - - SqlDataReader reader = sqlCommand.ExecuteReader(); - return reader.GetInt32(0); - } - -} -``` - -一般的な良いプラクティスは、エンドユーザーに技術的なエラーを表示しないことです ([情報の開示](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3004))。使用されているテクノロジー、プラグインのバージョン、さらには攻撃者がアプリケーションに対して使用できる追加情報であるスタックトレースが表示される可能性があります。 - -``` csharp -public void GetObject() -{ - try - { - object o = null; - o.ToString(); - } - catch (Exception e) - { - this.Response.Write(e.ToString()); - // よりよい方式 - // myLogger.Log(e.ToString()); // 例外のログ出力 - // this.Response.Write("例外が発生しました"); // 一般的なメッセージを返す - } - -} -``` - -以下の例はトリッキーであると同時にシンプルです。connectionString には資格情報を含めることができ、ハードコーディングしてはなりません。簡単に変更することができないというのもありますが、さらに重要なことは、ソースコードにアクセスする人なら誰でもシークレットにアクセスできることです。 - -``` csharp -private string connectionString = ""; -``` - ---- - -# Credits - -This workshop's challenges are a fork from the original Hackaton [accessible here](https://github.com/microsoft/CopilotHackathon). We just wanted to integrate it into the [MOAW](https://github.com/microsoft/moaw) format and add some exercises. - -Role Prompts described in the Prompt engineering section are inspired by this [great blog post](https://github.blog/2023-10-09-prompting-github-copilot-chat-to-become-your-personal-ai-assistant-for-accessibility/) from Github's engineers [Ed Summers](https://github.com/edsummersnc) and [Jesse Dugas](https://github.com/jadugas). - -A big thanks to them <3 diff --git a/workshops/github-copilot/workshop.md b/workshops/github-copilot/workshop.md deleted file mode 100644 index a91ced82..00000000 --- a/workshops/github-copilot/workshop.md +++ /dev/null @@ -1,1148 +0,0 @@ ---- -published: true -type: workshop -title: Product Hands-on Lab - GitHub Copilot, your new AI pair programmer -short_title: GitHub Copilot, your new AI pair programmer -description: Discover how to leverage GitHub Copilot to develop your project -level: beginner -authors: - - Philippe DIDIERGEORGES - - Louis-Guillaume MORAND -contacts: - - '@philess' - - '@lgmorand' -duration_minutes: 240 -tags: javascript, .net, GitHub, IA, copilot, AI, csu -banner_url: assets/banner.jpg -sections_title: - - Introduction - - Github Copilot - - Github Copilot Chat - - Advanced Prompt Engineering - - Challenge 1 - A NodeJS server - - Challenge 2 - A .Net Core API - - Challenge 3 - Infra as Code - - Solutions - - Credits ---- - -# Activate GitHub Copilot to become more efficient - -The goal of this workshop is to learn how to use GitHub Copilot, using an exercise that consists of building a web server using Nodejs with different functionalities and a .NET Web API. In the second part, you'll learn how to use it for infrastructure as code but also to fix bad practices in terms of security. - -GitHub Copilot is an AI-powered code assistant that helps developers write better code faster. It uses machine learning models trained on billions of lines of code to suggest whole lines or entire functions based on the context of what you’re working on. By using GitHub Copilot, you can learn how to write better code and improve your productivity. - -
- -> GitHub Copilot is a quickly evolving product and thus this workshop may not be 100% up to date with the differentes features of the different extensions you are going to use. Please be clever if it's not exactly the same. For info, this page has been updated in December 2023. - -
- -## Pre-requisites - -| | | -|----------------|-----------------| -| Node.js v16+ | [Download Node.js](https://nodejs.org) | -| .Net Core | [Download .Net Core](https://dotnet.microsoft.com/download) | -| GitHub account | [Create free GitHub account](https://github.com/join) | -| GitHub Copilot Access | A 60 day trial can be [requested here](https://github.com/github-copilot/signup) | -| A code editor | [Download VS Code](https://code.visualstudio.com/Download) | -| some VSCode extensions | The first one [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot), and the other one allows you to have [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat).| -| A browser | [Download Microsoft Edge](https://www.microsoft.com/edge) or any other one ;-)| - -
- -> You also have to download some assets. They can be [downloaded here](assets/src/exercisefiles.zip). - -
- -## Work with GitHub Codespaces - -The environment is already configured to work with [GitHub Codespaces](https://github.com/features/codespaces), you can find the configuration files in the *.devcontainer* folder. - -To start programming just start a new codespace and you are ready to go, don't need to install anything. - -## Work locally - -You can also choose to work locally on your computer. - -1. Install [Visual Studio Code](https://code.visualstudio.com/) -2. Install the [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) extension -3. Install the [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) extension -4. Install [Node and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) -5. Install mocha - - ``` bash - npm install --global mocha - npm install axios - ``` - -7. Install [Docker](https://docs.docker.com/engine/install/) -8. Install [.NET Core](https://dotnet.microsoft.com/download) - ---- - -# First steps with Github Copilot - -This section will guide you through the first steps with GitHub Copilot. You will learn what you can do and how to use it at his full potential. If you already feel confortable with it you can jump to the first challenge with NodeJS. - -## Get ready - -This first challenges needs you to clone the following GitHub Repository: [Github Copilot Demo](https://github.com/Philess/gh-copilot-demo) - -This repository is a code starter that will help you experiment all capabilities with GitHub Copilot. Take the time to look at the architecture design displayed on the page and when you're ready, clone the repository from the command line and open it in VS Code. - -``` bash -git clone https://github.com/Philess/gh-copilot-demo -cd gh-copilot-demo -code . -``` - -## Start playing with GitHub Copilot - -Once you start typing a prompt and copilot generate proposals, you can use the following shortcuts to interact with Copilot: -
    -
  • `tab` to accept the current suggestion entirely (`most common`)
  • -
  • `ctrl + right arrow` to accept word by word the suggestion (`for partial use`)
  • -
  • `alt + ^` to move to next suggestion
  • -
  • `shift + tab` to go back to the previous suggestion
  • -
  • `ctrl+enter` to display the copilot pane
  • -
- -
- -> If you can't remember it, just hover your pointer on top of a suggestion to make them appear. - -
- -## Natural Language Translations - -**Automate text completion** - -Open file `album-viewer/lang/translations.json` - -```json -[ - { - "language": "en", - "values": { - "main-title": "Welcome to the world of the future", - "main-subtitle": "The future is now with copilot", - "main-button": "Get started" - } - } -] -``` - -- Start adding a new block by adding a "," after the last "}" and press enter - -
- -## Code Generation - -**What is a prompt?** -In the context of Copilot, a prompt is a piece of natural language description that is used to generate code suggestions. It's the input that Copilot uses to generate code. It can be a single line or a multiple lines description. - -**Generate code from prompt** - -Create a new `album-viewer/utils/validators.ts` file and start with the prompt: - -```ts -// validate date from text input in french format and convert it to a date object -``` - -Copilot can help you also to write `RegExp patterns`. Try these: - -```ts -// function that validates the format of a GUID string - -// function that validates the format of a IPV6 address string -``` - -
- -**Discover new tool and library on the job with Copilot** - -Still on the same `album-viewer/utils/validators.ts` file add the following prompt: - -```ts -// validate phone number from text input and extract the country code -``` - -
- -> For this one it will probably give you proposal that call some methods not defined here and needed to be defined. It's a good opportunity to explore the alternatives using the `ctrl+enter` shortcut to display the copilot pane. -
You can choose one that uses something that looks like coming for an external library and use copilot to import it showing that the tool helps you discover new things. - -
- -**Complex algoritms generation** - -In the `albums-api/Controllers/AlbumController.cs` file try to complete the `GetByID` method by replace the current return: - -```cs -// GET api//5 -[HttpGet("{id}")] -public IActionResult Get(int id) -{ - //here -} -``` - -In the same file you can show other prompts like: - -```cs -// function that search album by name, artist or genre - -// function that sort albums by name, artist or genre -``` - -## Big tasks vs small tasks - -### Big Prompts and Short Prompts - -Copilot will probably will always more effective with prompt to generate small but precisely described pieces of code rather than a whole class with a unique multiple lines prompt. - -
- -> The best strategy to generate big piece of code, is starting by the basic shell of your code with a simple prompt and then adding small pieces one by one. - -
- -**Big prompts that *could* works** - -- Back in the `albums-viewer/utils` add a new file `viz.ts` to create a function that generates a graphe. Here is a sample of prompt to do that: - -```ts -// generate a plot with D3.js of the selling price of the album by year -// x-axis are the month series and y-axis show the numbers of album selled -// data from the sales of album are loaded in from an external source and are in json format -``` - -
- ->Copilot will probably try to complete the prompt by adding more details. You can try to add more details yourself or follow copilot's suggestions. When you want it to stop and start generating the code just jump on another line and let the copilot do its work. - -
- -- Once you achieved to generate the code for the chart you probably see that your IDE warn you about the d3 object that is unknown. For that also Copilot helps. -Return on top of the file and start typing `import d3` to let copilot autocomplete - -```ts -import d3 from "d3"; -``` - -Look at what Copilot has been able to generate. It's possible that the code is working fine and does everything you asked for but also you probably hit the token limit and Copilot was not able to generate the whole code. - -It's because Copilot for autocompletion is not made for creating big pieces of code at once, but is more specialized in generating small pieces step by step. - -**Try again by build it step by step** - -Try to generate the code for the plot by cutting it into small pieces following the steps below: - -```ts -import * as d3 from 'd3'; - -// load the data from a json file and create the d3 svg in the then function -``` - -Inside the then function, starts by setting up the basics of the plot - -```ts -// create the svg -``` - -```ts -// create the scales for the x and y axis -// x-axis are the month series and y-axis show the numbers of album selled -``` - -```ts -// create axes for the x and y axis -``` - -From there you can just ask to copilot to complete the chart - -```ts -// generate a line chart based on the albums sales data -``` - -
- ->You will **always** get better results by cutting big task into small chunks with copilot autocomplete. It's also a good way to show that copilot is not magic and you have to use it with your other IDE feature and your developer logic. - -
- -## Tests - -Copilot can help generate all kind of tests that are written with code. It Includes `unit tests, integration tests, end to end tests, and load testing` tests with JMeter scripts for example. - -- Add a new file `validators.test.ts` in the `albums-viewer/tests` folder - -- To have good test suggestion, you hould provide some basic informations to Copilot such as the test framework you want to use: - -```ts -import { describe } -``` - -When you start typing the `describe` function, copilot will see you're in test file in TS and suggest you to import the `describe` and `it` functions from Mochai which is a famous test framework for JS/TS. -Accept the suggestion and it will automatically suggest also the `expect` function from Chai: accept it also. - -```ts -import {describe, it} from 'mocha'; -import {expect} from 'chai'; -``` - -You have your test framework in place! Now just import the functions you want to test by starting a new line by `import` keyword copilot will see you are in a test file, to test some `validators` because of the name and it will suggest something like that: - -```ts -import {validateAlbumId} from '../src/validators'; -``` - -It looks ok but because Copilot doesn't have access to all your code, only the open tab and limited informations, you can see that both the path and the function name are wrong. -
-... At least he tried ... -
-but it's a good way to show that Copilot is not magic and you have to use it with your other IDE feature and your brain :) - -- Accept the suggestion and change the path. You will be able to have VS Code to give you the available function with the `ctrl+space` shortcut. - -- Add a comment with the first function you want to test and let the magic happen: - -```ts -import {describe, it} from 'mocha'; -import {expect} from 'chai'; - -import {validateDate, validateIPV6} from '../utils/validators'; - -// test the validataDate function -``` - -Boom! - -```ts -describe('validateDate', () => { - it('should return a date object when given a valid date string', () => { - const date = '01/01/2019'; - const expectedDate = new Date(2019, 0, 1); - expect(validateDate(date)).to.deep.equal(expectedDate); - }); - - it('should throw an error when given an invalid date string', () => { - const date = '01/01/2019'; - expect(() => validateDate(date)).to.throw(); - }); -}); -``` - -*You can add other `it` block to add more test cases and also add the tests for the other functions. For example try add a new `it` block for the validateDate function to test that it throws and error when given en empty string.* - -## Writing CI pipelines - -*Copilot will help you in writing your pipeline definition files to generate the code for the different steps and tasks. Here are some examples of what it can do:* - -- *generate a pipeline definition file `from scratch`* -- *accelerate the writing of a pipeline definition file by `generating the code` for the different `steps, tasks and pieces of script`* -- *help `discover marketplace tasks and extensions` that match your need* - -### Step 1: generate from scratch - -- Create a new file `pipeline.yml` in the `.github/workflows` folder of the project and start typing the following prompt: - -```yml -# Github Action pipeline that runs on push to main branch -# Docker build and push the album-api image to ACR -``` - -*Copilot will generate the pipeline block by block. Generation pipelines Yaml, you will sometimes need to jump to a new line to trigger the generation of the next block more often than with other type of code.* - -*It will often generate a task with a few errores coming from bad indentation or missing quote around a task name. You can easily fix these with your IDE and your developer skills :)* - -### Step 2: add tasks from prompts - -- You probably have a github action workflow with at least a "login" task to your container registry and a "docker build and deploy" task. Add a new comment after those tasks to tag the docker image with the github run id and push it to the registry: - -```yml -# tag the image with the github run id and push to docker hub -``` - -you can play with other prompts like: - -```yml -# run tests on the album-api image - -# deploy the album-api image to the dev AKS cluster -``` - -### Step 3: add scripts from prompts - -- Copilot is also very usefull when you need to write custom script like the following example: - -```yml -# find and replace the %%VERSION%% by the github action run id in every appmanifest.yml file -``` - -## Infra As Code - -Copilot can also help you write Infrastructure as code. It can generate code for `Terraform, ARM, Bicep, Pulumi, etc...` and also `Kubernetes manifest files`. - -### Bicep - -Open the `main.bicep`file in `iac/bicep` folder and start typing prompts at the end of the file to add new resources: - -```js -// Container Registry - -// Azure Cognitive Services Custom Vision resource -``` - -### Terraform - -Open the `app.tf`file in `iac/terraform` folder and start typing prompts at the end of the file to add new resources: - -```yml -# Container Registry - -# Azure Cognitive Services Custom Vision resource -``` - -## Generate Git Commit comment - -Yes, writing a comment should be mandatory and developers tend to be lazy. GitHub Copilot can help with that. - -1. Just edit any file by adding some relevant content into it. - -2. On the Git commit panel, click the small magical button on the right - - ![GitHub Copilot Git comment generator](assets/git-commit.png) - -3. Admire Copilot having generated a comment for you - - ![Generated comment(assets/git-commit2.png) - -## Writing documentation - -Copilot can understand a natural language prompt and generate code and because it's just language to it, it can also `understand code and explain it in natural language` to help you document your code. -So it can help you in all your documentation tasks. It can generate simple documentation comment or standardized documentation comment like JavaDoc, JsDoc, etc... it can also help you translate your documentation in different languages. Let's see how it works. - -### simple documentation comment - -To see that just put you pointer on top of a Class, a method or any line of code and start typing the comment handler for the selected language to trigger copilot. In language like Java, C# or TS for example, just type `// `and let the magic happen. - -Here is an example in the `albums-viewer/routes/index.js` file. Insert a line and start typing on line 13 inside the `try block` - -```js -router.get("/", async function (req, res, next) { - try { - // Invoke the album-api via Dapr - const url = `http://127.0.0.1:${DaprHttpPort}/v1.0/invoke/${AlbumService}/method/albums`; - -``` - -Continue to play with it and see what happens on other pieces of code. - -### standardized documentation comment (JavaDoc, JsDoc, etc...) - -For this one, to trigger the documentation comment generation, you need to respect the specific comment format: - -- `/**` (for JS/TS) in the `index.js` file for example -- `///` for C# in the `AlbumController.cs` of the AlbumApi file for example - -```cs -/// -/// function that returns a single album by id -/// -/// -/// -[HttpGet("{id}")] -public IActionResult Get(int id) -``` - -### Writing markdown and html documentation - -Copilot is also very powerfull to help you write documentation. It can generate `markdown` and `html` code and accelerate the writing of your readme.md files like for this one for example. - -You can show that by creating a new file `demo.md` in the root of the project and start typing the following prompt: - -```md -# Github Copilot documentation -This documentation is generated with Github Copilot to show what the tool can do. - -## -``` - -From there by starting a new line with a secondary level title it will start generating the content of the documentation and it will showcase how it will accelerate the documentation writing process. - ---- - -# Use Copilot Chat to improve code quality - -GitHub Copilot is a generative AI and thus, perfect to generate code, but it has powerfull analysis capabilities on your code that can be used in several case to improve code quality like: find security issues, bad practices in your code and générate a fix, refactor and add comment to legacy code, generate tests, etc... - -If you already feel confortable with it you can jump to the next section. - -## Let's Start - -To start using Github Copilot Chat, you first need to: - -- Have a valid GitHub Copilot license (personal, business or enterprise). -- Install the extension in your IDE. For VS Code, you can find it directly by searching for `Github Copilot Chat` in the extensions tab. - -### Clone the repository - -We will use the same repository as the previous section to show how to use Copilot Chat to improve code quality. If you already have it, you can skip this step. - -You need to clone the following GitHub Repository: [Github Copilot Demo](https://github.com/Philess/gh-copilot-demo) - -This repository is a code starter that will help you experiment all capabilities with GitHub Copilot. Take the time to look at the architecture design displayed on the page and when you're ready, clone the repository from the command line and open it in VS Code. - -``` bash -git clone https://github.com/Philess/gh-copilot-demo -cd gh-copilot-demo -code . -``` - -## Start playing with the Chat - -Once Copilot Chat is setup, you can start using it: - -- by accessing the **chat view** from the left toolbar of your IDE (chat icon) -- by pressing `Ctrl` + `Shift` + `i` shortcut for a quick **inline question** to the chat - -The first one is a sticky version, very usefull to keep the chat open and ask questions to copilot. -The second one is a quick way to ask a question and get an answer and launch commands. - -### Chat View - -The chat view gives you a full chat experience, integrate as any other tool view in your IDE. Once the view is open you can start chatting with Copilot as your personnal code coach. It keeps the history of the conversation and you can ask question related to the previoius answers. It also provides suggestions for questions along the way. You can: - -- ask general question about coding on any language or best practice -- ask to generate or fix code related to the current file and inject the code directly in the file - -It's a more high level copilot than the vanilla copilot which is specialized on providing code completion. - -Try it with a few questions like: - -```text -> How to generate a random number in C#? -> What is the best way to secure a route is ASP.NET Core? -> What is the easiest way to generate a static website with NodeJS? -``` - -Try it then with some of your code files in the repository. Open a file a try asking: - -```text -> Can you explain me what this code does? -> (with only part of the code selected) Can you explain me what the selected code does? -> Can you generate a function that returns a random number between 1 and 10? -> Can you add documentation commentes to this function? -``` - -Try also using the questions suggestions that appears along the way. - -### Inline question - -The inline question is a quick way to ask a question to Copilot and get an answer. It's a good way to ask a question about a specific piece of code. It's also a good way to launch commands to Copilot. You can ask it to generate code, fix code, generate tests, etc... - -try it by pressing `Ctrl` + `Shift` + `i` and type the same type of commands you tried in the chat view. - -### Slash Commands - -To further help Copilot give you more relevant answers, you can choose a topic for your questions through "slash commands." - -You can prepend your chat inputs with a specific topic name to help Copilot give you a more relevant response. When you start typing /, you’ll see the list of possible topics: - -- **/explain**: Explain step-by-step how the selected code works. -- **/fix**: Propose a fix for the bugs in the selected code. -- **/help**: Prints general help about GitHub Copilot. -- **/tests**: Generate unit tests for the selected code. -- **/vscode**: Questions about VS Code commands and settings. -- **/clear**: Clear the session. - -## Secure your code - -Copilot can help you find security issues in your code and fix them. It can also help you find bad practices in your code and fix them. Let's see how it works. - -Open the `album-api/Controllers/UnsecuredController.cs` file and type questions like these to the chat: - -```text -> Can you check this code for security issues? -> Do you see any quality improvement to do on this code? -``` - -Once you have the answer, you can ask to fix the issues by typing: - -```text -> Can you propose a fix? -``` - -When you have the fix in the code you choose to **copy it or inject it directy in the file** by hovering the code block in the chat and selecting the right option on the top left. - -## Code Explanation and documentation - -You can use Copilot Chat to explain code to you. It can `explain you the code in natural language or generate documentation comments for you`. Let's try that with the following commands: - -```test -> /explain -> Generate documentation comments for this code -``` - -## Code Refactoring - -More impressive, Copilot chat can help you refactor your code. It can help you `rename variables, extract methods, extract classes, etc...`. - -You can try some of these commands on the `album-api/Controllers/UnsecuredController.cs` file: - -```test -> extract methods -> create Async version of each methods when it makes sense -``` - -## Code Translation - -*Copilot can understand and generate natural languages and code language in both way so by combining everything you can use it to `translate code pieces from a language to another one`* - -To translate a piece of code in a specific language, open it and ask to the chat to translate it to another language. For example open the `validators.ts` file created in the first section dedicated to Copilot autocompletion and ask to translate it to C for example. - -In case of dealing with Legacy code like COBOL for example it can be very useful. Open the `legacy/albums.cbl` file and try translating the code to Python. - -## Tests generation - -Copilot can also help you generate tests for your code. It can generate `unit tests, integration tests, end to end tests, and load testing` tests with JMeter scripts for example. - -Open the `album-api/Controllers/UnsecuredController.cs` file and type questions like these to the chat: - -```test -> Generate a unit tests class for this code -``` - -You can also use copilot to help you generate Stubs and Mocks for your tests. - -```text -> Generate a mock for FileStream class -> Use that mock in the unit tests -``` - -
- -> Remember that Copilot chat is keeping track of the previous Q & A in the conversation, that's why you can reference the previously generated mock and test easily. - -
- -## Use Chat participants - -Chat participants are like specialized experts who can assist you with specific tasks. You can mention them in the chat using the @ symbol. Currently, there are three Chat participants available for Visual Studio Code: - -- **@workspace**: This chat participant has knowledge about the code in your workspace and can help you navigate it by finding relevant files or classes. The @workspace chat participant uses a meta prompt to determine what information to collect from the workspace to help answer your question. -- **@vscode**: This chat participant is knowledgeable about commands and features in the VS Code editor itself, and can assist you in using them. -- **@terminal**: This chat participant has context about the Visual Studio Code terminal shell and its contents. - -They may not be super rich for the moment but their features will continue to grow over the time. Here are some example - -Open the side Chat panel and type **@workspace /New* to specify that you want to create a new project. For instance, try to create an Asp.Net project - -```text -> @workspace /new create a new asp.net core 6.0 project, with three views Index, Users and products. -``` - -It should create a structured project and even a new button to create the file. Click on "Create workspace" to see files being created. - -![GitHub Copilot Chat Participants](assets/agents.png) - -## Tips - -GitHub Copilot Chat is very handful but for a developer, leaving the keyboard and having to take the mouse to open the Chat tab can be boring. You can directly call the Chat inside the code editor. - -1- Open any file containing code - -2- Use the shortcut **Ctrl + i**. It should open the Quick chat popup, a small chat windows where you put your cursor - -![GitHub Copilot Quick Chat](assets/quickchat.png) - -3- Type any command to generate some code (i.e. "Create a C# class named Toto). The generated code is injected inside the current file which may be what you want - ---- - -# Prompt engineering in Copilot Chat - -In the previous section you discovered how to use basic prompts to get code from Copilot Chat. In this section you will learn techniques to get more accurate results using prompt engineering techniques. - -**What is prompt engineering?** -Prompt engineering is the process of designing high quality prompts to generate high quality code suggestions. There are good practices and tips to write better prompts. Let's see some of them. - -## Provide examples: one-shot and few-shots programming - -Talking about prompt engineering, you can also use the chat to provide examples to Copilot. It's a good way to help Copilot understand what you want to do and generate better code. You can provide examples in the chat by typing with the validator.ts file open: - -```bash -# one-shot programming - -Write me unit tests for phone number validators methods using mocha and chai in the current file. -Use the following examples for positive test (test that should return true): -it('should return true if the phone number is a valid international number', () => { expect(validatePhoneNumber('+33606060606')).to.be.true; }); -Organize test in logic suites and generate at least 4 positives tests and 2 negatives tests for each method. -``` - -```bash -# few-shot programming - -Write me unit tests for all validators methods using mocha and chai in the current file. -Use the following examples for positive test (test that should return true): -it('should return true if the phone number is a valid international number', () => { expect(validatePhoneNumber('+33606060606')).to.be.true; }); -it('should return true if the phone number is a valid local american number', () => { expect(validatePhoneNumber('202-939-9889')).to.be.true; }); -it('should throw an error if the given phone number is empty', () => { expect(validatePhoneNumber('')).to.throw(); }); -Organize test in logic suites and generate at least 4 positives tests and 2 negatives tests for each method. -``` - -You can use this technique to **generate code that keeps the styling code from another file**. For example if you want to create sample records for music style like the Albums in albums-api>Models>Album.cs file, open it and type: - -```bash -Write a MusicStyle record that conatins a List with 6 sample values like in the Album.cs file. -``` - -## Provide external references - -The chat copilot can use external references to build more accurate suggestions. For exemple if you want to generate a code that make a request to an API you can provide an example of the API response in the chat or the url to the API reference. Copilot will use it to generate better code. - -```bash -Write a TS function that retreiev all dog breeds from the following API and return an array of Breed objects Request: HTTP GET https://dog.ceo/api/breeds/list/all -``` - -Copilot will use the given external reference to generate the code. You will see that he wil generate the Breef interface (or class) with a subBreeds property. It's coming from the API given by the external reference. - -```ts -interface Breed { - name: string; - subBreeds: string[]; -} -``` - -
- -> You can also provide links to external documentations like SDK, libraries, etc... or event normative documents like RFCs, etc... - -
- -## Role Prompting - -Also called foundational prompt, it's a general prompt you're giving to Copilot Chat to personnalise his behavior and setup your flavour of Copilot. - -This is probably the first thing to do when you start a new task with Copilot Chat: **provide a clear description of what you want to build and how do you want copilot to help you**. - -
- -> **This is very powerfull when handled properly** so be sure to start every coding sessions with a role prompt and save your best prompt for future use. - -
- -***Structure of a role prompt*** - -What can you include in a role prompt: - -- Provide solid context and background information on what you want to build. -- Define GitHub Copilot’s role and setting expectations about what feedback we are looking for. -- Be specific in the quality of answers and ask for reference and additional resources to learn more and ensure the answers you receive are correct -- Resume the task and ask if the instructions are clear - -***Example of a role prompt*** - -Start a new conversation and type the following prompt: - -```bash -I'm working on a new mobile application that is built on React Native. -I need to build a new feature that will allow the user to upload a picture of a dog and get the breed of the dog. -I will need to use the following set of APIs to work on the breeds: https://dog.ceo/api/breeds. I need to be sure that my code is secured againt at least the OWASP Top 10 treats (https://owasp.org/Top10/). -I need to have unit tests for the code and i want my application to be fully accessible and conforms with the WCAG 2.1 level A and AA success criteria defined at https://www.w3.org/TR/WCAG21/. -I need you to act as my own code coach to ensure that my code fits all these requirements. -When possible, please provide links and references for additional learning. -Do you understand these instructions? -``` - -From there you can start asking questions and from time to time, ensure Copilot still follows the instructions by asking: - -```bash -Are you still using the instructions I provided? -``` - -***Test your role prompt*** - -You can test your role prompt by asking questions about best practices for accessibility on React Native Apps and OWASP Top 10 treats. You can also ask to generate code for the upload feature and check if the generated code is secured and accessible. - -Try these questions for example: - -```bash -how can i make my app accessible with react native? - -what is the most secure way to upload a photo from my app? -``` - ---- - -# Develop a NodeJS server - -In this first exercise, you are going to develop a real project following functional requirements. You can do it by yourself or...with the help of GitHub Copilot. - -## Instructions - -- Download to local the [exercicefile](assets/src/exercisefiles.zip) folder -- Open `nodeserver.js` and begin by writing a Nodejs server, check the first suggestions based on the initial text -- Open `test.js` file and analyze the current test -- Open a command prompt and run the test (`mocha test.js`) -- See the result, it should display something like: - -``` bash -mocha test.js -server is listening on port 3000 - - Node Server - - √ should return "key not passed" if key is not passed - - 1 passing (34ms) - -``` - -- In the `nodeserver.js` develop the rest of the methods described in the Exercise described in the section below - -> Do not forget to open `color.json` file in Visual Studio Code, so GitHub Copilot get all the context to make better recommendations - -- In the test.js file add the methods to test the functionality -- Run the tests to verify that all is working -- Open the `dockerfile` file, and fill it, to create a docker container with a node image that can run the web server -- Create a command to run docker in port 4000 -- Test that the application is working in port 4000 -- In the **nodeserver.js** file, you can type a new line like `//run a curl command to test the server` so we can see how GitHub Copilot based on the current file produces a curl command, to be executed in the command line. -- Note: you can be more specific like `//run a curl command to test the daysBetweenDates` method. It should generate a test for a specific method - -## Exercise - -You must now develop and add new features to your server. The requests that the server must attend are the following: - -
- -> As you type GitHub Copilot will make suggestions, you can accept them by pressing Tab. If nothing shows up after GitHub Copilot write some lines, press enter and wait a couple of seconds. On Windows or Linux, press Ctrl + Enter. - -
- -
- -> There are a lot of code to write but you may be surprised by the time it will take to you to complete it. You can also only write 7 or 8 of them if you want, the exercise is not meant to be boring. - -
- -| Method | Requirements| -|---|---| -|**/Get**|Return a hello world message| -|**/DaysBetweenDates**|Calculate days between two dates.
Receive by query string 2 parameters date1 and date 2 , and calcualte the days that are between those two dates.| -|**/Validatephonenumber**|Receive by querystring a parameter called `phoneNumber`.
Validate `phoneNumber` with Spanish format, for example +34666777888
if `phoneNumber` is valid return "valid"
if `phoneNumber` is not valid return "invalid"| -|**/ValidateSpanishDNI**|Receive by querystring a parameter called `dni`. calculate DNI letter
if DNI is valid return "valid"
if DNI is not valid return "invalid"
We will create automated tests to check that the functionality is correctly implemented.
When the development is completed, we will build a container using Docker| -|**/ReturnColorCode**|Receive by querystring a parameter called `color`
read `colors.json` file and return the `rgba` field
get color var from querystring
iterate for each color in colors.json to find the color
return the code.hex field| -|**/TellMeAJoke**|Make a call to the joke api and return a random joke using axios| -|**/MoviesByDirector**|(this will require to browse to [https://www.omdbapi.com/apikey.aspx](https://www.omdbapi.com/apikey.aspx) and request a FREE API Key)
Receive by querystring a parameter called director
Make a call to the movie api and return a list of movies of that director using axios
Return the full list of movies| -|**/ParseUrl**|Retrieves a parameter from querystring called someurl
Parse the url and return the protocol, host, port, path, querystring and hash
Return the parsed host| -|**/ListFiles**|Get the current directory
Get the list of files in the current directory
Return the list of files| -|**/GetFullTextFile**|Read `sample.txt` and return lines that contains the word "Fusce". (becareful with this implementation, since this normally reads the full content of the file before analizing it, so memory usage is high and may fail when files are too big)| -|**/GetLineByLinefromtTextFile**|Read `sample.txt` line by line
Create a promise to read the file line by line, and return a list of lines that contains the word "Fusce"
Return the list of lines| -|**/CalculateMemoryConsumption**|Return the memory consumption of the process in GB, rounded to 2 decimals| -|**/MakeZipFile**|Using zlib create a zip file called `sample.gz` that contains `sample.txt`| -|**/RandomEuropeanCountry**|Make an array of european countries and its ISO codes
Return a random country from the array
Return the country and its ISO code| - -## GitHub Copilot Chat exercises - -These tasks can be performed with the [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) add-in. - -- **Explain** - -Select the line that has the regex in the validatePhoneNumber method, and use `/explain` comamand. You will see an explanation detailing what each different notation does in the regular expression. - -- **Language translation** - -Select some source code, like this line: - -``` js -var randomCountry = countries[Math.floor(Math.random() * countries.length)]; -``` - -Ask to the chat to translate it to another language, for example Python. You should see new code generated in **python** - -- **Readable** - -Select the content of MakeZipFile - -Ask to the chat to make it more readable. See how comments are added and also variables that have short names are renamed to more understandable names. - -- **Fix Bug** - -In the exercise, there should be no bugs, since most of the code will be done by GitHub Copilot. We can force some errors and then test the debug functionality. - -Force some errors like: - -In a for loop change the beginning to (change the 0 for a 1): - -``` js - for (var i = 1 -``` - -select the text and ask to the chat to fix the bug. - -- **Make robust** - -Select some text that comes from input, for example, variables that come from query string: - -``` js - var queryData = url.parse(req.url, true).query; - var date1 = queryData.date1; - var date2 = queryData.date2; -``` - -Ask to the chat to make it robust, and you will see that additional validation is added. - -- **Document** - -Select some line (e.g. a method or the beginning of the if clause) - -``` js - else if (req.url.startsWith('/GetFullTextFile')) -``` - -Ask to the chat to document it. You will see that Copilot chat will explain what the code does and add comments to the code. - ---- - -# .Net Core - -The goal is to create a simple WebAPI using .NET 6.0 and Docker with the help of GitHub Copilot. -Follow the instructions below and try to use GitHub Copilot as much as possible. -Try different things and see what GitHub Copilot can do for you, like generating a Dockerfile or a class, adding comments, etc. - -Remember: - -Make sure GitHub Copilot is configured and enabled for the current language, just check the status bar on the bottom right corner of VS Code. - -## Create dotnet WebAPI project - -- Create a new NET project using - -``` powershell -dotnet new webapi -``` - -- Create a new file `User.cs` in the Models folder, and instruct Copilot to generate a class for you. - -- Add a new file `UserController.cs` in the Controllers folder that inherits from ControllerBase, and instruct Copilot to generate a controller for you. - -- Add `ApiController` and Route attributes to the class. - -- Add a new file `IUserService` in the Abstractions folder, and instruct Copilot to generate an interface for you. - -- Run the app using (if you are working with GitHub Codespaces you may need to remove HTTPS redirection from `Program.cs` ) - -``` powershell -dotnet run -``` - -- Implement the interface IUserService in `UserService.cs` in the Services folder and add some comments so GitHub Copilot be able to generate the implementation for you. - -- Instruct Copilot to generate a List for Users and the Add and Get Methods using the list. - -- Go to `Program.cs` a inject the `IUserService` before building the app. - -``` csharp -builder.Services.AddSingleton(); -``` - -- Run the app using - -``` powershell -dotnet run -``` - -> If you run into and "No server certificate was specified..." error, run the following command - -``` powershell -dotnet dev-certs https -``` - -- Forward port if needed - -- Navigate to your address /swagger. Example: [https://leomicheloni-supreme-space-invention-q74pg569452ggq-5164.preview.app.github.dev/swagger/index.html](https://leomicheloni-supreme-space-invention-q74pg569452ggq-5164.preview.app.github.dev/swagger/index.html) - -## Put the application into a Docker container - -- Publish the app and put it in a folder called _publish_ - -``` dotnet -dotnet publish -c Release -o publish -``` - -- Using the existing `Dockerfile`, put the app in a container and run it (add more instructions or start to write code and let GitHub Copilot complete it for you) -- Build the image and run the app on port 8080 - -``` powershell -docker build -t dotnetapp . -docker run -d -p 8080:80 --name dotnetapp dotnetapp -``` - ---- - -# Infrastructure as Code - -Generating code from a programming language is one thing, but can GitHub Copilot help to generate configurations such as Terraform, Bicep, etc? - -For this exercise, you want to deploy your previously developed Web application and want to host it on Azure. Here are the requirements: - -- The application will be hosted on an Azure Web App name `my-webapp` -- The App Service Plan (CPU & Memory) is named `my-plan` and is using the SKU (size) `B1` -- The Web app is hosted in West Europe in a resource group name `oh-yeah` - -
- -> There are several ways of using GitHub Copilot for that. For instance, you can write several consecutive lines of comments before letting GitHub Copilot giving recommandations. Furthermore, if the result is not conclusive, you can open a side panel to generate 10 alternatives suggestions. To do so, click `ctrl` + `Enter` - -
- ---- - -# Solutions - -Here you can find the solution to the different exercises. - -## Coding - -The solution of the coding exercise can be [downloaded here](assets/src/completesolution.zip) - -## Infrastructure As Code - -This part is the easiest one but GitHub Copilot can randomly generate bad or commented code. - -``` bicep -param webAppName string = 'my-webapp' -param webAppPlanName string = 'my-plan' -param webAppPlanSku string = 'B1' -param webAppPlanLocation string = 'westeurope' -param resourceGroupName string = 'oh-yeah' - -resource appServicePlan 'Microsoft.Web/serverfarms@2021-02-01' = { - name: webAppPlanName - location: webAppPlanLocation - kind: 'app' - sku: { - name: webAppPlanSku - tier: 'Basic' - size: 'B1' - } -} - -resource webApp 'Microsoft.Web/sites@2021-02-01' = { - name: webAppName - location: webAppPlanLocation - kind: 'app' - properties: { - serverFarmId: appServicePlan.id - } -} - -resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { - name: resourceGroupName - location: webAppPlanLocation -} -``` - -## DevSecOps - -GitHub Copilot may not be able to fix and refactor all the code (for instance using the `fix bug` prompt) but it is pretty good to recognize code smells and bad practices if you ask through the chat. - -Several security flaws are present in this short piece of code. You should have at least found 4 major bad practices: - -This code seems innocent but it could allow [Path injection](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3003). It means someone can try to access another file on the disk. - -``` csharp -using (FileStream fs = File.Open(userInput, FileMode.Open)) - { - // If possible, limit file paths based on user input to an explicitly known safe list. For example, if your application only needs to access "red.txt", "green.txt", or "blue.txt", only allow those values. - // Check for untrusted filenames and validate that the name is well formed. - // Use full path names when specifying paths. - // Avoid potentially dangerous constructs such as path environment variables. - // Only accept long filenames and validate long name if user submits short names. - // Restrict end user input to valid characters. - // Reject names where MAX_PATH length is exceeded. - // Handle filenames literally, without interpretation. - // Determine if the filename represents a file or a device. - - byte[] b = new byte[1024]; - UTF8Encoding temp = new UTF8Encoding(true); - - while (fs.Read(b, 0, b.Length) > 0) - { - return temp.GetString(b); - } - } - - return null; -} -``` - -This one is a famous example of [SQL Injection](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3001). The best thing to do is to use a parameter that will handle any attempt of escape code or wrong parameter boxing (type). - -``` csharp -public int GetProduct(string productName) -{ - using (SqlConnection connection = new SqlConnection(connectionString)) - { - SqlCommand sqlCommand = new SqlCommand() - { - CommandText = "SELECT ProductId FROM Products WHERE ProductName = '" + productName + "'", - CommandType = CommandType.Text, - }; - - // The secure way - // SqlCommand sqlCommand = new SqlCommand() - // { - // CommandText = "SELECT ProductId FROM Products WHERE ProductName = @productName", - // CommandType = CommandType.Text, - // }; - // sqlCommand.Parameters.AddWithValue("@productName", productName); - - SqlDataReader reader = sqlCommand.ExecuteReader(); - return reader.GetInt32(0); - } - -} -``` - -A general good practice is to never display ([Disclosing information](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3004)) any technical error to the end-user. It can show the used technology, the version of a plugin or even the stack trace which are additional information an attacker could use against your application. - -``` csharp -public void GetObject() -{ - try - { - object o = null; - o.ToString(); - } - catch (Exception e) - { - this.Response.Write(e.ToString()); - // better to do - // myLogger.Log(e.ToString()); // or any way to log the exception information - // this.Response.Write("An exception has occured"); // return a generic message - } - -} -``` - -This one is tricky and simple at the same time. The connectionString may contain credentials and must NEVER be hard coded. You can't change it easily but more important, anyone accessing the source code can get access to the secret. - -``` csharp -private string connectionString = ""; -``` - ---- - -# Credits - -This workshop's challenges are a fork from the original Hackaton [accessible here](https://github.com/microsoft/CopilotHackathon). We just wanted to integrate it into the [MOAW](https://github.com/microsoft/moaw) format and add some exercises. - -Role Prompts described in the Prompt engineering section are inspired by this [great blog post](https://github.blog/2023-10-09-prompting-github-copilot-chat-to-become-your-personal-ai-assistant-for-accessibility/) from Github's engineers [Ed Summers](https://github.com/edsummersnc) and [Jesse Dugas](https://github.com/jadugas). - -A big thanks to them <3 From c4828e6bf8c84ebb369f7357b5d9a8cfc5690755 Mon Sep 17 00:00:00 2001 From: Philess Date: Mon, 10 Mar 2025 16:41:21 +0100 Subject: [PATCH 2/5] Update title to fit more with previous one --- packages/database/external.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/external.yml b/packages/database/external.yml index 82ce281f..d219983c 100644 --- a/packages/database/external.yml +++ b/packages/database/external.yml @@ -601,7 +601,7 @@ tags: java, python, GitHub, copilot, AI, csu navigation_levels: 3 -- title: The Ultimate GitHub Copilot workshop for developers +- title: GitHub Copilot, your new AI pair programmer - The Ultimate workshop for developers url: https://aka.ms/github-copilot-hol github_url: https://github.com/Philess/GHCopilotHoL language: en From 3a058f8b2f83159bd160d690e0f1b3ad4d7568cc Mon Sep 17 00:00:00 2001 From: Philippe D Date: Thu, 3 Apr 2025 01:12:39 +0200 Subject: [PATCH 3/5] Update url to the workshop --- packages/database/external.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/database/external.yml b/packages/database/external.yml index d219983c..575852da 100644 --- a/packages/database/external.yml +++ b/packages/database/external.yml @@ -602,10 +602,10 @@ navigation_levels: 3 - title: GitHub Copilot, your new AI pair programmer - The Ultimate workshop for developers - url: https://aka.ms/github-copilot-hol + url: https://microsoft.github.io/moaw/workshop/gh:Philess/GHCopilotHoL/main/docs/ github_url: https://github.com/Philess/GHCopilotHoL language: en - last_updated: 2025-03-10 + last_updated: 2025-04-03 type: workshop description: Discover how to leverage GitHub Copilot to develop your project authors: From 467d1cbdf27140700b0d454972c6e0316af1510b Mon Sep 17 00:00:00 2001 From: Philippe D Date: Wed, 14 May 2025 12:37:36 +0000 Subject: [PATCH 4/5] update workshop to notify the move --- .../translations/workshop.ja.md | 1147 +++++++++++++++++ workshops/github-copilot/workshop.md | 29 + 2 files changed, 1176 insertions(+) create mode 100644 workshops/github-copilot/translations/workshop.ja.md create mode 100644 workshops/github-copilot/workshop.md diff --git a/workshops/github-copilot/translations/workshop.ja.md b/workshops/github-copilot/translations/workshop.ja.md new file mode 100644 index 00000000..125d4297 --- /dev/null +++ b/workshops/github-copilot/translations/workshop.ja.md @@ -0,0 +1,1147 @@ +--- +published: true +type: workshop +title: Product Hands-on Lab - GitHub Copilot, 新たな AI ペアプログラマー +short_title: GitHub Copilot, 新たな AI ペアプログラマー +description: GitHub Copilotを活用してプロジェクトを開発する方法をご紹介 +level: beginner +authors: + - Philippe DIDIERGEORGES + - Louis-Guillaume MORAND +contacts: + - '@philess' + - '@lgmorand' +duration_minutes: 240 +tags: javascript, .net, GitHub, IA, copilot, AI, csu +banner_url: ../assets/banner.jpg +sections_title: + - はじめに + - Github Copilot + - Github Copilot Chat + - 高度なプロンプトエンジニアリング + - チャレンジ 1 - NodeJS server + - チャレンジ 2 - .Net Core API + - チャレンジ 3 - Infra as Code + - 解答 + - Credits +--- + +# GitHub Copilot を活用して効率を上げる +このワークショップの目的は、Nodejs を使って様々な機能を持つウェブサーバーを構築し、さらに .NET Web API を作成するという課題を通じて GitHub Copilot の使い方を学ぶことです。第二部では、Infrastructure as Code での活用方法や、セキュリティ上好ましくないコードの修正方法を学びます。 + +GitHub Copilot は、開発者がより良いコードをより早く書くのを助ける AI コードアシスタントです。何十億行ものコードに対して訓練された機械学習モデルを使用して、対象のコンテキストに基づいて行全体または関数レベルの提案を行います。GitHub Copilot を使用することで、より良いコードを書く方法を学び、生産性を向上させることができます。 + +
+ +> GitHub Copilot は急速に進化している製品であるため、このワークショップは、使用する拡張機能のさまざまな機能に関して 100% 最新ではない可能性があります。コンテンツと異なる場合は状況に応じて推察して進めてください。参考までに、このページは 2023 年 12 月に更新されました。 + +
+ +## 前提条件 + +| | | +|----------------|-----------------| +| Node.js v16+ | [Node.js のダウンロード](https://nodejs.org) | +| .Net Core | [.Net Core のダウンロード](https://dotnet.microsoft.com/download) | +| GitHub アカウント | [GitHub 無料アカウントの作成](https://github.com/join) | +| GitHub Copilot のアクセス | 60 日間の試用版は[こちらから申請](https://github.com/github-copilot/signup) | +| コードエディター | [VS Code のダウンロード](https://code.visualstudio.com/Download) | +| VSCode 拡張機能 | [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot), [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat)| +| ブラウザー | [Microsoft Edge のダウンロード](https://www.microsoft.com/edge)もしくはその他| + +
+ +> また、いくつかのアセットをダウンロードする必要があります。[ここからダウンロード](../assets/src/exercisefiles.zip)できます。 + +
+ +## GitHub Codespaces で作業 + +ハンズオン環境は既に [GitHub Codespaces](https://github.com/features/codespaces) で動作するように構成されており、構成ファイルは *.devcontainer* フォルダーにあります。 + +新しい codespace を作成するだけでプログラミングを開始する準備が整うため、何もインストールする必要はありません。 + +## ローカルで作業 + +また、ローカルのコンピュータ上で作業することもできます。 + +1. [Visual Studio Code](https://code.visualstudio.com/) のインストール +2. [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) 拡張機能のインストール +3. [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) 拡張機能のインストール +4. [Node および npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) のインストール +5. mocha のインストール + ``` bash + npm install --global mocha + npm install axios + ``` + +7. [Docker](https://docs.docker.com/engine/install/) のインストール +8. [.NET Core](https://dotnet.microsoft.com/download) のインストール + +--- + +# Github Copilot の最初のステップ + +このセクションでは、GitHub Copilot を使い始めるための最初の手順について説明します。GitHub Copilot でできること、そして GitHub Copilot の可能性を最大限に活用する方法を学びます。既に GitHub Copilot の操作に慣れている場合は、NodeJS での最初の課題にスキップできます。 + +## 準備 + +この最初のチャレンジでは、次の GitHub リポジトリをクローンする必要があります: [Github Copilot Demo](https://github.com/Philess/gh-copilot-demo) + +このリポジトリは、GitHub Copilot の全ての機能を試すのに役立つコードスターターです。ページに表示されているアーキテクチャ設計をよく確認し、準備ができたら、コマンドラインからリポジトリをクローンして VS Code で開きます。 + +``` bash +git clone https://github.com/Philess/gh-copilot-demo +cd gh-copilot-demo +code . +``` + +## はじめての GitHub Copilot + +プロンプトの入力を開始し、Copilot が提案を生成したら、次のショートカットを使用して Copilot を操作できます。 +
    +
  • `tab` : 現在の提案を完全に受け入れる (`最も一般的`)
  • +
  • `ctrl + →` : 単語単位で提案を受け入れる (`部分的に利用`)
  • +
  • `alt + ^` : 次の候補を表示
  • +
  • `shift + tab` : 前の候補を表示
  • +
  • `ctrl + enter` : Copilot ペインの表示
  • +
+ +
+ +> これらのショートカットを思い出せない場合でも、候補の上にポインターを置くだけで表示されます。 + +
+ +## 自然言語翻訳 + +**文字列の自動補完** + +`album-viewer/lang/translations.json` ファイルを開きます。 + +```json +[ + { + "language": "en", + "values": { + "main-title": "Welcome to the world of the future", + "main-subtitle": "The future is now with copilot", + "main-button": "Get started" + } + } +] +``` + +- 最後の "}" の後に "," を追加して新しいブロックを追加し、Enter キーを押します + +
+ +## コード生成 + +**プロンプトとは?** +Copilot のコンテキストでは、プロンプトはコード候補を生成するために使用される自然言語の説明の一部です。これは、Copilot がコードを生成するために使用する入力です。1 行または複数行のプロンプトを利用することができます。 + +**プロンプトからコードを生成** + +新しい `album-viewer/utils/validators.ts` ファイルを作成し、プロンプトから始めます: + +```ts +// フランス語形式のテキスト入力から日付の検証をおこない、date オブジェクトに変換 +``` + +Copilot は正規表現を書くのにも役立ちます。これらを試してください: + +```ts +// GUID 文字列の形式を検証する関数 + +// IPV6 アドレス文字列の形式を検証する関数 +``` + +
+ +**Copilot で新しいツールやライブラリを発見する** + +同じ `album-viewer/utils/validators.ts` ファイルに、次のプロンプトを追加します: + +```ts +// テキスト入力から電話番号の検証をおこない、国コードを抽出 +``` + +
+ +> この例では、おそらく未定義のメソッドを呼び出すという提案がされるでしょう。これは、`ctrl+enter` ショートカットを使用して Copilot ペインを表示し、代替案を検討する良い機会です。 +
外部ライブラリを参照しているものを選択し、Copilot を使用してインポートしてみてください。新しいものを発見するのにこのツールが役に立つことがわかるでしょう。 + +
+ +**複雑なアルゴリズムの生成** + +`albums-api/Controllers/AlbumController.cs` ファイルで、`GetByID` メソッドの現在の実装を置き換えて完成させてみてください: + +```cs +// GET api//5 +[HttpGet("{id}")] +public IActionResult Get(int id) +{ + //here +} +``` + +同じファイルで、次のような他のプロンプトを試してみてください: + +```cs +// アルバムを name, artist ないし genre で検索する関数 + +// アルバムを name, artist ないし genre でソートする関数 +``` + +## 大きなタスクと小さなタスク + +### 大きなプロンプトと短いプロンプト + +Copilotは多くの場合で、クラス全体を生成するための複数行のプロンプトではなく、小さいながらも正確に記述されたコードを生成するプロンプトの方がより効果的です。 + +
+ +> 大きなコードを生成するための最良の戦略は、簡単なプロンプトでコードの基本的な構造の生成から始めて、単純なプロンプトで小さな部分を 1 つずつ追加していくことです。 + +
+ +**動作する*可能性のある*大きなプロンプト** + +- `albums-viewer/utils` に戻り、新しいファイル `viz.ts` を追加して、グラフを生成する関数を作成します。これをおこなうプロンプトの例を次に示します: + +```ts +// D3.js でアルバムの販売価格を年ごとにプロットする +// X 軸は月、Y 軸はアルバム販売数を示す +// アルバムの売上のデータは、外部ソースから読み込まれ、JSON 形式 +``` + +
+ +>Copilot はおそらく、詳細を追加してプロンプトを完成させようとするでしょう。自分で詳細を追加するか、Copilot の提案に従ってください。提案を停止してコード生成を開始したい場合は、別の行にジャンプして、Copilot に任せてください。 + +
+ +- チャートのコードを生成すると、IDE が d3 オブジェクトについて警告します。これにも Copilot が役立ちます。 +ファイルの先頭に戻り、`import d3` と入力して Copilot に自動補完させます。 + +```ts +import d3 from "d3"; +``` + +Copilot が生成したものを確認してください。コードが正常に動作し、要求した全てを実装している場合もありますが、トークンの制限に達し、Copilot がコード全体を生成できなかった可能性もあります。 + +これは、自動補完用の Copilot が、大きなコードを一度に作成するために作られているのではなく、小さな断片を段階的に生成することに特化しているためです。 + +**ステップバイステップで再チャレンジ** + +以下の手順に従って、プロンプトを細かく分割してコードを生成してみてください: + +```ts +import * as d3 from 'd3'; + +// json ファイルからデータを読み込み、then 関数のコールバック内で d3 svg を作成 +``` + +then 関数のコールバック内で、プロットの基本条件を設定することから始めます + +```ts +// svg の作成 +``` + +```ts +// X 軸と Y 軸のスケールを作成 +// X 軸は月、Y 軸はアルバムの販売数を示す +``` + +```ts +// X 軸と Y 軸の作成 +``` + +あとは、Copilot にチャートを完成させるように依頼するだけです + +```ts +// アルバムの売上データに基づいて折れ線グラフを生成 +``` + +
+ +>Copilot の自動補完で大きなタスクを小さなチャンクに分割することで、**常に**より良い結果を得ることができます。また、Copilot は魔法ではなく、他の IDE 機能や開発者のロジックと共に使用する必要があることも示されています。 + +
+ +## テスト + +Copilot は、コードで記述されたあらゆる種類のテストを生成するのに役立ちます。これには、たとえば JMeter スクリプトを使用した `単体テスト、統合テスト、エンドツーエンドテスト、ロードテスト` などのテストが含まれます。 + +- `albums-viewer/tests` フォルダーに新しいファイル `validators.test.ts` を追加します + +- 適切なテストの提案を得るには、使用するテストフレームワークなどの基本情報を Copilot に提供する必要があります: + +```ts +import { describe } +``` + +`describe` 関数を入力し始めると、Copilot は開発者が TS のテストファイル内で作業していることを確認し、JS / TS の有名なテストフレームワークである Mocha から `describe` 関数と `it` 関数をインポートすることを提案します。 +提案を受け入れると、Chai からの `expect` 関数も自動的に提案されますので、それも受け入れてください: + +```ts +import {describe, it} from 'mocha'; +import {expect} from 'chai'; +``` + +これでテストフレームワークの準備が整いました。ここで、`import` キーワードで新しい行を開始し、テスト対象の関数をインポートするだけで、Copilot はテストファイル内で作業していると判断し、いくつかの `validators` をテストするために、次のようなものを提案します: + +```ts +import {validateAlbumId} from '../src/validators'; +``` + +一見問題ないように見えますが、Copilot は全てのコードにアクセスできるわけではなく、開いているタブと限られた情報しかアクセスできないため、パスと関数名の両方が間違っていることがわかります。 +
+... 少なくとも Copilot は試してみました ... +
+しかし、Copilotは魔法ではなく、他の IDE 機能やあなたの脳と一緒に使用する必要があることを示す良い例です。 + +- 提案を受け入れ、パスを変更します。`ctrl + space` ショートカットを使うことで、実際に使用可能な関数を VS Code が提案してくれます。 + +- テストしたい最初の関数にコメントを追加して、魔法を起こさせます。: + +```ts +import {describe, it} from 'mocha'; +import {expect} from 'chai'; + +import {validateDate, validateIPV6} from '../utils/validators'; + +// validataDate 関数のテスト +``` + +Boom! + +```ts +describe('validateDate', () => { + it('should return a date object when given a valid date string', () => { + const date = '01/01/2019'; + const expectedDate = new Date(2019, 0, 1); + expect(validateDate(date)).to.deep.equal(expectedDate); + }); + + it('should throw an error when given an invalid date string', () => { + const date = '01/01/2019'; + expect(() => validateDate(date)).to.throw(); + }); +}); +``` + +*他の `it` ブロックを追加して、テストケースを追加したり、他の関数のテストを追加したりできます。たとえば、新しい `it` ブロックを追加して、空の文字列が与えられたときにエラーがスローされることをテストしてみてください。* + +## CI パイプラインの記述 + +*Copilot は、さまざまなステップやタスクのコードを生成することで、パイプライン定義ファイルの作成に役立ちます。ここでは、その機能の例をいくつか紹介します:* + +- *パイプライン定義ファイルを `ゼロから` 生成します* +- *さまざまな `ステップ、タスク、スクリプトの一部` の `コードを生成する` ことで、パイプライン定義ファイルの記述を高速化します* +- *あなたのニーズに合った `Marketplace のタスクと拡張機能を見つける` のを手伝ってくれます* + +### ステップ 1: ゼロから生成 + +- プロジェクトの `.github/workflows` フォルダーに新しいファイル `pipeline.yml` を作成し、次のプロンプトの入力を開始します: + +```yml +# main ブランチへの push 時に起動する GitHub Actions のパイプライン +# album-api イメージを Docker build し、ACR に push +``` + +*Copilot はブロックごとにパイプラインを生成します。パイプラインの Yaml ファイル生成では、他のタイプのコードよりも頻繁に次のブロックの生成をトリガーするために、新しい行にジャンプする必要がある場合があります。* + +*多くの場合、インデントが正しくなかったり、タスク名の周りの引用符が欠落していたりして、いくつかのエラーが発生するタスクが生成されます。これらは、IDE と開発者のスキルで簡単に修正できます。* + +### ステップ 2: プロンプトからタスクを追加 + +- 少なくともコンテナーレジストリへの "ログイン" タスクと "docker ビルドとデプロイ" タスクを含む GitHub Actions ワークフローが生成されているでしょう。これらのタスクの後に新しいコメントを追加して、Docker イメージに GitHub Actions run-id のタグを付け、レジストリにプッシュします: + +```yml +# GitHub Actions の run-id のタグをイメージに付与し、Docker Hub に push +``` + +次のような他のプロンプトを試すことができます: + +```yml +# album-api イメージでテストを実行 + +# album-api を dev 環境の AKS クラスターにデプロイ +``` + +### ステップ 3: プロンプトからスクリプトを追加 + +- Copilot は、次の例のようなカスタムスクリプトを記述する必要がある場合にも非常に便利です: + +```yml +# 全ての appmanifest.yml ファイルで %%VERSION%% を見つけて GitHub Actions の run-id に置換 +``` + +## Infra As Code + +Copilot は、インフラをコードとして記述するのにも役立ちます。`Terraform、ARM、Bicep、Pulumi` や、`Kubernetes マニフェスト ファイル` などのコードを生成することも可能です。 + +### Bicep + +`iac/bicep` フォルダー内の `main.bicep` ファイルを開き、ファイルの最後にプロンプトを入力して新しいリソースを追加します: + +```js +// Container Registry + +// Azure Cognitive Services Custom Vision resource +``` + +### Terraform + +`iac/terraform` フォルダー内の `app.tf` ファイルを開き、ファイルの最後にプロンプトを入力して新しいリソースを追加します: + +```yml +# Container Registry + +# Azure Cognitive Services Custom Vision resource +``` + +## Git Commit コメントの生成 + +コメントを書くことは必須であるべきですが、開発者は怠りがちです。GitHub Copilot がお手伝いします。 + +1. 適当なファイルに何かしらのコンテンツを追加します。 + +2. Git コミットパネルで、右側にある小さな魔法のボタンをクリックします + + ![Github Copilot Git コメントジェネレーター](../assets/git-commit.png) + +3. あなたに代わってコメントを生成しくれた Copilot を褒めてあげましょう + + ![生成されたコメント](../assets/git-commit2.png) + +## ドキュメントの記述 + +Copilot は自然言語のプロンプトを理解してコードを生成することができます。また、`コードを理解し、自然言語で説明する`こともでき、コードのドキュメントを作成するのに役立ちます。 +そのため、全てのドキュメント作成タスクに役立ちます。単純なドキュメントコメントや、JavaDoc、JsDoc などの標準化されたドキュメントコメントを生成できます。また、ドキュメントをさまざまな言語に翻訳するのにも役立ちます。それがどのように機能するか見てみましょう。 + +### 単純なドキュメントコメント + +これを確認するには、クラス、メソッド、または任意のコード行の上にポインターを置き、選択した言語のコメントハンドラーの入力を開始して Copilot をトリガーします。たとえば、Java、C#、TS などの言語では、 `//` と入力するだけで魔法が起こります。 + +以下は `albums-viewer/routes/index.js` ファイルの例です。行を挿入し、`try ブロック` 内の 13 行目の入力を開始します + +```js +router.get("/", async function (req, res, next) { + try { + // Invoke the album-api via Dapr + const url = `http://127.0.0.1:${DaprHttpPort}/v1.0/invoke/${AlbumService}/method/albums`; + +``` + +他のコードでも何が起こるかを試してみてください。 + +### 標準化されたドキュメントコメント (JavaDoc、JsDoc など) + +この場合、ドキュメントコメントの生成をトリガーするには、特定のコメント形式を意識する必要があります: + +- `/**` JS/TS: たとえば `index.js` ファイル内 +- `///` C#: たとえば AlbumApi の `AlbumController.cs` ファイル内 + +```cs +/// +/// アルバムを取得する関数 +/// +/// アルバムのID +/// アルバムの情報 +[HttpGet("{id}")] +public IActionResult Get(int id) +``` + +### マークダウンと HTML ドキュメントの記述 + +Copilot は、ドキュメントの記述にも非常に強力です。`マークダウン` と `html` コードを生成し、例えばこのような readme.md ファイルの記述を加速するのに役立ちます。 + +これを試すために、プロジェクトのルートに新しいファイル `demo.md` を作成し、次のプロンプトを入力してください: + +```md +# Github Copilot ドキュメント +このドキュメントは、ツールが何をできるかを示すために GitHub Copilot で作成されました。 + +## +``` + +次に、2 番目のレベルのタイトルで新しい行を開始することで、ドキュメントのコンテンツを生成し、ドキュメントの記述プロセスを加速する方法を示します。 + +--- + +# コード品質を向上させるために Copilot Chat を使用する + +GitHub Copilot は生成 AI であり、そのため、コードを生成するのに最適ですが、コードの分析機能も強力で、コードの品質を向上させるために使用できます。たとえば、セキュリティの問題を見つけ、コードの品質を向上させるための提案を生成し、レガシーコードにコメントを追加し、リファクタリングをおこない、テストを生成するなど、さまざまなケースでコード品質を向上させるために使用できます。 + +既に慣れている場合は、次のセクションに進むことができます。 + +## はじめに + +GitHub Copilot Chat を使用するには、まず次のことが必要です: + +- 有効な GitHub Copilot ライセンス (Individual、Business、Enterprise) を持っていること。 +- IDE に拡張機能をインストールすること。VS Code の場合、拡張機能タブで `Github Copilot Chat` を検索して直接見つけることができます。 + +### リポジトリのクローン + +前のセクションと同じリポジトリを使用し、Copilot Chat を使用してコード品質を向上させる方法を示します。既にお持ちの場合は、この手順をスキップできます。 + +次の GitHub リポジトリをクローンする必要があります: [Github Copilot Demo](https://github.com/Philess/gh-copilot-demo) + +このリポジトリは、GitHub Copilot で全ての機能を試すのに役立つコードスターターです。リポジトリのページに表示されているアーキテクチャー設計をよく確認し、準備ができたら、コマンドラインからリポジトリをクローンして VS Code で開きます。 + +``` bash +git clone https://github.com/Philess/gh-copilot-demo +cd gh-copilot-demo +code . +``` + +## はじめての Copilot Chat + +Copilot Chat をインストールしたら、次の手順で使い始めることができます。 + +- IDE の左側のツールバー (チャットアイコン) から**チャットビュー**にアクセスします。 +- `Ctrl` + `Shift` + `i` ショートカットを押すと、チャットに簡単な**インライン質問**が表示されます。 + +最初のものは固定のバージョンで、チャットを開いたままにして Copilot に質問するのに非常に便利です。 +2 つ目は、質問をし、回答を得てコマンドを起動するための簡単な方法です。 + +### チャットビュー + +チャットビューは、IDE の他のツールビューと同様に統合され、完全なチャットエクスペリエンスを提供します。ビューが開いたら、Copilot をコードコーチとしてチャットを開始できます。会話の履歴を保持し、前の回答に関連する質問をすることができます。また、途中で質問に対する提案も提供します。次のことが可能です: + +- 任意の言語でのコーディングやベストプラクティスに関する一般的な質問をする +- 現在のファイルに関連するコードを生成または修正し、そのコードをファイルに直接挿入するように依頼する + +これは、コード補完の提供に特化した普通の Copilot よりも高レベルの Copilot です。 + +次のようないくつかの質問で試してみてください: + +```text +> C#で乱数を生成するには? +> ASP.NET Core でルートをセキュアにする最良の方法は何ですか? +> NodeJS で静的 Web サイトを生成する最も簡単な方法は何ですか? +``` + +次に、リポジトリ内のコード ファイルのいくつかで試してみてください。ファイルを開いて、次の質問をしてみてください: + +```text +> このコードが何をするのか説明していただけますか? +> (コードの一部のみを選択した状態) 選択したコードが何をするのか説明していただけますか? +> 1 から 10 までの乱数を返す関数を生成できますか? +> この関数にドキュメントコメントを追加できますか? +``` + +途中で表示される質問の提案も使用してみてください。 + +### インラインの質問 + +インライン質問は、Copilot に質問して回答を得るための簡単な方法です。これは、特定のコードについて質問するのに適した方法です。また、Copilot のコマンドを起動するのにも適しています。コードの生成、コードの修正、テストの生成などを依頼できます。 + +`Ctrl` + `Shift` + `i` を押して、チャットビューで試したのと同じコマンドを入力して試してみてください。 + +### スラッシュコマンド + +Copilot がより関連性の高い回答を得られるように、`スラッシュコマンド` を使用して質問のトピックを選択できます。 + +チャット入力の先頭に特定のトピック名を付加すると、Copilot がより関連性の高い応答を返すことができます。 `/` と入力し始めると、考えられるトピックのリストが表示されます。 + +- **/explain**: 選択したコードがどのように機能するかを段階的に説明します。 +- **/fix**: 選択したコードのバグの修正を提案します。 +- **/help**: GitHub Copilot に関する一般的なヘルプを出力します。 +- **/tests**: 選択したコードの単体テストを生成します。 +- **/vscode**: VS Code のコマンドと設定に関する質問に答えます。 +- **/clear**: セッションをクリアします。 + +## コードをセキュリティで保護する + +Copilotは、コード内のセキュリティ問題を見つけて修正するのに役立ちます。また、コード内の悪いプラクティスを見つけて修正するのにも役立ちます。それがどのように機能するか見てみましょう。 + +`album-api/Controllers/UnsecuredController.cs` ファイルを開き、次のような質問をチャットに入力します: + +```text +> このコードにセキュリティ上の問題がないか確認できますか? +> このコードの品質を改善する方法はありますか? +``` + +答えが得られたら、次のように入力して問題の修正を依頼できます。 + +```text +> 修正を提案してもらえますか? +``` + +コードの修正が提案された場合は、チャットのコードブロックにカーソルを合わせ、左上の適切なオプションを選択して、**コピーするか、ファイルに直接挿入する**かを選択します。 + +## コードの説明とドキュメント + +Copilot Chat を使用してコードを説明してもらうことができます。`自然言語でコードを説明したり、ドキュメントコメントを生成したり`することができます。次のコマンドで試してみましょう。: + +```test +> /explain +> このコードのドキュメントコメントを生成して +``` + +## コードのリファクタリング + +さらに印象的なのは、Copilot チャットがコードのリファクタリングに役立つことです。`変数の名前変更、メソッドの抽出、クラスの抽出など`に役立ちます。 + +これらのコマンドのいくつかは、`album-api/Controllers/UnsecuredController.cs` ファイルで試すことができます: + +```test +> メソッドを抽出して +> 非同期処理が適切な場合、各メソッドの非同期バージョンを作成して +``` + +## コード翻訳 + +*Copilot は自然言語とプログラミング言語の両方を理解して生成できるため、それらを組み合わせることで、`コードの断片をある言語から別の言語に翻訳する`のに使用できます* + +特定の言語のコードを翻訳するには、そのコードを開き、チャットで別の言語への翻訳を依頼します。たとえば、Copilot 自動補完専用の最初のセクションで作成した `validators.ts` ファイルを開き、C への翻訳を依頼します。 + +COBOL のようなレガシーコードを扱う場合も非常に便利です。`legacy/albums.cbl` ファイルを開き、コードを Python に変換してみてください。 + +## テスト生成 + +Copilot は、コードのテストを生成するのにも役立ちます。たとえば、JMeter スクリプトを使用して `単体テスト、統合テスト、エンドツーエンドテスト、およびロードテスト`を生成できます。 + +`album-api/Controllers/UnsecuredController.cs` ファイルを開き、次のような質問をチャットに入力します: + +```test +> このコードの単体テストクラスを生成して +``` + +また、Copilot を使用して、テスト用のスタブとモックを生成することもできます。 + +```text +> FileStream クラスのモックを生成して +> そのモックを単体テストで使用して +``` + +
+ +> Copilot chat は会話の前の Q & A を追跡しているため、以前に生成されたモックを参照して簡単にテストできることを覚えておいてください。 + +
+ +## Chat participants の利用 + +Chat participants は、特定のタスクを支援できる専門の専門家のようなものです。チャットで @ 記号を使用してメンションできます。現在、次の 3 つの Chat participants を使用できます: + +- **@workspace**: この chat participant は、ワークスペース内のコードに関する知識を持っており、関連するファイルまたはクラスを見つけることで、ワークスペースの遷移を支援できます。@workspace chat participant は、メタプロンプトを使用して、質問への回答に役立てるためにワークスペースから収集する情報を決定します。 +- **@vscode**: この chat participant は、VS Code エディター自体のコマンドと機能に関する知識があり、それらの使用を支援できます。 +- **@terminal**: この chat participant は Visual Studio Code のターミナルとそのコンテンツに関するコンテキストを持っています。 + +今のところはそれほどリッチではないかもしれませんが、これらの機能は時間の経過とともに成長し続けます。次に例をいくつか示します + +サイドチャットパネルを開き、 `@workspace /new` と入力して、新しいプロジェクトを作成することを指定します。たとえば、ASP.NET プロジェクトを作成してみてください + +```text +> @workspace /new Index、Users、および Product の 3 つのビューをもった ASP.NET Core 6.0 のプロジェクト +``` + +構造化されたプロジェクトと、ファイルを作成するための新しいボタンが表示されるはずです。`Create workspace` をクリックして、作成中のファイルを確認します。 + +![GitHub Copilot Chat Participants](../assets/agents.png) + +## Tips + +GitHub Copilot Chat は非常に便利ですが、開発者にとっては、キーボードを離れ、マウスを動かしてチャットタブを開くのは面倒な作業です。そのためコードエディター内でチャットを直接呼び出すことができます。 + +1- コードを含むファイルを開きます + +2- ショートカット **Ctrl + i** を使用します。クイックチャットのポップアップ、即ちカーソルを移動させることができる小さなチャットウィンドウが開きます。 + +![GitHub Copilot クイックチャット](../assets/quickchat.png) + +3- コードを生成するコマンドを入力します (たとえば、`Toto という名前の C# クラスを作成して`)。生成されたコードは、現在のファイル内に挿入されます。これはあなたが望むものかもしれません。 + +--- + +# Copilot Chat におけるプロンプトエンジニアリング + +前のセクションでは、基本的なプロンプトを使用して Copilot Chat にコードを生成してもらう方法について説明しました。このセクションでは、プロンプトエンジニアリング手法を使用して、より正確な結果を得るための手法を学習します。 + +**プロンプトエンジニアリングとは?** +プロンプトエンジニアリングは、高品質のコード提案を生成するために、高品質のプロンプトを設計するプロセスです。より良いプロンプトを書くための良いプラクティスとヒントがあります。それらのいくつかを見てみましょう。 + +## 例を挙げる: one-shot と few-shots プログラミング + +プロンプトエンジニアリングを利用し、チャットを使って Copilot に例を提供することもできます。これは、Copilot が何をしたいのかを理解し、より良いコードを生成するのに役立つ良い方法です。チャットで例を提供するには、validator.ts ファイルを開いて次のように入力します: + +```bash +# one-shot プログラミング + +現在のファイルで mocha と chai を使用して、電話番号検証メソッドの単体テストを書いてください。 +ポジティブテスト (true を返すテスト) には、次の例を使用します: +it('電話番号が有効な国際番号である場合、trueを返す', () => { expect(validatePhoneNumber('+33606060606')).to.be.true; }); +ロジックのセットでテストを整理し、メソッドごとに少なくとも 4 つのポジティブテストと 2 つのネガティブテストを生成してください。 +``` + +```bash +# few-shot プログラミング + +現在のファイルで mocha と chai を使用して、全ての検証メソッドの単体テストを書いてください。 +ポジティブテスト (true を返すテスト) には、次の例を使用します。 +it('電話番号が有効な国際番号の場合は true を返す', () => { expect(validatePhoneNumber('+33606060606')).to.be.true; }); +it('電話番号が有効なアメリカのローカル番号の場合は true を返す', () => { expect(validatePhoneNumber('202-939-9889')).to.be.true; }); +it('指定された電話番号が空の場合、エラーをスローする', () => { expect(validatePhoneNumber('')).to.throw(); }); +ロジックのセットでテストを整理し、メソッドごとに少なくとも 4 つのポジティブテストと 2 つのネガティブテストを生成してください。 +``` + +この手法を使用して、**別のファイルのスタイルに従うコードを生成**できます。たとえば、albums-api>Models>Album.cs と同じように音楽スタイルのサンプルのレコードを作成する場合は、ファイルを開いて次のように入力します: + +```bash +Album.cs ファイルのように、6 つのサンプル値を List の形で持つ MusicStyle レコードを作成してください。 +``` + +## 外部参照の提供 + +Copilot Chat は、外部参照を使用して、より正確な提案を作成できます。たとえば、API にリクエストを送信するコードを生成する場合は、チャットで API レスポンスの例を提供するか、API リファレンスの URL を提供できます。Copilot はそれを使用して、より良いコードを生成します。 + +```bash +次の API から全ての犬種を取得し、Breed オブジェクトの配列を返す TS 関数を書いてください: HTTP GET https://dog.ceo/api/breeds/list/all +``` + +Copilot は、指定された外部参照を使用してコードを生成します。subBreeds プロパティをもつ Breef インターフェイス (またはクラス) が生成されます。これは、外部参照によって指定された API から取得されます。 + +```ts +interface Breed { + name: string; + subBreeds: string[]; +} +``` + +
+ +> SDK やライブラリなどの外部ドキュメントへのリンクを提供することもできます。または RFC などのイベント規範文書など... + +
+ +## ロールプロンプト + +foundational prompt とも呼ばれ、Copilot Chat の行動をパーソナライズし、Copilot のフレーバーを設定するために与える一般的なプロンプトです。 + +Copilot Chat で新しいタスクを開始するときに最初におこなうべきことは、**何を構築したいのか、Copilot にどのように支援してもらいたいのかを明確に説明すること**です。 + +
+ +> **これは適切に処理された場合に非常に強力です**。そのため、全てのコーディングセッションをロールプロンプトで開始し、将来的な使用のために最適なプロンプトを保存してください。 + +
+ +***ロールプロンプトの構造*** + +ロールプロンプトに何を含めることができるか: + +- 構築したいものに関する確かなコンテキストと背景情報を提供します。 +- GitHub Copilot の役割を定義し、どのようなフィードバックを求めているかについて期待値を設定します。 +- 回答の質を具体的にし、より多くのことを学び、受け取った回答が正しいことを確認するために、参考資料や追加のリソースを求めてください。 +- タスクを再開し、指示が明確かどうかを尋ねます。 + +***ロールプロンプトの例*** + +新しい会話を開始し、次のプロンプトを入力します: + +```bash +私は React Native で構築された新しいモバイルアプリケーションに取り組んでいます。 +ユーザーが犬の写真をアップロードして犬の品種を取得できる新しい機能を構築する必要があります。 +品種を操作するには、https://dog.ceo/api/breeds の API セットを使用する必要があります。コードが少なくとも OWASP Top 10 (https://owasp.org/Top10/) に対応していることを確認する必要があります。 +コードの単体テストが必要であり、また、https://www.w3.org/TR/WCAG21/ で定義されている WCAG 2.1 レベル A および AA の達成基準に準拠したアクセシビリティにしたいと考えています。 +私のコードがこれら全ての要件を満たしていることを確認するために、私自身のコードコーチとして行動してもらう必要があります。 +可能であれば、追加の学習のためのリンクと参照を提供してください。 +これらの指示を理解していますか? +``` + +そこから質問を開始し、時々、Copilot が指示に従っていることを確認するには、次の質問をします: + +```bash +私の指示をまだ使用していますか? +``` + +***ロールプロンプトをテストする*** + +React Native Apps と OWASP Top 10 に関するアクセシビリティのベストプラクティスについて質問をすることで、ロールプロンプトをテストできます。また、アップロード機能のコードを生成するように依頼し、生成されたコードがセキュリティで保護され、アクセシビリティの基準を満たしているかどうかを確認することもできます。 + +たとえば、次の質問を試してみてください: + +```bash +React Native で実装されたアプリのアクセシビリティを向上させるにはどうすればいいですか? + +アプリから写真をアップロードする最も安全な方法は何ですか? +``` + +--- + +# NodeJS サーバーの開発 + +この最初の演習では、機能要件に従って実際のプロジェクトを開発します。自分自身で進めることもできますし、GitHub Copilot の助けを借りることも可能です。 + +## 手順 + +- [exercicefile](../assets/src/exercisefiles.zip) フォルダーをローカルにダウンロードします +- `nodeserver.js` を開き、Nodejs サーバーを作成することから始め、テキストに初めから書いてある指示を基にした Copilot の提案を確認します +- `test.js` ファイルを開き、現在のテストを分析します +- コマンドプロンプトを開き、テストを実行します (`mocha test.js`) +- 結果を見ると、次のように表示されるはずです: + +``` bash +mocha test.js +server is listening on port 3000 + + Node Server + + √ should return "key not passed" if key is not passed + + 1 passing (34ms) + +``` + +- `nodeserver.js` では、演習セクションで残りのメソッドを開発します + +> 全てのコンテキストを与えてよりよい提案が生成されるように、Visual Studio Codeで `color.json` ファイルを開くことを忘れないでください。 + +- test.js ファイルに、機能をテストするメソッドを追加します。 +- テストを実行して、全てが機能していることを確認します。 +- `dockerfile` ファイルを開いてプロンプトを入力し、Web サーバーを実行できる Node イメージを含む Docker コンテナーを作成します。 +- ポート 4000 で docker を実行するコマンドを作成します。 +- アプリケーションがポート 4000 で動作していることをテストします。 +- **nodeserver.js** ファイルに `//サーバーをテストするために curl コマンドを実行` のような新しい行を入力すると、現在のファイルに基づいて GitHub Copilot がコマンドラインで実行するための curl コマンドをどのように生成するかを確認できます。 +- 注: `//daysBetweenDatesをテストするための curl コマンドを実行` といったコメントのように、より具体的に指定できます。この場合は特定のメソッドのテストが生成されるはずです。 + +## 演習 + +次に、新しい機能を開発し、サーバーに追加してください。サーバーが実装すべき要件は次のとおりです。 + +
+ +> 入力途中で GitHub Copilot が提案を表示します。提案を受け入れるには Tab キーを押します。数行書いた後 GitHub Copilot が何も表示しない場合は、Enter キーを押して数秒待ちます。Windows または Linux では、Ctrl + Enter キーを押します。 + +
+ +
+ +> 書くべきコードはたくさんありますが、完成までにかかる時間に驚かれるかもしれません。また、必要に応じて 7 つか 8 つだけ書いても構いませんが、この演習は退屈なものではありません。 + +
+ +| メソッド | 要件 | +|---|---| +|**/Get**|hello world メッセージを返します| +|**/DaysBetweenDates**|2 つの日付の間の日数を計算します
2 つのクエリ文字列パラメーター date1 と date 2 で受け取り、これら 2 つの日付の間の日数を計算します| +|**/Validatephonenumber**|クエリ文字列で `phoneNumber` というパラメーターを受け取ります
`phoneNumber` をスペイン語のフォーマットで検証します (例: +34666777888)
`phoneNumber` が有効であれば "valid" を返します
`phoneNumber` が有効でなければ "invalid" を返します| +|**/ValidateSpanishDNI**|クエリ文字列で `dni` というパラメーターを受け取り、DNI の文字列を検証します
DNI が有効であれば "valid" を返します
DNI が有効でなければ "invalid" を返します
機能が正しく実装されていることを確認するための自動テストを作成します| +|**/ReturnColorCode**|クエリ文字列で `color`というパラメーターを受け取ります
`colors.json` ファイルを読み取り、該当する色の `rgba` フィールドを返します| +|**/TellMeAJoke**|axios を使って joke API を呼び出し、ランダムにジョークを返します| +|**/MoviesByDirector**|(この実装には [https://www.omdbapi.com/apikey.aspx](https://www.omdbapi.com/apikey.aspx) を参照し、無料の API キーを取得する必要があります)
クエリ文字列で `director` というパラメーターを受け取ります
axios を使って映画の API を呼び出し、その `director` の映画一覧を返します| +|**/ParseUrl**|クエリ文字列で `someurl` というパラメーターを受け取ります
URL を Parse し、プロトコル、ホスト、ポート、パス、クエリ文字列、およびハッシュを返します| +|**/ListFiles**|カレントディレクトリを取得します
カレントディレクトリの全てのファイルを取得します
ファイルの一覧を返します| +|**/GetFullTextFile**|`sample.txt` を読み込み、"Fusce" という単語を含む行を返します (この実装には注意してください。なぜならば普通は解析前にファイルのコンテンツを全て読み込むことになるため、メモリー使用率が上昇し、ファイルがあまりにも大きいとエラーになる可能性があるためです。)| +|**/GetLineByLinefromtTextFile**|`sample.txt` を行ごとに読み込みます
ファイルを行ごとに読み込む promise を作成し、"Fusce" という単語を含む行の一覧を返します| +|**/CalculateMemoryConsumption**|プロセスのメモリー消費量を GB 単位で返します (小数点以下 2 桁に丸めて)| +|**/MakeZipFile**|zlib を利用して、`sample.txt` を含む `sample.gz` ファイルを作成します| +|**/RandomEuropeanCountry**|ヨーロッパの国とその ISO コードの配列を作成します
配列からランダムな国を返します
国とその ISO コードを返します| + +## GitHub Copilot Chat 演習 + +以下のタスクは、[GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat) 拡張機能で実行できます。 + +- **説明** + +validatePhoneNumber メソッドで正規表現の書かれている行を選択し、`/explain` コマンドを使用します。正規表現中のそれぞれの異なる表記法が何を意味するかについて詳しく説明してくれます。 + +- **プログラミング言語変換** + +たとえば、次のソースコードを選択します: + +``` js +var randomCountry = countries[Math.floor(Math.random() * countries.length)]; +``` + +Copilot Chat に別の言語 (Python など) への変換を依頼します。**python** で新しいコードが表示されます。 + +- **読みやすさ** + +MakeZipFile メソッドを選択します + +コードを読みやすくするよう Copilot Chat に依頼します。どのようにコメントが追加されるか、また、短い名前の変数の名前がどのようなわかりやすい名前に変更されるかを確認してください。 + +- **バグの修正** + +この演習では、ほとんどのコードが GitHub Copilot によって書かれるため、バグはほとんどありません。いくつかのバグをわざと作りこむことによって、デバッグ機能をテストできます。 + +次のようなバグを作りこみます: + +for ループで、先頭を次のように変更します (0 を 1 に変更します)。 + +``` js + for (var i = 1 +``` + +当該コードを選択し、Copilot Chat にバグの修正を依頼します。 + +- **堅牢にする** + +ユーザー入力由来のテキスト (クエリ文字列から取得される変数など) を選択します。 + +``` js + var queryData = url.parse(req.url, true).query; + var date1 = queryData.date1; + var date2 = queryData.date2; +``` + +Copilot Chat にコードを堅牢にするよう依頼すると、検証ロジックが追加されることがわかります。 + +- **ドキュメント** + +以下のような行を選択します (例: メソッドや if 句の先頭) + +``` js + else if (req.url.startsWith('/GetFullTextFile')) +``` + +Copilot Chat にドキュメントの作成を依頼します。Copilot Chat がコードの動作を説明し、コメントが追加されます。 + +--- + +# .Net Core + +目標は、GitHub Copilot の助けを借りて、.NET 6.0 と Docker を使用した単純な WebAPI を作成することです。 +以下の手順に従って、可能な限り GitHub Copilot を使用してみてください。 +さまざまなことを試してみて、Dockerfile やクラスの生成、コメントの追加など、GitHub Copilot で何ができるかを確認してください。 + +注意: + +VS Code の右下隅にあるステータス バーを確認し、GitHub Copilot が現在の言語用に構成され、有効になっていることを確認します。 + +## dotnet WebAPI プロジェクトの作成 + +- 新規 .NET プロジェクトの作成 + +``` powershell +dotnet new webapi +``` + +- フォルダーに新しいファイル `User.cs` を作成し、Copilot にクラスを生成するように指示します。 + +- 新しいファイル `UserController.cs` を Controllers フォルダーに追加し、Copilot にコントローラーを ControllerBase から継承して生成するように指示します。 + +- クラスに `ApiController` 属性と `Route` 属性を追加します。 + +- `IUserService` という新しいファイルを Abstractions フォルダーに追加し、Copilot にインターフェースを生成するように指示します。 + +- 次のコマンドを利用してアプリケーションを実行します (GitHub Codespaces を使用している場合は、`Program.cs` から HTTPS リダイレクトを削除する必要がある場合があります) + +``` powershell +dotnet run +``` + +- Services フォルダーの `UserService.cs` にインターフェイス IUserService を実装し、GitHub Copilot が実装を生成できるようにコメントを追加します。 + +- Copilot に、ユーザーのリストと、そのリストを使用した追加メソッドと取得メソッドを生成するように指示します。 + +- アプリをビルドする前に、`Program.cs` で `IUserService` を DI コンテナーに登録します。 + +``` csharp +builder.Services.AddSingleton(); +``` + +- 次のコマンドを利用してアプリケーションを実行します。 + +``` powershell +dotnet run +``` + +> "No server certificate was specified..." エラーが発生した場合、次のコマンドを実行してください。 + +``` powershell +dotnet dev-certs https +``` + +- 必要に応じてポートフォワーディングの設定をおこなってください + +- /swagger エンドポイントにアクセスします。e.g. [https://leomicheloni-supreme-space-invention-q74pg569452ggq-5164.preview.app.github.dev/swagger/index.html](https://leomicheloni-supreme-space-invention-q74pg569452ggq-5164.preview.app.github.dev/swagger/index.html) + +## アプリケーションを Docker コンテナーで実行 + +- アプリケーションを publish し、_publish_ フォルダーに出力します + +``` dotnet +dotnet publish -c Release -o publish +``` + +- 既存の `Dockerfile` ファイルを利用し、アプリケーションをコンテナーに配置して実行します (指示を追加するか、もしくはコードを書き、GitHub Copilot に保管させます) + +- イメージをビルドし、ポート 8080 で実行します + +``` powershell +docker build -t dotnetapp . +docker run -d -p 8080:80 --name dotnetapp dotnetapp +``` + +--- + +# Infrastructure as Code + +プログラミング言語からコードを生成するのは 1 つの使用例ですが、GitHub Copilot は Terraform、Bicep などの構成ファイルを生成するのに役立つでしょうか? + +この演習では、前のセクションで開発した Web アプリケーションをデプロイし、Azure でホストします。要件は次のとおりです。 + +- アプリケーションは、Azure Web アプリ名 `my-webapp` でホスト +- App Service プラン (CPU とメモリ) の名前は `my-plan` で、SKU (サイズ) `B1` を使用 +- Web アプリは、リソース グループ名 `oh-yes` で West Europe でホスト + +
+ +> 上記のケースで GitHub Copilot を使用する方法はいくつかあります。たとえば、GitHub Copilot に提案を生成してもらう前に、数行の連続したコメントを書くことができます。さらに、結果が意図したものでない場合、サイドパネルを開いて 10 個の代替案を生成できます。これをおこなうには、`ctrl` + `Enter` をクリックします + +
+ +--- + +# 解答 + +ここでは、いくつかの演習の解決策を確認することができます。 + +## コーディング + +コーディング演習の解答は [ここからダウンロード](../assets/src/completesolution.zip) できます。 + +## Infrastructure As Code + +この部分が最も簡単ですが、GitHub Copilot は不適切なコードやコメント付きのコードをランダムに生成する可能性があります。 + +``` bicep +param webAppName string = 'my-webapp' +param webAppPlanName string = 'my-plan' +param webAppPlanSku string = 'B1' +param webAppPlanLocation string = 'westeurope' +param resourceGroupName string = 'oh-yeah' + +resource appServicePlan 'Microsoft.Web/serverfarms@2021-02-01' = { + name: webAppPlanName + location: webAppPlanLocation + kind: 'app' + sku: { + name: webAppPlanSku + tier: 'Basic' + size: 'B1' + } +} + +resource webApp 'Microsoft.Web/sites@2021-02-01' = { + name: webAppName + location: webAppPlanLocation + kind: 'app' + properties: { + serverFarmId: appServicePlan.id + } +} + +resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { + name: resourceGroupName + location: webAppPlanLocation +} +``` + +## DevSecOps + +GitHub Copilotは、全てのコードを修正およびリファクタリングできない場合がありますが (たとえば、`バグの修正` プロンプトを使用)、チャットで質問すると、Code smells や悪いプラクティスを認識してくれるのは非常に良いことです。 + +以下の短いコードには、いくつかのセキュリティ上の欠陥があります。少なくとも 4 つの重大な悪いプラクティスが見つかるはずです。 + +このコードは無害に見えますが、[パスインジェクション](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3003)を許可する可能性があります。これは、誰かがディスク上の別のファイルにアクセスしようとする可能性があることを意味します。 + +``` csharp +using (FileStream fs = File.Open(userInput, FileMode.Open)) + { + // 可能であれば、ユーザー入力に基づいてファイルパスを明示的に既知のセーフリストに制限します。たとえば、アプリケーションが "red.txt"、"green.txt"、または "blue.txt" にのみアクセスする必要がある場合は、これらの値のみを許可します。 + // 信頼できないファイル名をチェックし、名前が問題ないことを確認します。 + // パスを指定するときは、絶対パス名を使用します。 + // PATH 環境変数などの潜在的に危険な構造は避けてください。 + // 長いファイル名のみを受け入れ、ユーザーが短い名前を送信する場合にのみ長い名前を検証します。 + // エンドユーザー入力を有効な文字に制限します。 + // MAX_PATH の長さを超えた名前をリジェクトします。 + // ファイル名を解釈せずにリテラルとして扱います。 + // ファイル名がファイルとデバイスのどちらを表しているかを確認します。 + + byte[] b = new byte[1024]; + UTF8Encoding temp = new UTF8Encoding(true); + + while (fs.Read(b, 0, b.Length) > 0) + { + return temp.GetString(b); + } + } + + return null; +} +``` + +これは [SQL インジェクション](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3001)の有名な例です。一番良いのは、エスケープコードや間違ったパラメーターボックス(型)の試みに対処できるパラメータを使うことです。 + +``` csharp +public int GetProduct(string productName) +{ + using (SqlConnection connection = new SqlConnection(connectionString)) + { + SqlCommand sqlCommand = new SqlCommand() + { + CommandText = "SELECT ProductId FROM Products WHERE ProductName = '" + productName + "'", + CommandType = CommandType.Text, + }; + + // セキュアな方式 + // SqlCommand sqlCommand = new SqlCommand() + // { + // CommandText = "SELECT ProductId FROM Products WHERE ProductName = @productName", + // CommandType = CommandType.Text, + // }; + // sqlCommand.Parameters.AddWithValue("@productName", productName); + + SqlDataReader reader = sqlCommand.ExecuteReader(); + return reader.GetInt32(0); + } + +} +``` + +一般的な良いプラクティスは、エンドユーザーに技術的なエラーを表示しないことです ([情報の開示](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca3004))。使用されているテクノロジー、プラグインのバージョン、さらには攻撃者がアプリケーションに対して使用できる追加情報であるスタックトレースが表示される可能性があります。 + +``` csharp +public void GetObject() +{ + try + { + object o = null; + o.ToString(); + } + catch (Exception e) + { + this.Response.Write(e.ToString()); + // よりよい方式 + // myLogger.Log(e.ToString()); // 例外のログ出力 + // this.Response.Write("例外が発生しました"); // 一般的なメッセージを返す + } + +} +``` + +以下の例はトリッキーであると同時にシンプルです。connectionString には資格情報を含めることができ、ハードコーディングしてはなりません。簡単に変更することができないというのもありますが、さらに重要なことは、ソースコードにアクセスする人なら誰でもシークレットにアクセスできることです。 + +``` csharp +private string connectionString = ""; +``` + +--- + +# Credits + +This workshop's challenges are a fork from the original Hackaton [accessible here](https://github.com/microsoft/CopilotHackathon). We just wanted to integrate it into the [MOAW](https://github.com/microsoft/moaw) format and add some exercises. + +Role Prompts described in the Prompt engineering section are inspired by this [great blog post](https://github.blog/2023-10-09-prompting-github-copilot-chat-to-become-your-personal-ai-assistant-for-accessibility/) from Github's engineers [Ed Summers](https://github.com/edsummersnc) and [Jesse Dugas](https://github.com/jadugas). + +A big thanks to them <3 diff --git a/workshops/github-copilot/workshop.md b/workshops/github-copilot/workshop.md new file mode 100644 index 00000000..55f40e17 --- /dev/null +++ b/workshops/github-copilot/workshop.md @@ -0,0 +1,29 @@ +--- +published: true +type: workshop +title: Product Hands-on Lab - GitHub Copilot, your new AI pair programmer +short_title: GitHub Copilot, your new AI pair programmer +description: Discover how to leverage GitHub Copilot to develop your project +level: beginner +authors: + - Philippe DIDIERGEORGES + - Louis-Guillaume MORAND +contacts: + - '@philess' + - '@lgmorand' +duration_minutes: 180 +tags: javascript, .net, GitHub, IA, copilot, AI, csu +banner_url: assets/banner.jpg +sections_title: + - Introduction +--- + +# This workshop has moved ! + +This workshop has moved to this url: [https://aka.ms/github-copilot-hol](https://aka.ms/github-copilot-hol) + +Please save this new url to your favorite for the next time :) + +## Japanese Workshop + +The japanese version is currently in the process of update. You still can find the previous version [available here]'https://moaw.dev/workshop/gh:Microsoft/moaw/main/workshops/github-copilot/translations/workshop.ja.md) From a5625b09b390fa2cadf8da0cbda4dadeeecbd51a Mon Sep 17 00:00:00 2001 From: Philippe D Date: Wed, 14 May 2025 12:54:37 +0000 Subject: [PATCH 5/5] add again resources and hide workshop --- workshops/github-copilot/assets/agents.png | Bin 0 -> 25756 bytes workshops/github-copilot/assets/banner.jpg | Bin 0 -> 78604 bytes workshops/github-copilot/assets/git-commit.png | Bin 0 -> 21205 bytes workshops/github-copilot/assets/git-commit2.png | Bin 0 -> 23143 bytes workshops/github-copilot/assets/quickchat.png | Bin 0 -> 15720 bytes .../assets/src/completesolution.zip | Bin 0 -> 48956 bytes .../github-copilot/assets/src/exercisefiles.zip | Bin 0 -> 7020 bytes workshops/github-copilot/workshop.md | 2 +- 8 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 workshops/github-copilot/assets/agents.png create mode 100644 workshops/github-copilot/assets/banner.jpg create mode 100644 workshops/github-copilot/assets/git-commit.png create mode 100644 workshops/github-copilot/assets/git-commit2.png create mode 100644 workshops/github-copilot/assets/quickchat.png create mode 100644 workshops/github-copilot/assets/src/completesolution.zip create mode 100644 workshops/github-copilot/assets/src/exercisefiles.zip diff --git a/workshops/github-copilot/assets/agents.png b/workshops/github-copilot/assets/agents.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6c59c1febc83b1b50f1506b81cc7cface0b084 GIT binary patch literal 25756 zcmcG#cUY5O*De?}N)Ul4DoQm{RjMcmNDz>sfPhMqF4BYm0-+N$QmjM;snSFNDWNCS zL~Nmj9s-1>^n`$v1V|uEe(!hATyxHR=gc+VJM#ydVRHR80I;tW0N6hTI>f!QRM0iY{kJdpwy{0{-7U7reFOB;GuHzEs!)78ZU?#V zc>_)Cg8=}6@BjSmBLoyb0017S-ng!JH{6*%9{b9P5Hq>^NAJlz{-bVhite=mSs7o$ z#J-!nY55A|l!AAdwr8KG=8qnvSzTylpzKx!FCUeNQ1nvFpPBvT1{)>m< z8Q0B34}ZSSH+on_^qJwEJmR|TUc01{-B-mUz+#TPN>8*`_lNat&EW2qrl^(iChdUz z%7Hx@!E;@jn-kkhAEGw9T_{!ViTePqP3$&f=zZq$xF`g;4`6tP+x$HHZ#0=VLCf1y z(Dk=2tm5sT1-TdTAuGHgZ)j5F8)(~Qtrx`l)Ph<*0OsTK#JrFXag(EMjE;ldo-Uo} z(0yNRF0X=9j$TI_80t3o*Mutu)Av6vfA|N|CLb6x(@6YN*Hy>8wd8rCD_ZKOw<1GgtCaKRZPm5^<9bJpw~hap%7vbp4t2tx&!Tg`KL7L^NlN7LWc+$z z-}V0WHL9}{G+B{CRaXVdJbR^C(y}o>XBkR)L~(|MFF3?{a5z}!j#P8~QFObu`=Njy zo5UKrUuE)#bT6AOeo=L2W40qD(NFEEtcb$mbVDHlyBjG5)Hp+aezPd%lCZuDyK{$C zMY#ppdZ)S8AJQWOBhMT~3TeEA$nV=?e*Mt?p7h{4=HVeh_N-cGsnn91D5!NrWfvSh z(?guxON;eEG;l^x`*m60TryFJ@_WKYaV)Rj`qiTv3iv>466Mu-Mq69_GGDC!cm0kB zdsl$5+wqmosSMC%zdNwK%kWp;gC(2KQBIP&HMzR}2uanAdoPAASI+-N-$74|HGGCp zv5!!OEoJD2_n6LgY~r^7`trfMEq@R7tH#4a9U}DN=^K2Va90v*PJ>lHQTTL#mUXLA zaRR>{FQ&zNdF>gNC~l#}7vqOFABboR!cF&)&roZfwDs-l0t#VH*p_Iox&^JO;-oXS zv6n`v4MySx)mx8DD-xZYne6z;0(z7GWP@*3t&Z{Nagvp|+IqCNOV(w~Wo(PqE%Lfn z+|4`8a_!r0w+@0#PSNN;ffjm!VDyu2~sv@D1^?d>LJt^ zNARLLjYUUHuIaK}(ae=A%ay+8HsGbPN1y4d*2-uafy~%7wVwq{n>Ynb5pt*2g9|=Q z_ms`p(vpLaQ(+*^K_Ta8mc}i1O$;PnB~bikXj4~E_!C>U(b7xkgi?gwq2KYRlTO1Z zF;_KnSvyOt6BIX6XSsk@CHaD;1|H=|Fk|;)4B0;@tfcxcQn;iWyZt!uSLz3Sr=#Qu z^;xe}9?txO7)J}zQL1kq%7-K#CNKC&qG|kVHY$yx)X2HTa`gE`mi3P^c8KaJ|5Cac zA+BSiZc>t~-J_#Q4OS>oj=4Hst)+|o5P{aD`=&cFiSA2Z5wsdsDd;?Faakw~gQZsV@$E{zwf-vxRu0PQO+tp9?28UaAy7ads8c zuOxo89dWA(C;#mHF1i1m`odA4QuCml^IJ2K3otn4ZblPRz1X0IRR!t~T@=1A9Rn#; z29%CJxBjS=ENo4Smzs4__Ad8ovT-1(vXhEBW*lw&u9(a_DVHXFG7aW`w|?XvtmYnU z?Vh-AKW^*MJ3>K;M%WQUDlFF&*FwZBPG^rekETT}w?$HXG$@!{?T>IAsWH?cm_lW~ z>b1EL>rcm!P+uI$UDMJ*upW_B&6A`wXiiMeN~BYmeQ9}2&jsr_@{Je{YXi!o(O#I4 zx4gkMBH7~~`^-UVi&F!8*2d$9(Vv>dksOTcXlvrsvj7=S{oZoECj(1DlMe?e-o#ZY zE78P6S6Z_Jq!|6#kxjClSBfg`5!uW^uxXq}95iBIS;d zrkj&|jU(vsw^|wCV(sRM>3HEPF}Yp*v|TFg$XzEQ!xwE81I@rRz%#n*NcLao{qB+0 zqQQh>c(y4bW
EyB@{@72wfbF#dMVpkQ}wozSKu9Kf01O5Fw4Uk^_$X0~ z`6ZRkv}!oq7useIxmq)OI}w%`g{l~DkAe|aeOw+w$8joOhQTqW=k^!*E)y){#l0M?Z2f=z4}hr!-8{yZO#2_zF2WPo{QB}t$SMc7* z1g0F##fp^Aus&FMxALHUi`>G{X571lmedAI8ec0_EYtURaKX)nZnp!;a4uk3Q!^KiE4Dnx;fM2Y?cSuqZ*SrE!f#T}zaps$vZlfOW2x zvJvl1)twB%&)8+0S#C--uRqrUIn_Z@Wn4D@)}(xCAXIa?T`~Jr8{Fne?322H_#ZS| zB^kVVM?l)`lkf#1Gh5tuxCd7A2YUBS%s$Ui5%{qfLa;~UM9!^i@7awu^oE3PvxZ#hOLP_*&WLnQ=6HJ{0e8yQ3B!SkF zv1|vAAM;b5>EWPI#H7b4M7w}zIz*yYE0@K(lRJ1178)6WjzLqy{t;ed*vBvlz`Cy^;aa93torMZ=l05=ecmTc`E>c2zzoG(dy0Sx8Sc^sM|p ztj7C11O)i1@W13@ql4fSJY{65qU&^abisjG(MuP%qe_U8ej4k;08Gj^Bc$kdNkMzO zD+d*h4PWqI1&giN`t3`%j+<%&wO;13J->ZIf~}!m{XnaGCu7{B7Jj@FAi@f8H5REc z;v5GO8{cn|n78AHjWUX%MD#zRGRu^dW%E;XokyXX1UKs>mP-UGtLRwz@w$^JSlAd99Y_-!J*=&n})5;ySY7A_7q5v`M z!T6nOU?aNZPAO_Jji&XExpnJG2%>%U<4WjVk3N?FcLU4OR9bj4qlEYnzbP_LOa_z)v%BWRwFAW%XjiJ*&*@>fb#RW zf8x!e!4TK}hPduei{2NrUxh@Yr3O4ON|bzls@6_*NZ_L)k|EX*VIy8eqDWxTqqr0D zC1$CmNmw5*d^81~-N3x7Cw$O67*Sp=f5qso?jh#<5U0evoMu)2a&*W$w*rdac+{TT zG^pBN#n!L19x|b%$G!si!S8SZWV!O)t)fM{Xk+pivg9u1X5uoYCfk7(JJ6>N4+*o` zh1f|NhovxZ53|KIV5Oh6A8KOJV3S$x;adLwiLEP$T45~YRpsbD9}<0;_xr|JNV+te zg!0|EayN)}zG1zb){)@Kvis5Ve8PP*ekyZRp1tkck0=B9Sr2Txnvq5>L8i$X;^w%5 zQfu*%KWi^03!R-`BMIx-)=@2Xrl3N2F+EDlf>3ASsk-veSV7dz%3*+k6JKNuuEA|S z?OLgXl#%B(6@bYsR#L8D`d_z{ns&=O!gPt(>JkHBbC(9Bw>I92N!ysJdfN1Ns` zf>Q>|sHicv*Gk+gu4e}~y1@OyVm9EsQ^ae_I0HadJ3gG~@~SfT8ln;hG2tJ2DG$?)Cp>YH&7bh0P3%Sq~G{}y=W9$+{+ zZYrfMH+06>WtMBEU5E9-cZ@;%(@(^m0p!{Jf8C6LKjh|W004erBj6q1z0KH*|GXX( zI0!iY91H{;fBA1Tz5@n^y!|4(pfMt?7 zpPuHkxPjKEJjAiF4ULAHJi#tt8R_o}=9 zK-gQDhvZ1u*gv0KB7w*1eA7gqw-+nuOcg(v%-!404O72|sx=%<@x1_WWoJDE`CkG& zl`>9B*IsE>bHJR0fP!HM0e-P}`1BffuOtCd95T+@VkG)y{a^3DmQi>NdHeSjr0F** zx@oy16?Wa*0Zj)yru&|U$YaIW(B`12W%s$619IgBa{}09f#5;K+)IRIX71eaAifO@ z#lJL-U^w~|Gp@h6*g=g{ z{yVd+(e;`ZkS+|3>WUsbM0z6BlhH|r{dL0ox~Pu5QoZlLxM&quR{jIp&j}g)%%RPIHJ$L^WhD{wz-{^hkq`Kf2tH~#m;Y7zh@}xR} z)2cyyIWMWfv%%!`ai3JQI*oI|KB;Cst(kk73-wQmrCQb0?=+sisyLh2)h{^`x>s5= zSMRsCbuie2p%@H_8#-K$ z6XfkxyxHY`9u2S3?Ox&(uW=$Flz;SIC!|tnh-@7wM zqA}~D&yV;M{ahlp6C!p;3_QIsSL^uoEpZsL*rzXt4!6esg{>!uwlurpb_M^?In%iu z%yw@gbkMK#27uEJ59R{;!l3-$uhY!=+N-j#6wF+AYy4vv*`X7a6smibzx+#lUMzAv z+;<8QTuPSQ{mAcM*9=J(ZB24;0d;^Z+j^?aPaWipR_tbq@^)zPc7)(xp9QL}Gj$&- zIo9otuf+C^i4Mh3wdY>!8g8+g)K6Uq*yW^=InLwf*rqIoE%8ocEcIVq#;cWI4WEe$ z>hvc$YVCc9SjM_sO8Xqlzru@)8EM|4gzj#eDqTbGy>#grs@nW|V|`2#a{w)IaENjP zjL!7!9M_YF5wpMN$AdPX&|@!pF91uw6In<0)aUig#~-Mjw-~&bG>e zUBajYR>^c*WP<=)`@WCeqQ|!8SV_uT2T&o{@ob#^sqyy4$=&hE%lPdq{ArS?Nn3m9 z8eYI)cb$yqz}GW+qJLf891CU?TaJFDoS~RxK+zz=5yD&gC!Ol@lz4DTu1xp}evjiF zdrpvjQ$CTA54$bP{!BAmj{HpLBk+h|vzl~e!s?f3+vT*mj&%dX?>!TS^LY2s334f2 z!(z9UF@ZZ%zo~J^bC&0Vry(m9tCX&m0sG}Kp#S&l-Zm_F+liv*>~gu36mYUMcI{)t z+K+v~Q$LdDe(KtnBc>~7$#j#yJ)GCuy*w1gQq0#RiM^%Fh*i~HoXc{{*8_7ix=ns) z{3=q@zTzc3K9BDcmWOfR_kj}Xl+!8c);CFyOTc~k;1%7QpwTniT%cQ%!e%AA#Eg*S zu*V&DpJ?COY@_uK1etC&+D9<;f)}I`y9(x=v7Kv&>J$YDmH6?xq`uQgudaCPQcvj2 z_D|HfzrXIP$9lDbi}M;DQb^8!8q%Rv_N_W(LMv{+xOAkby(E=a9FNv`1CvRAAbKv% z@-5@GSFtTprdFyfIR>|$y;8qxU=j})(357j1%XOy&8W%neAw?RZlXt-{4@_uF>S8z zR^Bts@Z*M?);2__^zZ8O<2Tl`FEHUWmILGEBUBXq>r^BCz)7P>7v(or<0pbKo9n!6 z;v@D;79-5I>s=IOvA%&V)j>a#%9ihLGVk=%W-75tnU zx)8gAnnQ2z6qyNLWjX~Dlg_vlBP%Z-P60$S-!&lU>^U+CW>dZry0AL$Aw3Kn2m9r- zQiAyOi|y_r{R}N5TM&YUjOa|Dmb&n><8yyv%F0+gi;#Z#*-8Y@x~ zVKaMy%Wf%OIuDGvphOtVNbMBAa;%uHud{PGBBDDr>i>1gw%%Ng0pS=;fw}n>UBA=k9!4l&0%E;_zV88r{ zkV$aR*$-)h`NrR>1BRVvsQd2w^0gW;;W6V(sRpR0`54c#K4`)hx5W-zqbuXaMi*bS`72OI>i|$|x{WJBRsXl{z3t%y(gxoo<8ulsB7sO;yfH z#vk{0zq#88?U`Jw)!V9YR)4wIhFKqQxnwHrqVA>Zq!U3$tkQd_16jXM?d{ae^>Qfm zwvhl@Qr`*W@A;Wf?_EOqB7EVDcs=g5Tz165%+uN$i_ZA63lBb7I&tOe6cVx zI`+6)LAOXshF53Ac_=hCAwPHy$$^7mW&zRh0A=OVaVtzOd<@rJn2n$IeMLfi4=Aj|Yusl-P%0H3Kwq>*gy( zpr>jge>U%kk`^#4r?MgPvB_I05!So(8Hd;qOvKqDa%-Kkg%&fg=@#N-{sBRnfpHF6 zP&^hSU@xaP#ArQr6eBJpChZvF+74}Wj&VHN@t|c%ZZ8q`Spk?eC`FH^ekrP+Kg*`B zA7S5^YDZKny*kgeQZ+xx(GM8qGC`RB;tROZnt6=DRb=DAflsffkMPJ^ltkm5sMFLL9FwA^^~EUcsM1fX)){4(%B!>&B`Qm|y|;#o=ulr=P4 zPu&Md@wuaK*{1hETK0)_!NqNN_%89{T1{E<#StUSdq(m*Gs$Y@wb zbZpU^T#xLO*B3|V|9XJ?fB_irn5Ylh4|rkt|65~i0#eF+|1TnqK5}QX>qWyOA61v3 zv#9YG_GPg+H=CRr*j7)6=8*4Wl_=r@>Vk@Bp)gWVu&bom1o;JLS15$^O0^|Y*E0N0 zr@#}ZfF=$T66tCU)jsKitK&2nl5CzeS2fhN_a`OBDU^8wksI0aKGrE$^(ht>F}M1X zwLjujGHXUyb41o@W#g)3e@x-fNDfgchd;MLoF@KU+s&)Owz3H`uAF!DA1 z7&0q@KdPQQ^Z9)!JCglrLvvnxlPM13)pNk}f7^gh9&VkOZxS5fXp3!sb*i0LUnPWp zn)eP8sP5_F+&`Y>3<`Dr5h^E#wfXilCD)doJg}Q^lp1I;^;eW2FWh*z)oTz@E_bKc zLN~v3H+6QOHBCE7GBGdq_ZF;izg@tfQ1 zpqkEl(!^YBn3G)DU|pwIjjfgvA}!yyYmF#JM)%W-a)lSyf2`35$bAEhjviWMwhW=4 zahb-zZ4=C2R+!dQ;F+ul3ZwCGvimH}*46h?9_T2co1 zye>jE)8xy*S_%rk^`Ld6D_}kfvw@}1b&foj(lGDCQ%bG5!8M&gk~{j`Ep^H&6}@5nbwgC6FCO zr@4A`TP0I%kMPlOTI*r?gn^3jRG?AV=Ah78#? z;U6H{{PEKH(&|r1)|8=zyy}u62{Dz)W75&jQrLVvx9JO`Z0}#49k+<{%vz2t8{@Ns zUv2Om)G8dE$TlDg*}%14Z>g44=xv;$t{0o=G_a}(;MGT?w2kTf*prKOW%cTF)N&IC z>bl)zoo`Ns4xwt4OuU(t8&$@jkXwXi;RGz(>f@v+?6M>%b|6!+O<$oxaiRCR$-6Dh4Rt~rS(Q{ zn8s6e8Q?Te`R?^0i=nZnSSB9@p?8TtS?~M5XBtJ$1pb6!^m?s1-NF*nV}0 z#jsqNX0Al~+m}a{yGc`#M@HTP*GCezmN@dJD zk~oGjyMvlDjH^lSm)6mtzqk&OzDro!GD4N74b6T+Q9$#TE^rZ&x!+Lud&{-&$#M;L zq+~3u_2s6xH9Nj27Z~(vM@V5E=|otqvB<1l#zi`1pbePfp|3ZDRB*qR4}M0?q9ell z*p2X*ZKebD`D83V++in(%%@dOP&9_|(T8-SmYcP-G;LAmY0(yeDZb=~O@8jV(`i}~ z_!OuobL$b0n4}sG!Kw1YtRO4`kriqqHZGKzdxZI6#8~YHi#l(>9yN7Zty_B+T>izK zqHZ|bw;f9IH6&Xn4M2tWK3J3Qbn8A0D=BTcw^Psadm!Hn$G)|3)kJcSp^L-87`RAX z_PTaook@-hOH<{0A(u8sfU{@**eaV4plxf9;kYXU^wOAbm~FY+?07ll;=&0uvu-n3 zD{0b%N{igL5cx@nF4BJ2V&U&|z5I$BOp%6|l19ZCr)aNZ(BJa?(>BWWFVK{*#(cAu z1(w8gv0|vC<_g;P-JsgWKz=*poo`<)1iDgO21NunM^f_1=#WixE~8#!YIiM(vkj@QVP?2_~-|?+f~9l@L-5?KJ~% zErb=kol-Xfb(aNF0=CK(05#A4pW~#yz6p8krUqPv^L~J9y}mKB0AVW$aMhLq*31GP zA2T}#oNYQ`OPo60@Y+76v!3I*P4#X4roapN@G;;c*+q1SB~q0Xpc(M~#`tP=08c&$ zAd`6?l<;+xmU+&6shY1YyhLzwH&sjCV-!^>7Vmn@)ha_5tt48XJJ2fy+?RKKK%AF) zG*h5dzW%yrl<-}WR!fTjAw>IJC&KDdJ`Z5H3migY>02sCU5pHAeV^c3U-zXgbUe8E zD3Z%*BzQdo0$yBB0%{i?q~=`wXS`-?omQL1d;k`trmX8_M~*d5Ae;iz&j^CeM_7;trqS;zZ0J( zSf^)wa({UfX9673>4p#4eQ~-Chv|xsB4YrR@h5bTjXiqM-pn3w1SbHRJyVkw7`(g{ zSe`jEbl0j|p>c5Ef>NC6@w?{5g;ILL53LrM<&UARL&ofjB-k7b_-pM^ zq!V;2uEERl;AH&Exv6h%HBrl-G`F@5*YgF3*P50H`BZu{bl@_le zd&*w9A+B+6=Pq05@b;o@$=k^j!CS*Q_0h|!!Sgj~!~^rrY6PXS^d?EI(`m*=f_fRo zl@i&D)ejN)CwwaB)*0K^d{d_z4RlJ%E?ch4kfkqTP$n;^>C}r zc%|Po2lb10t#t_&Kr}t!n_9>u{lUb)86szHAAJ&Z6e-Sx;%>)J8LD9~*dqGIwo5OH zL|0m$6jcN|d7%SLJL0f60^_Pc5^1G7ILFvkH2g)N`Ym z&6?rTN~rB5=qs)JkTdUY;U+5X6(PIcGZblmLoy>jt*?kPYMFJP{Kc=7_t|?JLxGId z>fcg?E}#p!$9bLaI;Q&?Y5ZPpj@;w3+<}DV;Jk0a#|6e8jg4);mI?mLSCPKmw80WP z;n~M3ltRV&n>?$xwD$#h?zg2b@*jE2{~GtTk1nAIbbyQ&d2ku^O~MIDYh zaS+Q(`jwq%ul4CbT4cC#bcDd_n z?Aq7IkR-O3*5i;fptJnu*8EO~)}a&zYUW+=n`>`(OQ!4eEu~=t`6H*1X9vYYVB{#pooR3` ze)QzEM<6}GwW|MW)9So-aP%M3%Q`LnABGp5axO*X?uG|>&0}mk<1E1SHg`@Wuf(Wo zzwiGN{L*tJiR&g5*>RTK77FTEh5a?Wb0%B$sj2%F zbqL7yC3i;)IOn($y*TFlJm|oIlB|$nUmlli5)n)oHuAs8d(`(m&o1cer zRS^h8>sW&!jE_7leqpev=jgR|P^&C3L#gw7fvsfs@HXs zOi@_xSgR{)-{1gCS^Y`_7tk_puS_$NQ?1Dw^H^{9>dAU){AbP1n5WD@Rz8{;jw#4-q->aN(bpF0N5F#w(c7_JAk1cR;5vawI=z4?q9yzC0!~7P z-R2ix&fO)`d&LRF>`A+eJovvaGVrDqJ&OyqaL{4ilm#1Zc7R5S)T^_&094dCe4Dbt zlkjFO)a2$kvAFcYt0k`HW%y2P07!OTaZDLNSHHYQ@a>4^n%m>Y;H7HX(crD7W5}VY z%Qb;}H)^6dN7e8fnfyP$d(I~YsA(r6F5V4!r9W7VuA4Y$N-qA@8Sk1GAj5>E2_BCb z3*8|#JbDJI*`n=XWHT1(X{Ts-9CEu{Wk@(&ST9Qls z*D|cBu@y8VYc0op;j73=q;*~!0_~ImKAz3kjLSn)_&jzYr&4LVREJ_>pjXED1V&v==F>GBd6HrOtJEfT1Mt z(psxrmkw#;Mv=1PB_3gctnpwuVr!3breM1xGHm4NAK@I8b<=rbdBd)+kIA;B*klNF z;7IGkn;+$W&{s5^JvyGt(ah?IsWIQV;rJ85 zn+9^zYbLUv9&o;T&uu;tO!KZD@%;4uP+^XCAUwi~q?{cqCVe~h((RXXO0^WDPGZ%D zw?&2M$%)nG1XgpYD_2bB02*)5rSMr3`gvcGRMloe?M zdzf9CCehP#TawK0>ifU(ji0&lXwKrodC_ZdZ`mgc3#`xnC!|vaTIIoYmma^%V~oNH zL9hXWU!rly@;`Rl8E+A}{2jrZ5n)fyQIGT!%qv#vlK>bo{mSp%1H!~FXiC0zQkFKp z>VW{__X)MwH0RuDZ6Yf*^YFE|e0nWQCTHp`JK$YD;E;G%+amwE{Y8h}eF8#1y-%*d zD+hiI7C#4^R(}!QR;WuLPd>umt)&dMNmg*#2sq*EkP#?!gz-#s$B9?Z_iv_s{obb$ zoxNunE|J89KW;Va-?16l2D+!uM}8x8#7~VHA$<}hx#tB?Xvk;=_((`pKjzmOW8R>{ zAqrGTwsN6tXoa{W8=?Q3A**!$XRfnc5g0RH@m*R#SokK@=CcD@`;YXqv8a%C+<9>0 zgwU%6hXQNLpEI?DGN^dwkR+M%FIS4U>4S|faD}P5&{T@@?$3{Ps3J+!MmR^O)sr&B zI8-?cMz+kLW`&94UKQy)CAw)>9xmUrER{Kr3Mm(f0yR&NdD+nk6_ zqHlRPwBQ9xN*u%fT4(pCdS}^OxfvLD@o28YCeA>=w;$FPpEvQV@5!(b5>l2K3Wt#q zS3gcSoO#`YXAJKfzWrZyu>W$-tbuMi092wtt^7B=#ET6Fb^riRt5ryS;10Cr zjs2vZ%BHwWTUkX&Ty~sPfi55&7N0mZFgHrvBoa$a#r5i4QzsgHCidD-tUtgw*3N$t zRnI8PDNuTKcDi?Cee$xDnT}k3PLGnN62R5`g(UCtmFfo*yFN-F1Aw!dsqqF2vyoby zWrxXWzbepLZ$>mzlDgS~;%^~UD&$j*vK~fZ#R0BTAiciB`l63*12S`8gCE}#zg_*| z(0hSaW^rYXlM_k;b_T5^xP*ypIIT+kdJs@12{~l~ZgeP^?`o(6<`p274_|+q;2M0P zcFri8sMzz<1rNIf2=Z5hhN(6YPuJ zrjJ3n=Z?o*F$Ll0cz12Sb?jrAX8}(d1%D2%?8=PEnZv~UqMkg|Y%R9}44={u^edsH zl%LhMYhLwgZcIYWKm$T z`@gqhJRvo>D%WLg+#7pI?ip956x8bczdUrRMuHl7!)OtQtTVDI!+sulz>Kt=qXpND zl+M;KTUsm+0|0s;f#Cn?X!)g2zxQBf&KolEqKje^*iV+s|65p*%w|0gqdku(1$g}6 z1;FB_s1ZzD0%)cCx&N~+Q00byLiuC=B?0pr;cUSZ>kZ|Q#b8Rs>x*f~?rAPZEF86H5v8Sd3u@bSJP1Na&AIpFsoV<*7lf6o_QQEFn|)urr( z$#@7!*K{PFo-1l6dg|t%%aXO%0C>kuT^U<@v;9*}m^krp8>6h4#mxi1_#Q&MsG4cd zua|Muy@k%Doo0NHdMj*nx0vQ$q2}s_kY`w(|DKR-*CL-V@rkw(ufDztH(`~2Qa?~? zc`LJF{#(}Eu&snzQ-MPs53$^(!S5Eov)X!M!a+ANBm|Jza4`AtVDLelj>^j$pvGN; z2+%Pss>E1!$$akO#wSG*&Zbzy)~hMo?d)WIQlOaRivt?J1MZ-50rmDwI=9N~pYHgh z(!W2|Aj(PTW}Fj>>YC_jzJKdTDiJoac18%Pe*9b4U;l=jeAWs$lRp;qS||f<`VF-MI!rQ-B7RJdZOkLxlyZ zyA#c2$E3ef>7~;OH24cKIiXP2R%DEewuh!LvOq})2`G#Qk3Hj^5P)@fqzuO82_#jv zxXc^$P9pDyRKh0?m3K5E33NHeWj3?!PAab+z+oSEI^8+0U6o+7@A%m z?1~`>U!*;~^eI}N>Jz7)zzsVw&H|%!VCeDa$+70f!J~0}o{QO8bGx~YsurG|hFrpv zgnM{tVZKjvD`MwcTs^}v+F2ysAJ@|8XGO~GTJ*ZHON@SEb4fRET>YMZk_=bX#H~hz z024L;Cuko03w|ZrTrP`&Av;lGTotY@QDWu5qaWaqC*+jes^2ukEhD7aL%zJ@|C81C zgI^hRqkvg&ZPXuAd(HOu^)WURU5`Jz7pZ-Tmn*YHgIcX_{5ODpd%$vQsvj!`2hZwP z!r4~(9r3qCiti7CyXX$>&2n~=K{7}7`MJkU-K#%yNos6AiOT~xRQv%c5GD(ZUO2`&>o;y?RW72RVo8#oj}I@Kt4)#mHUy*)L5y1bEHepbioj@mn(=M;sIG=%jZrE~0M6EaBPuI?n& zv;PE%z(`Se=X}@O^?*zv3thKRTN+dM(a#V6oL%ePQ_e^O?{K%f4+N<3C#fPMN~zf= zDP~r+M!WG~WbYX3edpZZ)Md3;Z#(cW$f^B#8EPuLCOYIP%7L2nxIBt(O5&ME>`%c0 zb91~K$!iI_1}zO*6#9|%lfU3`(_5Be>F+BiNK$IQX&#dT|Iry5^O@$=@PX(*tH~J` zs|ZWGT^HtlxQ>jaDhghNcpE@6`EfZrHvb(pWNW_C`s{=hpr87mM}B9?S_%`dA(qqa zarkWd+dRQea5H4*&up<0_u0q6NSb;pcyQkovOCdGN$f$kV3t|^jmIR4Ex~?>c3kt8 z?9#?6gM|z22vPzXJIVeBj2#tf79UONl>fr3Cobj|h3`(x!yo*zz^w`6zxN(~5Jj<| z`ZDRhMG9P)!R*%$Ecmt4n(hWkPcRUYc%%cvMbF+g{u(mId{qqNLKkHp)wW0>8o1EvM;t&KKNE&0Y3gb4X$Fn!b^=DRJ7oBI`kSSsk3p<4#5wRr#d8a zY`j>Dmb}T0V?q1onKx)}Jj9XTc-*2UEB*QDW&5?n(!fBKm;WALGnaAED))>}&*bi@ zeR-B~Q4hFHvp554bxTsn2#d|+`v!hY?&?3<0-cpZ6D^KiaC^{6om%gNEOigR zDK&oH_oJSKXuNgKcHgMRjdH>3-1s}!?rV{~ho(qbb6y4qDy>jIKB|-%g|KYC9Ii;0 zX!*?ktoFm<*o$R5y893KzH1Ht7o50!C~xkYipciQeKG|YS>Wg9!xlxlz%2Ut2#{_kX=76r5cRpP*AogsmrJsP|3vQKeZjQ;iOH=;acaOS6D?$ycx2l5`a$PG^@ zvn*f#G0JV00|6AdX#5#_9v;q!b7cg#Ov;EB>Ts8KQ~ZMY)-Tx9Kt5pVKhGTeXW4}R z?Amm-uLYxKH`ey{p`xg7Q?EN>^REDo7=V(#D+*?~LQju`10#-F}nU{ zRQrfbk3DUH)aOrg=YA*=JXY)g^-B5>JMbZ##aq*K54-pL!rTTog8Wrn6r`^o$j{vg zGy{#7F?NT$XIKc|MqUHsLK^W)tFI@gSLT~)%3*YIk|*!{5Otk?Og)ht#6pJ)DwQ)I2ig~3+O z4Vr`Y4_}X)GBW4N85WC`_|Mv>p6P2%U7o(ISA;e1ESmuPkwsr(|EU2H(GL_WWXc`8 z;kAO4THf)9!v^`t92VWnKXpRIYD(HomQW{E-wjS#J73=)xf_Kfg`N_PQpAJLoCAzwE-Wgxo2k6up8T}@6r76qC%mP-+pAMZ1i@AhLq;P5dKVtkn9~g| z>!AI!*oBY5WB%`4xqO#f+n&M6!sqS9U=WM)0)XDv;4!6dio_xIGr(i6BK`kOZOT;r zD>h#(`9|!GI<`KwJK)V*==!4TE zxQjBjdO5gbaDxat{djJ+n9>3|O!`5@BlIVV`I3CC zz8hQ;f497lnH!w{t}NM|#ITp*hR5zyP%;-crq?aUR@t-@tR1nKS6!=Pjc9P~w`azQ z)-7nbVqC5Hdxp4!4#Hn^yl^^m-k_2#d|)@)8*Q!)EC|FBxO6~2a9Vb)HT_J;1Fhrz zmM^pk%iPm}G5np6mtrUPS4K~lFdrcE)qv%N$=xJcxh9a&Fw=2CEBs^SvrqJQvk=1a z;mjQ03322&xqE<8TLFQ9xbezqm1W(xmX1XM2A>y?CwCL!w}?SdU}=&yJkq~mRGA*) zf%j}s2A0AGy00n}iGPuykh4Pu``FV97+NGF3Tbt1(Y-zw-cV~@r!$a~`7rGG$$O3X zB_VO`FAgp*A7tTtCEm->AL8ZgNKQUzK?vv-5-gT>W4EfA=AC@>T3vTU)X%ab;=Jk} zZg?(kKp*RmbjUd11&RZ&l6^4RwoU=IMHN{7`9InW&&f;SA0tbdpXQH?7qA+(~|o1jI0Pxha-BR{dQ9SGG&nK>;D3eX?^Y+n}wHhS^ezg2mqLg zL$3VzACu=$F6VZ&`QNdW`?cU#^Iv@D)@b)u=1HPk_VOi>8#_@>>%aE_MB=7Yj8nUs zbcqMuKwo`57oR!jia>zL&+quQN9yF42{wEFit|2e1Ndt4KhhA(S778?uQNcD#2!`SN^j6t2+6PRJACP(seF1<-w!XOjT#CC-;bNgQTI)?79@=nWykzM82mr- z7s249$bh7IOJ^Tp@+}dpH_z+{_QPC0!*5BHPM27&8pHh^iJ&C^Kq7UYqcTD^C*QRL z-Wvd~+dxR@&<_$v-rmt#T>E@2ZQ%B5IQ;=e0J z2N18)uG`1Aq&qCa`?C8+@IKqnU3(^{;;b1Q8uf_4M)@9+_&WvrIL1%52A~(b_wCV@ z1j$c_-JE=<+rM58oF06$34_jbZZb)jaC&C~L*iKgteDdC?ftp)_=(e$NVGiT`bUZB z&|cEs8a6WwvVnLKD^$}#%eAn!TBzH4L2wxb@XHzC24tnc>h5INqr(TWch0Je@1^w6 z+pGX<$hB6l&If}4#4ncwTn>sY+6mKwqCsufcVr<<-sMYwN)IU@nBicW8;Dnx_Wb56 z*|}wg!#{w%m?wYKSX~KVa-=}9&k3qCKIoT#BBfZ=CMW9ao%2S>x*vWb3|hk$WcGjU zIF3#b4!#_I>lP*HcP^!2lKtJz=YD6e7So*#)E?- ztk1BxDxy(v5I(IyIt24>$IVnw|ITNEl>m24n$$a$bvEc@nNPC*lP^w{=(|*mot>k# zWGjEVP>G7-#ApBEqt$mHubpAVkHCCSanSvxQg8U~uDo2QmV@?tgDrO?3W{p$^|Wc( zrspO^+9=)ESlIL*&;qDTN^Gg@BdKBk1MYX+oLz6>_06~a8n0*|@deoR{kj)>@9(sx zDkw|F?4Uvc?{$|odIKRzDl zR=nb4(V){qO6?!sYhwY8F%4nNMelxRRz{OzU}&|*d_T=`|29?q`vGt_&xYq%e=6}g zoyv(*a02XDE|Ty8<{i`=okOSh6~sx|Dqdv`sjzsHvB75$N7mMNyblX^l-E%wI;2kE zvm+^;uxU!6^1JPzmfxTf^iPSw?817fJ$!fDPfK<&&1b-k4_&0Rk5@G^y?O-v_&`az zkhtduqSQe65fyE5vB+fd;K;5Py34NKRT7%vkzi&F`+;-Z&nQfq# zxc_C;G{8wZV36l2J>P#+{#Vd`jkQhkVwllRkjr-X*;4{~K_1JQ=hXc{u>s4++qi)z z0LdidA=GxaXp~D7BG-l@XZCX}T%^Ir%VcMNAE(E_I7wpLOU)`8!epoiL5juztiHUk zSO^6H^alxm;2($XhB|aiegT0pVxgJk;$dq$KrVktu(lkB*R{?Pf&iU*GlRbTaO7`F zHH_@J8#Le@D?}2`1WY|Q#tXAFYTZ`n2V4V3Dm!QEoNr2PoJ@E}hISNuBnN^bt!O_K>IAbgVA`@=u`%V=ii!Oy* zk;iX`e*011O3v!ER};<*ZI@^)zcn8|?PPo8vi{e^H0k25v2Vu&KHSSOR3ytRE;N@E zC)^fG1!5o;)aS*-^bB8WKaxe!G;|E`93Om9!#Z5SP@AN+FPnjCex8OkA!`A#S3x!U z1Hxh!@l-yEAK_dv4nM>nBb?`QDOlUTBqgaRCG5})^v%l5LM4sDX?Ws3C;~elg?yWt zK^>7auXgO(IdixcM1|7oitWnFG&Zy=3HhNNLwmN_Ohwl|C;0fQw{0f%< z`ZgKKdwqFn;OF^F*ujf_i0<3Mh}G_;F6L6600?1G0k2zHHb50K1E=FA=p8<%)9xeh zek6|;P^Q*=U-?MN<(a> zYW1>?fCT2mtA9}gDRN{EU`tnKVjmx}$`8u9*}?to!wji1Ey?tO%jz8j0um#f@`2QM zx{%dc|GfixEm@f*5GRJ6>6~K&u0nhH5bW_tU%l>mB=4cCh$8m%cB$3X+wUBaYN zop(5GLr~;pDX?p%ctQaSz75m@tQ<;Q&1QN{ez=biNYVZ;A@*ooZrD8_kUF*Qvhz3d zPNd2b4CcJ+7^vCODgYAxzj!b%rI{_f1nni)WHd zkaccC@)Bx|Qzq&6bC4>q#CkBRQu>3!1xI>HM+O4L;r}cV{yaM(9*`Q+EIlFf|I+WI zD$p>LV#^HXmOxz=MV-|7W?VC2b)VgRhVH(%_2aeDKC4|n!MKfU?rWV(!~EiIc*C&T zd;7Q`2w?z}5_|F4DX>C%yWZl=iME`3zI7&=H9XA}LdK zIuG?exko$bUGf5!JSn?Sh)iqZhQ&azo$@&6>owPU{>ZtK0q9UL;Nt8e*LU-TeblXGU0a8mt-Q89n(gJ7rAY1ZH znwnsJ(KRy-Lw**AC^;^rejfXE4#x`V@>+pGo3FAWZ|}>wnt3*Kgxt<*^Q0B*%4ewE zntv}>Il^!DcJ507H^Bi?Lr+Q%i3rVf^$b2EB4MOyv8AEYqa!%yKjfEz$eSU6%Iyvu z!P1P*Fus zweHH|*jnv3ou{)Jhfiyk^+&i9*Rxndw+Ne0YykgzATWy~rdXR9gP)LPx3 z4`Hl?YgB11sfe}5*Qg~|rer5y_kwaMFZ33s!sn-cQI^0OwhQNUJjHOO>8-#`d3q%6 zA`#hauD#PsADqkmjvbS&+}<%^`kCU;KePwNv;|=b=%paEa6g6JnNo&hCND@D)OF`-WIRhsP_X0G~W5n<@-y zar_lNV3Sie@Ss9vW06LN@upt|vs#zvOq}v}96JNXU9(>riJw11?BNi`4lCF7J|fr_ zW`oTo!^&>Q>z~-AMH#o!eGO49zUH$}#j(Pp4E+T|m=dxh251qQD92kQ)}xFdGB2cAGn;5P13vm%+Jv23 z&9>7gg_*sJ{rj+8i_9(MRzK!DLj8}M0rPhnGi{#~-+nWwwV4VkxBMQHJIz^m*eIz1 zfa31YR<*O4+0duxVfZwqPZDG21KAD(cU4@3q&|+x^+e(vOm*s=i`rn?qSt2X8=Z$O zYa_&dFgBHm;ER-2W@*I&AJex)82PnlXZpZeLG2V1G{yC>q8guvDA>xS@G=R*We_Ej``^;OdBaW`|f z<)OrtYM`F5LbSZ)SeKV-ETjdpK$kp3b>Qo2^4V!nLi;xEek-uGUt za=0NgROC|+-4jpgxOOKWCmRnRD)z_7c1PT+A@_)WnTUMAu*eGa#tiKY&4jf` zEAb45>(>E0_e66qx@AegM&4nGa}KaVj;HrB{a2jcAy!`#J>O0Y+!a7@ zzhbkUjWK?9i<_}?AqT(P-1t5&@vWxX=X&c@_jRHj?>#$RW00a6;R$*S{7C+slx-jC zwX@Zc+L)6eb zV@!;zJ=%LlD^Ge)TN+@iqj;Gze@uzgJZ64Q+(H*hT=craD2h)r`FONVvek0#5mvvS zi83uSU{wdvYPQSTl;MrLEiswJ*$u|t=XzGjM&;*HmTkb{O+q!(^@_6tpiJNb#}OC^ zcUqd>MuiT!+E;$p=Bft?36P?IPFk(|&|eM=UpL4~&eymwoJRlhUIYEM!CcU}RAUf+ zNRl|BOg^bDZQJk21VDbL05j zF3xIJync6VISNH3rL z5};$$TA(3QTWS+XV?uY|!1dQZhDhGN>5Y!ck8uE^ny4aY4Hs(#?c-T>=SM9${^$^Y za^F?i4}Wpl8f-(kGB2n{mcCwtX1GVc;htRxDb2p zZtD@^TV`Eat@Jz7u$jG8%ATm7o{ZhH^bY+#HS5o{o3(^nr?dS?m$yGpkIvn)OGv{Y zdLS0GfM^q&AeTT~MTFroVBvdsLIo_GalfKNrPhoV0i62d5nVtvx3TPM(hux*Y}z3bUo-QY_iQX=xD?0rjo zgJ49JvBdMmjp;+zL;Y9U2pbndk`Z2I{eS>p6M05oG4%W!Sujk6csCrtoq3cyB2LCS zMq?lNzD8ZIDiay*-|uHP%wf#+s`bs83LMo`Uf;L`_{cIf97|bKf}?k@{G$SdTOD$swj58aN2O?W6nN6m|wu};p`KTgj$*!sdhUQ zIcY76%*mqJ(Iv7JU5#5nZ#LTAkW%M$>prC1Pm2oHU*EU&NEKTdpSn-fUTKNwfA%EJ zRck@^Dt$r?q|Hs6xNLoDAJ*Frf<3igMc@+|a)rh8aSogn_fnuu=X%xxg2d&l`I}53 z-L^S#Min|>ha8BUiq-#0+gb!N2lcY_Ue*lWIJ74-g!?>=nBw!04?sU_&=Smod=>k4 zd|EvRrV^?hh6oo2HP`&pUK-WM^cUjJ&nun}nkOgoffRRr-upSpmKtJw3_L}rlL;73 zrSpFYW|A~RSL>FO_c>gIfNt*oEcjXY=QoDbn5xg9`@4NF`<@f1FWe1kK52_x5ET2R2Wu5`#)_Z`uMkFjFqomXx z0ZjaXzxHOwgNO|zH${mzM|5oicus)qPvm;E=q(U4h>9Dd9D2cQAd}r4p-hk1OyQ-= zF;|i8@!UeC2tR3i1#|(adPMQ3SEu0xFFgzTc9HO~>4Y118Ba!*oGafbRRE*l-|s64 zx)*5+wp|BcnW9~HM7t5t|7{^64YqZs?And*ypR0O5G7HG@f;zjcs4KJMvfPDBKqqt zUit!~#4t&NH-$`#5R)VNaKA+`0$Zo{_K9a9IbqMCC4-|u*^Z&=Vx`;yqRtz zp#w6JjfAy^l|PQ;m6zaf9*p2IG@L@W@Y=v%4THb(KM;DbP$i^wAkm#CbF^ovNbePM zz~7dQKNoKcQCn&A=Zbv*f`~P|>P|TBZ_m8C8i)btm3wdk5Z3d%NnIKt_+r_^#_M~t zwc><6v@9eztQB)l|nLdNbG}D0Si4%VmkFp5X@n|BrJ152z7Z`QPyZ7mc zRzUu%GU#m4@itt>=EH6Bk9u#^tu0-jdob81iCt0h*L}rsvs1uiV<^qfidJdP?Ce}b zjxBHR&lT^N8KR2}I14H>j+8W+`wI2$eZh^68|J^b!Xh>yaTLyCfGFu_;2hi`UjG%0=66UoTv}ijR7z&+k^~8WYLuoLB15Tm>n% zy%5g0`}>TY)wq0E&Oy8~zVt#%ed`gB3-t!@qaSH~@&6@d-gg-LD+tsa*lP4Ab`!uy gN&+GCiahPrkUQS@Sg9=FKZ<}Z8<<=y({sT72WD+OO8@`> literal 0 HcmV?d00001 diff --git a/workshops/github-copilot/assets/banner.jpg b/workshops/github-copilot/assets/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1ddc32d4390fd3321065f6f146049c4f0164d15 GIT binary patch literal 78604 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

iG?oJjPlVYY`K!=9y8d$AeC#U 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 literal 0 HcmV?d00001 diff --git a/workshops/github-copilot/assets/quickchat.png b/workshops/github-copilot/assets/quickchat.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe86c0c3680c8244c62826a2b1c097b18a02d6c GIT binary patch literal 15720 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 WA=>RgpP7}jan9z_>0&F_sQ(35U)kgU literal 0 HcmV?d00001 diff --git a/workshops/github-copilot/assets/src/completesolution.zip b/workshops/github-copilot/assets/src/completesolution.zip new file mode 100644 index 0000000000000000000000000000000000000000..42cf96100eecc09d42bfd2e25cae8532478c9dfc GIT binary patch literal 48956 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

$_#4|3*ZHM$TY3yItBS#)fy8hloO8Jq) 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 re*ph&<{uO7|ISn_{WIo2((b=DRNxUH@x6K4 literal 0 HcmV?d00001 diff --git a/workshops/github-copilot/assets/src/exercisefiles.zip b/workshops/github-copilot/assets/src/exercisefiles.zip new file mode 100644 index 0000000000000000000000000000000000000000..fa3ead7fedf316f0717b20da3341db49182b337e GIT binary patch literal 7020 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